Compare commits
1 Commits
507fc6ccdf
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| edd2f626be |
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Helpers\WhatsappHelper;
|
||||
use App\Models\{Cat, Food, Matting, Medicine, Role, Setting, Supply, User};
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class SendOperationalNotifications extends Command
|
||||
{
|
||||
protected $signature = 'ilycats:notify {--dry-run : Tampilkan kandidat tanpa mengirim WhatsApp}';
|
||||
protected $description = 'Mengirim notifikasi WhatsApp HPL, kedaluwarsa inventori, dan berat badan yang belum diperbarui.';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
if ((Setting::where('key', 'notif_wa_status')->value('value') ?? 'inactive') !== 'active') {
|
||||
$this->info('Notifikasi WhatsApp sedang nonaktif.');
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
$this->sendHplNotifications();
|
||||
$this->sendInventoryExpiryNotifications();
|
||||
$this->sendWeightStaleNotifications();
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
private function recipients(string $settingKey)
|
||||
{
|
||||
$roleId = Setting::where('key', $settingKey)->value('value');
|
||||
$query = User::query()
|
||||
->where('is_active', true)
|
||||
->whereNotNull('phone')
|
||||
->where('phone', '!=', '');
|
||||
|
||||
if ($roleId) {
|
||||
$role = Role::find($roleId);
|
||||
$query->where(function ($q) use ($roleId, $role) {
|
||||
$q->where('role_id', $roleId);
|
||||
// Tetap dukung akun admin lama yang belum mempunyai role_id.
|
||||
if ($role?->slug === 'admin') {
|
||||
$q->orWhere('role', 'admin');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$query->where('role', 'admin');
|
||||
}
|
||||
|
||||
return $query->get();
|
||||
}
|
||||
|
||||
private function sendHplNotifications(): void
|
||||
{
|
||||
if ((Setting::where('key', 'notif_hpl_wa')->value('value') ?? 'active') !== 'active') return;
|
||||
$today = now()->startOfDay();
|
||||
$recipients = $this->recipients('notif_hpl_role_id');
|
||||
|
||||
Matting::with(['dam','sire'])->whereIn('status', ['proses','hamil'])->whereNotNull('tgl_kawin_awal')->get()->each(function ($m) use ($today, $recipients) {
|
||||
$hpl = Carbon::parse($m->tgl_kawin_awal)->startOfDay()->addDays(63);
|
||||
$days = (int) $today->diffInDays($hpl, false);
|
||||
if ($days < 0 || $days > 7) return;
|
||||
$label = $days === 0 ? 'HPL hari ini' : "H-{$days}";
|
||||
$message = "🐾 ILYCats - Pengingat HPL\n\nDam: " . ($m->dam?->nama_kucing ?? '-') . "\nSire: " . ($m->sire?->nama_kucing ?? '-') . "\nHPL: " . $hpl->format('d-m-Y') . "\nStatus: {$label}\n\nMohon pantau kondisi induk dan siapkan kebutuhan persalinan.";
|
||||
foreach ($recipients as $user) {
|
||||
$this->sendOnce("hpl:{$m->id}:{$today->toDateString()}:{$user->id}", 'hpl', $user, $message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private function sendInventoryExpiryNotifications(): void
|
||||
{
|
||||
if ((Setting::where('key', 'notif_inventory_expiry_wa')->value('value') ?? 'active') !== 'active') return;
|
||||
$today = now()->startOfDay();
|
||||
$limit = $today->copy()->addDays(14);
|
||||
$recipients = $this->recipients('notif_inventory_role_id');
|
||||
$types = [
|
||||
'obat' => [Medicine::class, 'nama_obat'],
|
||||
'makanan' => [Food::class, 'nama_makanan'],
|
||||
'perlengkapan' => [Supply::class, 'nama_perlengkapan'],
|
||||
];
|
||||
|
||||
foreach ($types as $type => [$model, $nameField]) {
|
||||
$model::whereNotNull('expired_at')->whereDate('expired_at', '>=', $today)->whereDate('expired_at', '<=', $limit)->get()->each(function ($item) use ($type, $nameField, $today, $recipients) {
|
||||
$expiry = Carbon::parse($item->expired_at)->startOfDay();
|
||||
$days = (int) $today->diffInDays($expiry, false);
|
||||
$message = "⚠️ ILYCats - Kedaluwarsa Inventori\n\nJenis: " . ucfirst($type) . "\nItem: {$item->{$nameField}}\nKedaluwarsa: " . $expiry->format('d-m-Y') . "\nSisa: {$days} hari\nStok: {$item->qty} {$item->unit}\n\nMohon cek stok dan rencanakan penggantian.";
|
||||
foreach ($recipients as $user) {
|
||||
$this->sendOnce("expiry:{$type}:{$item->id}:{$expiry->toDateString()}:{$user->id}", 'inventory_expiry', $user, $message);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private function sendWeightStaleNotifications(): void
|
||||
{
|
||||
if ((Setting::where('key', 'notif_weight_stale_wa')->value('value') ?? 'active') !== 'active') return;
|
||||
$recipients = $this->recipients('notif_weight_role_id');
|
||||
$threshold = now()->subDays(7)->startOfDay();
|
||||
|
||||
Cat::activeInCattery()->withMax('weightHistories as last_weight_at', 'tanggal_timbang')->get()->each(function ($cat) use ($threshold, $recipients) {
|
||||
$last = $cat->last_weight_at ? Carbon::parse($cat->last_weight_at)->startOfDay() : null;
|
||||
if ($last && $last->gte($threshold)) return;
|
||||
$days = $last ? $last->diffInDays(now()->startOfDay()) : null;
|
||||
$lastKey = $last?->toDateString() ?? 'none';
|
||||
$message = "⚖️ ILYCats - Berat Belum Diperbarui\n\nKucing: {$cat->nama_kucing}\nBerat terakhir: " . ($cat->berat_badan ? $cat->berat_badan . ' kg' : '-') . "\nTerakhir ditimbang: " . ($last ? $last->format('d-m-Y') . " ({$days} hari lalu)" : 'belum ada pencatatan') . "\n\nMohon lakukan penimbangan terbaru.";
|
||||
foreach ($recipients as $user) {
|
||||
$this->sendOnce("weight:{$cat->id}:{$lastKey}:{$user->id}", 'weight_stale', $user, $message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private function sendOnce(string $key, string $type, User $user, string $message): void
|
||||
{
|
||||
if (DB::table('notification_dispatches')->where('notification_key', $key)->exists()) return;
|
||||
if ($this->option('dry-run')) {
|
||||
$this->line("[DRY] {$user->name}: {$key}");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
WhatsappHelper::send($user->phone, $message);
|
||||
DB::table('notification_dispatches')->insert([
|
||||
'notification_key' => $key,
|
||||
'type' => $type,
|
||||
'user_id' => $user->id,
|
||||
'channel' => 'whatsapp',
|
||||
'sent_at' => now(),
|
||||
'message' => $message,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]);
|
||||
} catch (\Throwable $e) {
|
||||
Log::error("ILYCats WA notification failed [{$key}]: {$e->getMessage()}");
|
||||
$this->error("Gagal {$key}: {$e->getMessage()}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,19 +2,75 @@
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use RuntimeException;
|
||||
|
||||
class WhatsappHelper
|
||||
{
|
||||
public static function send($target, $message)
|
||||
public static function send(string $target, string $message): bool
|
||||
{
|
||||
$token = "YOUR_API_TOKEN";
|
||||
$curl = curl_init();
|
||||
curl_setopt_array($curl, [
|
||||
CURLOPT_URL => 'https://api.fonnte.com/send',
|
||||
CURLOPT_POST => true,
|
||||
CURLOPT_POSTFIELDS => ['target' => $target, 'message' => $message],
|
||||
CURLOPT_HTTPHEADER => ["Authorization: $token"],
|
||||
$target = self::normalizePhone($target);
|
||||
$provider = strtolower((string) config('services.whatsapp.provider', 'fonnte'));
|
||||
|
||||
if ($provider === 'waha') {
|
||||
$baseUrl = rtrim((string) config('services.whatsapp.waha_url'), '/');
|
||||
if ($baseUrl === '') {
|
||||
throw new RuntimeException('WAHA_URL belum dikonfigurasi.');
|
||||
}
|
||||
|
||||
$headers = [];
|
||||
if ($key = config('services.whatsapp.waha_api_key')) {
|
||||
$headers['X-Api-Key'] = $key;
|
||||
}
|
||||
|
||||
$response = Http::timeout(8)->withHeaders($headers)->post($baseUrl . '/api/sendText', [
|
||||
'session' => config('services.whatsapp.waha_session', 'default'),
|
||||
'chatId' => $target . '@c.us',
|
||||
'text' => $message,
|
||||
]);
|
||||
|
||||
if (!$response->successful()) {
|
||||
throw new RuntimeException('WAHA gagal mengirim pesan: HTTP ' . $response->status());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
$token = (string) config('services.whatsapp.fonnte_token');
|
||||
if ($token === '') {
|
||||
throw new RuntimeException('FONNTE_TOKEN belum dikonfigurasi.');
|
||||
}
|
||||
|
||||
$response = Http::asForm()->timeout(8)->withHeaders([
|
||||
'Authorization' => $token,
|
||||
])->post('https://api.fonnte.com/send', [
|
||||
'target' => $target,
|
||||
'message' => $message,
|
||||
]);
|
||||
curl_exec($curl);
|
||||
curl_close($curl);
|
||||
|
||||
if (!$response->successful()) {
|
||||
throw new RuntimeException('Fonnte gagal mengirim pesan: HTTP ' . $response->status());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static function configured(): bool
|
||||
{
|
||||
$provider = strtolower((string) config('services.whatsapp.provider', 'fonnte'));
|
||||
return $provider === 'waha'
|
||||
? (string) config('services.whatsapp.waha_url') !== ''
|
||||
: (string) config('services.whatsapp.fonnte_token') !== '';
|
||||
}
|
||||
|
||||
public static function normalizePhone(string $phone): string
|
||||
{
|
||||
$phone = preg_replace('/\D+/', '', $phone) ?: '';
|
||||
if (str_starts_with($phone, '0')) {
|
||||
$phone = '62' . substr($phone, 1);
|
||||
}
|
||||
if (!str_starts_with($phone, '62')) {
|
||||
$phone = '62' . ltrim($phone, '0');
|
||||
}
|
||||
return $phone;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -157,6 +157,28 @@ class MattingController extends Controller
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function updateStatus(Request $request, Matting $matting): RedirectResponse
|
||||
{
|
||||
Gate::authorize('check-access', ['matting', 'update']);
|
||||
$validated = $request->validate([
|
||||
'status' => 'required|in:proses,hamil,berhasil,gagal',
|
||||
'actual_birth_date' => 'nullable|date',
|
||||
'breeding_notes' => 'nullable|string|max:2000',
|
||||
]);
|
||||
|
||||
if ($validated['status'] === 'hamil' && !$matting->pregnancy_confirmed_at) {
|
||||
$validated['pregnancy_confirmed_at'] = now()->toDateString();
|
||||
}
|
||||
if ($validated['status'] === 'berhasil' && empty($validated['actual_birth_date'])) {
|
||||
$validated['actual_birth_date'] = $matting->kittens()->min('tgl_lahir') ?: now()->toDateString();
|
||||
}
|
||||
|
||||
$matting->update($validated);
|
||||
$this->logAction('MATTING_STATUS_UPDATED', $matting, 'Memperbarui tahap pembiakan menjadi ' . $validated['status']);
|
||||
return back()->with('success', 'Tahap pembiakan berhasil diperbarui.');
|
||||
}
|
||||
|
||||
/**
|
||||
* SINKRONISASI DATA INDUK (EMS Fix)
|
||||
*/
|
||||
@@ -267,7 +289,10 @@ class MattingController extends Controller
|
||||
'sire_id' => 'required|exists:cats,id',
|
||||
'dam_id' => 'required|exists:cats,id',
|
||||
'tgl_kawin_awal' => 'required|date',
|
||||
'status' => 'required|in:proses,berhasil,gagal',
|
||||
'status' => 'required|in:proses,hamil,berhasil,gagal',
|
||||
'pregnancy_confirmed_at' => 'nullable|date',
|
||||
'actual_birth_date' => 'nullable|date',
|
||||
'breeding_notes' => 'nullable|string|max:2000',
|
||||
'ems_bapak' => 'nullable|string',
|
||||
'ems_ibu' => 'nullable|string',
|
||||
'no_pedigree_bapak' => 'nullable|string',
|
||||
|
||||
@@ -30,13 +30,24 @@ class CatController extends Controller
|
||||
*/
|
||||
public function index(Request $request): View
|
||||
{
|
||||
// Proteksi Akses: Read
|
||||
Gate::authorize('check-access', ['cats', 'read']);
|
||||
|
||||
$now = now();
|
||||
$listScope = $request->get('list_scope', 'active');
|
||||
if (!in_array($listScope, ['active', 'adopted', 'external_parent', 'all'], true)) {
|
||||
$listScope = 'active';
|
||||
}
|
||||
|
||||
$query = Cat::query()->with(['pic:id,name', 'sire', 'dam', 'registrations.association']);
|
||||
|
||||
// 1. PENCARIAN GLOBAL
|
||||
if ($listScope === 'active') {
|
||||
$query->activeInCattery();
|
||||
} elseif ($listScope === 'adopted') {
|
||||
$query->adopted();
|
||||
} elseif ($listScope === 'external_parent') {
|
||||
$query->externalParents();
|
||||
}
|
||||
|
||||
if ($request->filled('search')) {
|
||||
$search = $request->search;
|
||||
$query->where(function($q) use ($search) {
|
||||
@@ -46,22 +57,18 @@ class CatController extends Controller
|
||||
->orWhere('pedigree', 'like', "%{$search}%")
|
||||
->orWhere('kode_ems', 'like', "%{$search}%")
|
||||
->orWhere('lokasi_kandang', 'like', "%{$search}%")
|
||||
->orWhereHas('pic', function($sub) use ($search) {
|
||||
$sub->where('name', 'like', "%{$search}%");
|
||||
});
|
||||
->orWhereHas('pic', fn($sub) => $sub->where('name', 'like', "%{$search}%"));
|
||||
});
|
||||
}
|
||||
|
||||
// 2. FILTER OVERDUE (Link dari Dashboard)
|
||||
if ($request->filled('filter_overdue')) {
|
||||
$filter = $request->get('filter_overdue');
|
||||
|
||||
$query->where(function($q) use ($filter, $now) {
|
||||
if ($filter === 'vaccine') {
|
||||
$q->whereNotNull('jadwal_vaksin')->where('jadwal_vaksin', '<', $now);
|
||||
} elseif ($filter === 'flea' || $filter === 'obat_kutu') {
|
||||
} elseif (in_array($filter, ['flea', 'obat_kutu'], true)) {
|
||||
$q->whereNotNull('jadwal_obat_kutu')->where('jadwal_obat_kutu', '<', $now);
|
||||
} elseif ($filter === 'deworming' || $filter === 'obat_cacing') {
|
||||
} elseif (in_array($filter, ['deworming', 'obat_cacing'], true)) {
|
||||
$q->whereNotNull('jadwal_obat_cacing')->where('jadwal_obat_cacing', '<', $now);
|
||||
} elseif ($filter === 'grooming') {
|
||||
$q->whereNotNull('jadwal_grooming')->where('jadwal_grooming', '<', $now);
|
||||
@@ -69,63 +76,47 @@ class CatController extends Controller
|
||||
});
|
||||
}
|
||||
|
||||
// --- TAMBAHAN: 2.1 FILTER KESEHATAN (Link dari Dashboard Under Treatment) ---
|
||||
if ($request->get('filter_health') === 'treatment') {
|
||||
// Menggunakan kolom treatment_status: 1 (Treatment), 2 (Healthy)
|
||||
$query->where('treatment_status', 1);
|
||||
}
|
||||
|
||||
// 3. FILTER STATUS & LOGIKA USIA DINAMIS
|
||||
if ($request->filled('status')) {
|
||||
$status = $request->status;
|
||||
|
||||
if (in_array(strtolower($status), ['adult', 'dewasa'])) {
|
||||
// Dewasa: > 12 bulan
|
||||
if (in_array(strtolower($status), ['adult', 'dewasa'], true)) {
|
||||
$query->where('tanggal_lahir', '<=', $now->copy()->subMonths(12));
|
||||
} elseif ($status === 'Junior') {
|
||||
// Junior: 7 bulan - 12 bulan
|
||||
$query->whereBetween('tanggal_lahir', [
|
||||
$now->copy()->subMonths(12)->addDay(),
|
||||
$now->copy()->subMonths(7)
|
||||
]);
|
||||
$query->whereBetween('tanggal_lahir', [$now->copy()->subMonths(12)->addDay(), $now->copy()->subMonths(7)]);
|
||||
} elseif ($status === 'Kitten') {
|
||||
// Kitten: < 7 bulan
|
||||
$query->where('tanggal_lahir', '>', $now->copy()->subMonths(7));
|
||||
} else {
|
||||
$query->where('status', $status);
|
||||
}
|
||||
}
|
||||
|
||||
// 4. FILTER STANDAR (Ras & Gender)
|
||||
if ($request->filled('ras')) $query->where('ras', $request->ras);
|
||||
if ($request->filled('ras')) $query->where('ras', $request->ras);
|
||||
if ($request->filled('gender')) $query->where('jenis_kelamin', $request->gender);
|
||||
|
||||
// 5. VALIDASI SORTING
|
||||
$allowedSorts = ['nama_kucing', 'lokasi_kandang', 'berat_badan', 'created_at', 'pic_name'];
|
||||
$sort = in_array($request->get('sort'), $allowedSorts) ? $request->get('sort') : 'created_at';
|
||||
$sort = in_array($request->get('sort'), $allowedSorts, true) ? $request->get('sort') : 'created_at';
|
||||
$direction = strtolower($request->get('direction')) === 'asc' ? 'asc' : 'desc';
|
||||
|
||||
if ($sort === 'pic_name') {
|
||||
$query->leftJoin('users', 'cats.pic_id', '=', 'users.id')
|
||||
->select('cats.*')
|
||||
->orderBy('users.name', $direction);
|
||||
$query->leftJoin('users', 'cats.pic_id', '=', 'users.id')->select('cats.*')->orderBy('users.name', $direction);
|
||||
} else {
|
||||
$query->orderBy("cats.$sort", $direction);
|
||||
}
|
||||
|
||||
// 6. EKSEKUSI DENGAN PAGINASI
|
||||
$cats = $query->paginate(15)->withQueryString();
|
||||
|
||||
// 7. STATISTIK (DIPERBAIKI: Menggunakan treatment_status)
|
||||
$totalCats = Cat::count();
|
||||
|
||||
// Perbaikan: Tidak lagi menggunakan string search yang tidak akurat (15 vs 4)
|
||||
// Sekarang langsung merujuk pada kolom treatment_status bernilai 1
|
||||
$sickCats = Cat::where('treatment_status', 1)->count();
|
||||
$activeCats = Cat::activeInCattery()->count();
|
||||
$adoptedCats = Cat::adopted()->count();
|
||||
$externalParentCats = Cat::externalParents()->count();
|
||||
$sickCats = Cat::activeInCattery()->where('treatment_status', 1)->count();
|
||||
$breeds = Cat::activeInCattery()->distinct()->whereNotNull('ras')->pluck('ras');
|
||||
|
||||
$breeds = Cat::distinct()->whereNotNull('ras')->pluck('ras');
|
||||
|
||||
return view('pages.cats.index', compact('cats', 'totalCats', 'sickCats', 'breeds'));
|
||||
return view('pages.cats.index', compact(
|
||||
'cats', 'activeCats', 'adoptedCats', 'externalParentCats', 'sickCats', 'breeds', 'listScope'
|
||||
));
|
||||
}
|
||||
|
||||
public function create(): View
|
||||
@@ -169,6 +160,13 @@ class CatController extends Controller
|
||||
$validated['induk_jantan_id'] = $request->induk_jantan_id;
|
||||
$validated['induk_betina_id'] = $request->induk_betina_id;
|
||||
$validated['pic_id'] = $request->pic_id ?? auth()->id();
|
||||
$validated['cattery_status'] = $request->boolean('is_external_parent')
|
||||
? 'external_parent'
|
||||
: ($request->boolean('is_adopted') ? 'adopted' : 'active');
|
||||
$validated['adopted_at'] = $validated['cattery_status'] === 'adopted'
|
||||
? ($request->input('adopted_at') ?: now()->toDateString())
|
||||
: null;
|
||||
$validated['adoption_notes'] = $request->input('adoption_notes');
|
||||
|
||||
$cat = Cat::create($validated);
|
||||
|
||||
@@ -267,6 +265,13 @@ private function handleImageUpload($file): string
|
||||
* Kita paksa nilainya menjadi ['NON-PED'] agar data lama di DB terhapus/terganti.
|
||||
*/
|
||||
$validated['registry'] = $request->input('registry', ['NON-PED']);
|
||||
$validated['cattery_status'] = $request->boolean('is_external_parent')
|
||||
? 'external_parent'
|
||||
: ($request->boolean('is_adopted') ? 'adopted' : 'active');
|
||||
$validated['adopted_at'] = $validated['cattery_status'] === 'adopted'
|
||||
? ($request->input('adopted_at') ?: ($cat->adopted_at?->format('Y-m-d') ?? now()->toDateString()))
|
||||
: null;
|
||||
$validated['adoption_notes'] = $request->input('adoption_notes');
|
||||
|
||||
// 5. Update Data Utama
|
||||
// Logika berat_badan sudah otomatis dihandle oleh Model (static::saving/updated)
|
||||
@@ -449,7 +454,9 @@ private function validateCat(Request $request, $id = null)
|
||||
'kode_ems' => 'nullable|string|max:50',
|
||||
|
||||
// Status & Lokasi
|
||||
'status' => 'nullable|string|max:50',
|
||||
'status' => 'nullable|string|max:50',
|
||||
'adopted_at' => 'nullable|date',
|
||||
'adoption_notes'=> 'nullable|string|max:1000',
|
||||
'lokasi_kandang'=> 'nullable|string|max:255',
|
||||
'pic_id' => 'nullable|exists:users,id',
|
||||
|
||||
|
||||
@@ -86,6 +86,29 @@ class CatRegistrationController extends Controller
|
||||
return back()->with('success', 'Dokumen berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
|
||||
public function showDocument(Cat $cat, CatRegistration $registration, CatRegistrationDocument $document)
|
||||
{
|
||||
Gate::authorize('check-access', ['cats', 'read']);
|
||||
abort_unless($registration->cat_id === $cat->id && $document->cat_registration_id === $registration->id, 404);
|
||||
abort_unless(Storage::disk('public')->exists($document->file_path), 404);
|
||||
|
||||
return response()->file(Storage::disk('public')->path($document->file_path), [
|
||||
'Content-Disposition' => 'inline; filename="' . basename($document->file_path) . '"',
|
||||
]);
|
||||
}
|
||||
|
||||
public function downloadDocument(Cat $cat, CatRegistration $registration, CatRegistrationDocument $document)
|
||||
{
|
||||
Gate::authorize('check-access', ['cats', 'read']);
|
||||
abort_unless($registration->cat_id === $cat->id && $document->cat_registration_id === $registration->id, 404);
|
||||
abort_unless(Storage::disk('public')->exists($document->file_path), 404);
|
||||
|
||||
$extension = pathinfo($document->file_path, PATHINFO_EXTENSION);
|
||||
$filename = str($document->label ?: 'pedigree')->slug('_') . ($extension ? '.' . $extension : '');
|
||||
return Storage::disk('public')->download($document->file_path, $filename);
|
||||
}
|
||||
|
||||
public function destroyDocument(Cat $cat, CatRegistration $registration, CatRegistrationDocument $document)
|
||||
{
|
||||
Gate::authorize('check-access', ['cats', 'update']);
|
||||
|
||||
@@ -20,14 +20,14 @@ class DashboardController extends Controller
|
||||
$selectedStatus = $request->get('status');
|
||||
|
||||
$stats = [
|
||||
'total_cats' => Cat::count(),
|
||||
'total_cats' => Cat::activeInCattery()->count(),
|
||||
'total_kittens' => Kitten::count(),
|
||||
'sick_cats' => Cat::where('treatment_status', 1)->count(),
|
||||
'total_mating' => Matting::where('status', 'proses')->count(),
|
||||
'sick_cats' => Cat::activeInCattery()->where('treatment_status', 1)->count(),
|
||||
'total_mating' => Matting::whereIn('status', ['proses', 'hamil'])->count(),
|
||||
];
|
||||
|
||||
$upcomingBirths = Matting::with(['dam', 'sire'])
|
||||
->where('status', 'proses')
|
||||
->whereIn('status', ['proses', 'hamil'])
|
||||
->whereNotNull('tgl_kawin_awal')
|
||||
->get()
|
||||
->map(function ($mating) use ($now) {
|
||||
@@ -40,19 +40,19 @@ class DashboardController extends Controller
|
||||
|
||||
$overdueAlerts = [
|
||||
'vaccine' => [
|
||||
'count' => Cat::whereNotNull('jadwal_vaksin')->where('jadwal_vaksin', '<', $now)->count(),
|
||||
'count' => Cat::activeInCattery()->whereNotNull('jadwal_vaksin')->where('jadwal_vaksin', '<', $now)->count(),
|
||||
'url' => route('cats.index', ['filter_overdue' => 'vaccine']),
|
||||
],
|
||||
'flea' => [
|
||||
'count' => Cat::whereNotNull('jadwal_obat_kutu')->where('jadwal_obat_kutu', '<', $now)->count(),
|
||||
'count' => Cat::activeInCattery()->whereNotNull('jadwal_obat_kutu')->where('jadwal_obat_kutu', '<', $now)->count(),
|
||||
'url' => route('cats.index', ['filter_overdue' => 'flea']),
|
||||
],
|
||||
'deworming' => [
|
||||
'count' => Cat::whereNotNull('jadwal_obat_cacing')->where('jadwal_obat_cacing', '<', $now)->count(),
|
||||
'count' => Cat::activeInCattery()->whereNotNull('jadwal_obat_cacing')->where('jadwal_obat_cacing', '<', $now)->count(),
|
||||
'url' => route('cats.index', ['filter_overdue' => 'deworming']),
|
||||
],
|
||||
'grooming' => [
|
||||
'count' => Cat::whereNotNull('jadwal_grooming')->where('jadwal_grooming', '<', $now)->count(),
|
||||
'count' => Cat::activeInCattery()->whereNotNull('jadwal_grooming')->where('jadwal_grooming', '<', $now)->count(),
|
||||
'url' => route('cats.index', ['filter_overdue' => 'grooming']),
|
||||
],
|
||||
];
|
||||
@@ -72,6 +72,7 @@ class DashboardController extends Controller
|
||||
'weight_histories.berat',
|
||||
'weight_histories.tanggal_timbang'
|
||||
)
|
||||
->where(function ($q) { $q->whereNull('cats.cattery_status')->orWhere('cats.cattery_status', 'active'); })
|
||||
->whereIn('weight_histories.id', function ($query) use ($selectedMonth, $selectedYear) {
|
||||
$query->select(DB::raw('MAX(id)'))
|
||||
->from('weight_histories')
|
||||
@@ -148,6 +149,7 @@ class DashboardController extends Controller
|
||||
'weight_histories.tanggal_timbang'
|
||||
)
|
||||
->whereNull('cats.deleted_at')
|
||||
->where(function ($q) { $q->whereNull('cats.cattery_status')->orWhere('cats.cattery_status', 'active'); })
|
||||
->whereDate('weight_histories.tanggal_timbang', '>=', $trendStart->toDateString())
|
||||
->orderBy('weight_histories.tanggal_timbang')
|
||||
->orderBy('cats.nama_kucing')
|
||||
@@ -303,6 +305,16 @@ class DashboardController extends Controller
|
||||
->sortByDesc('date')
|
||||
->values();
|
||||
|
||||
// Daftar kenaikan/penurunan berat berdasarkan kategori pada periode yang dipilih.
|
||||
$weightMovements = collect(['Kitten', 'Junior', 'Dewasa'])->mapWithKeys(function ($category) use ($weightLatestTable) {
|
||||
$rows = $weightLatestTable->where('category', $category)->whereNotNull('change');
|
||||
return [$category => [
|
||||
'gainers' => $rows->where('change', '>', 0)->sortByDesc('change')->take(5)->values(),
|
||||
'losers' => $rows->where('change', '<', 0)->sortBy('change')->take(5)->values(),
|
||||
]];
|
||||
});
|
||||
$weightPeriodLabel = $trendStart->translatedFormat('M Y') . ' – ' . $now->translatedFormat('M Y');
|
||||
|
||||
// Inventory
|
||||
$allExpiringItems = collect();
|
||||
$lowStock = collect();
|
||||
@@ -392,6 +404,8 @@ class DashboardController extends Controller
|
||||
'weightTableCategory',
|
||||
'weightTrendCategory',
|
||||
'weightTrendMonths',
|
||||
'weightMovements',
|
||||
'weightPeriodLabel',
|
||||
'lowStock',
|
||||
'totalLowStock',
|
||||
'expiringItems',
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Setting;
|
||||
use App\Models\ActivityLog;
|
||||
use App\Models\Role;
|
||||
use App\Helpers\WhatsappHelper;
|
||||
use App\Traits\LogsActivity;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
@@ -24,7 +26,10 @@ class SettingController extends Controller
|
||||
'app_slogan',
|
||||
'app_version', // Tambahan baru
|
||||
'app_address',
|
||||
'wa_number'
|
||||
'wa_number',
|
||||
'notif_hpl_role_id',
|
||||
'notif_inventory_role_id',
|
||||
'notif_weight_role_id'
|
||||
];
|
||||
|
||||
public function index()
|
||||
@@ -46,7 +51,8 @@ class SettingController extends Controller
|
||||
->take(5)
|
||||
->get();
|
||||
|
||||
return view('pages.admin.settings', compact('settings', 'waStatus', 'emailStatus', 'logs'));
|
||||
$roles = Role::orderBy('name')->get(['id','name']);
|
||||
return view('pages.admin.settings', compact('settings', 'waStatus', 'emailStatus', 'logs', 'roles'));
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
@@ -76,7 +82,21 @@ class SettingController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
$this->logAction('UPDATED_SETTINGS', null, "Memperbarui identitas sistem ke versi " . $request->app_version);
|
||||
foreach (['notif_hpl_wa','notif_inventory_expiry_wa','notif_weight_stale_wa','notif_wa_status'] as $notificationKey) {
|
||||
Setting::updateOrCreate(
|
||||
['key' => $notificationKey],
|
||||
['value' => $request->boolean($notificationKey) ? 'active' : 'inactive', 'group' => 'notification']
|
||||
);
|
||||
}
|
||||
|
||||
foreach (['notif_hpl_role_id','notif_inventory_role_id','notif_weight_role_id'] as $roleKey) {
|
||||
if ($request->filled($roleKey)) {
|
||||
$request->validate([$roleKey => 'exists:roles,id']);
|
||||
Setting::updateOrCreate(['key' => $roleKey], ['value' => $request->input($roleKey), 'group' => 'notification']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->logAction('UPDATED_SETTINGS', null, "Memperbarui identitas dan notifikasi sistem ke versi " . $request->app_version);
|
||||
|
||||
return back()->with('success', 'Konfigurasi ' . $request->app_name . ' berhasil diperbarui!');
|
||||
}
|
||||
@@ -104,21 +124,12 @@ class SettingController extends Controller
|
||||
|
||||
private function checkWhatsAppService()
|
||||
{
|
||||
// Gunakan cache atau timeout pendek agar page load tidak berat
|
||||
try {
|
||||
$response = Http::timeout(3)->withHeaders([
|
||||
'Authorization' => config('services.fonnte.token') ?? env('FONNTE_TOKEN'),
|
||||
])->post('https://api.fonnte.com/device');
|
||||
|
||||
$data = $response->json();
|
||||
return [
|
||||
'active' => ($data['status'] ?? false) == true,
|
||||
'quota' => $data['quota'] ?? 0,
|
||||
'message' => ($data['status'] ?? false) ? 'API Terhubung' : ($data['reason'] ?? 'Perangkat tidak aktif')
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
return ['active' => false, 'quota' => 0, 'message' => 'Layanan WA Offline'];
|
||||
}
|
||||
$provider = strtoupper((string) config('services.whatsapp.provider', 'fonnte'));
|
||||
return [
|
||||
'active' => WhatsappHelper::configured(),
|
||||
'quota' => null,
|
||||
'message' => WhatsappHelper::configured() ? "{$provider} dikonfigurasi" : "{$provider} belum dikonfigurasi",
|
||||
];
|
||||
}
|
||||
|
||||
private function checkEmailService()
|
||||
|
||||
@@ -149,6 +149,44 @@ class UserController extends Controller
|
||||
return redirect()->route('admin.users.index')->with('success', "User {$userName} telah dihapus.");
|
||||
}
|
||||
|
||||
public function toggleStatus(User $user): RedirectResponse
|
||||
{
|
||||
Gate::authorize('check-access', ['users', 'update']);
|
||||
|
||||
if ($user->id === auth()->id() && $user->is_active) {
|
||||
return back()->with('error', 'Akun yang sedang digunakan tidak dapat dinonaktifkan.');
|
||||
}
|
||||
|
||||
$newStatus = !$user->is_active;
|
||||
$user->forceFill([
|
||||
'is_active' => $newStatus,
|
||||
'deactivated_at' => $newStatus ? null : now(),
|
||||
])->save();
|
||||
|
||||
$this->logAction(
|
||||
$newStatus ? 'USER_ACTIVATED' : 'USER_DEACTIVATED',
|
||||
$user,
|
||||
($newStatus ? 'Mengaktifkan' : 'Menonaktifkan') . " akun user: {$user->name}",
|
||||
'User'
|
||||
);
|
||||
|
||||
return back()->with('success', "Status akun {$user->name} berhasil diperbarui.");
|
||||
}
|
||||
|
||||
public function changePassword(Request $request, User $user): RedirectResponse
|
||||
{
|
||||
Gate::authorize('check-access', ['users', 'update']);
|
||||
|
||||
$validated = $request->validate([
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
]);
|
||||
|
||||
$user->forceFill(['password' => Hash::make($validated['password'])])->save();
|
||||
$this->logAction('USER_PASSWORD_CHANGED', $user, "Mengganti kata sandi user: {$user->name}", 'User');
|
||||
|
||||
return back()->with('success', "Kata sandi {$user->name} berhasil diganti.");
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* AUDIT TRAIL / LOGS SECTION */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
@@ -17,7 +17,7 @@ class AuthenticateApiToken
|
||||
}
|
||||
|
||||
$token = ApiToken::with('user')->where('token_hash', hash('sha256', $plain))->first();
|
||||
if (!$token || !$token->user || ($token->expires_at && $token->expires_at->isPast())) {
|
||||
if (!$token || !$token->user || $token->user->is_active === false || ($token->expires_at && $token->expires_at->isPast())) {
|
||||
return response()->json(['message' => 'Token akses tidak valid atau sudah kedaluwarsa.'], 401);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class EnsureUserIsActive
|
||||
{
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$user = $request->user();
|
||||
if ($user && $user->is_active === false) {
|
||||
Auth::logout();
|
||||
$request->session()->invalidate();
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect()->route('login')->with('status', 'Akun Anda sedang dinonaktifkan. Hubungi administrator.');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,8 @@ class Cat extends Model
|
||||
'jadwal_vaksin', 'jadwal_obat_cacing', 'jadwal_obat_kutu',
|
||||
'jadwal_grooming', 'induk_jantan_id', 'induk_betina_id',
|
||||
'lokasi_kandang', 'pic_id', 'berat_badan',
|
||||
'pedigree','sertifikat_ped_file', 'microchip', 'status', 'kode_ems','treatment_status'
|
||||
'pedigree','sertifikat_ped_file', 'microchip', 'status', 'kode_ems','treatment_status',
|
||||
'cattery_status','adopted_at','adoption_notes'
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -69,6 +70,7 @@ class Cat extends Model
|
||||
'registry' => 'array', // Otomatis mengurus JSON di DB
|
||||
'berat_badan' => 'decimal:2',
|
||||
'berat_terakhir' => 'decimal:2',
|
||||
'adopted_at' => 'date',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -241,4 +243,30 @@ public function scopeHealthy($query)
|
||||
{
|
||||
return $query->where('treatment_status', 2);
|
||||
}
|
||||
|
||||
public function scopeActiveInCattery($query)
|
||||
{
|
||||
return $query->where(function ($q) {
|
||||
$q->whereNull('cattery_status')->orWhere('cattery_status', 'active');
|
||||
});
|
||||
}
|
||||
|
||||
public function scopeAdopted($query)
|
||||
{
|
||||
return $query->where('cattery_status', 'adopted');
|
||||
}
|
||||
|
||||
public function scopeExternalParents($query)
|
||||
{
|
||||
return $query->where('cattery_status', 'external_parent');
|
||||
}
|
||||
|
||||
public function getCatteryStatusLabelAttribute(): string
|
||||
{
|
||||
return match ($this->cattery_status ?: 'active') {
|
||||
'adopted' => 'Teradopsi',
|
||||
'external_parent' => 'Induk eksternal',
|
||||
default => 'Aktif di cattery',
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,8 @@ class Matting extends Model
|
||||
'tgl_lahir_sire' => 'date',
|
||||
'tgl_lahir_dam' => 'date',
|
||||
'jumlah_anak_hidup' => 'integer',
|
||||
'pregnancy_confirmed_at' => 'date',
|
||||
'actual_birth_date' => 'date',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -92,7 +94,7 @@ class Matting extends Model
|
||||
{
|
||||
return Attribute::make(
|
||||
get: function () {
|
||||
if (!$this->edd || $this->status !== 'proses') return null;
|
||||
if (!$this->edd || !in_array($this->status, ['proses', 'hamil'], true)) return null;
|
||||
|
||||
$days = (int) now()->startOfDay()->diffInDays($this->edd->startOfDay(), false);
|
||||
|
||||
@@ -112,7 +114,8 @@ class Matting extends Model
|
||||
get: function () {
|
||||
$status = strtolower($this->status);
|
||||
return match($status) {
|
||||
'proses' => '<span class="px-3 py-1 bg-blue-50 text-blue-600 rounded-full text-[10px] font-black uppercase border border-blue-100">Dipantau</span>',
|
||||
'proses' => '<span class="px-3 py-1 bg-blue-50 text-blue-600 rounded-full text-[10px] font-black uppercase border border-blue-100">Menunggu konfirmasi</span>',
|
||||
'hamil' => '<span class="px-3 py-1 bg-amber-50 text-amber-700 rounded-full text-[10px] font-black uppercase border border-amber-100">Hamil / menunggu lahir</span>',
|
||||
'berhasil' => '<span class="px-3 py-1 bg-emerald-50 text-emerald-600 rounded-full text-[10px] font-black uppercase border border-emerald-100">Lahir</span>',
|
||||
'gagal' => '<span class="px-3 py-1 bg-rose-50 text-rose-600 rounded-full text-[10px] font-black uppercase border border-rose-100">Gagal</span>',
|
||||
default => '<span class="px-3 py-1 bg-slate-50 text-slate-600 rounded-full text-[10px] font-black uppercase">'.$status.'</span>',
|
||||
@@ -121,6 +124,21 @@ class Matting extends Model
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function scopeOpenBreeding($query)
|
||||
{
|
||||
return $query->whereIn('status', ['proses', 'hamil']);
|
||||
}
|
||||
|
||||
public function getFlowStepAttribute(): int
|
||||
{
|
||||
return match ($this->status) {
|
||||
'hamil' => 2,
|
||||
'berhasil', 'gagal' => 3,
|
||||
default => 1,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* PIC (Point of Contact)
|
||||
*/
|
||||
|
||||
@@ -30,6 +30,8 @@ class User extends Authenticatable
|
||||
'role', // Kode existing Anda
|
||||
'role_id', // Tambahan: ID untuk relasi tabel Role
|
||||
'phone',
|
||||
'is_active',
|
||||
'deactivated_at',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -52,6 +54,8 @@ class User extends Authenticatable
|
||||
return [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
'is_active' => 'boolean',
|
||||
'deactivated_at' => 'datetime',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
use App\Http\Middleware\AdminMiddleware;
|
||||
use App\Http\Middleware\AuthenticateApiToken;
|
||||
use App\Http\Middleware\EnsureUserIsActive;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
@@ -19,6 +20,7 @@ return Application::configure(basePath: dirname(__DIR__))
|
||||
$middleware->alias([
|
||||
'admin' => AdminMiddleware::class,
|
||||
'mobile.token' => AuthenticateApiToken::class,
|
||||
'active.user' => EnsureUserIsActive::class,
|
||||
]);
|
||||
|
||||
// 2. Mengarahkan Tamu ke halaman login
|
||||
|
||||
@@ -28,6 +28,15 @@ return [
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
|
||||
'whatsapp' => [
|
||||
'provider' => env('WHATSAPP_PROVIDER', 'fonnte'),
|
||||
'fonnte_token' => env('FONNTE_TOKEN'),
|
||||
'waha_url' => env('WAHA_URL'),
|
||||
'waha_session' => env('WAHA_SESSION', 'default'),
|
||||
'waha_api_key' => env('WAHA_API_KEY'),
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'notifications' => [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('cats', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('cats', 'cattery_status')) {
|
||||
$table->string('cattery_status', 30)->default('active')->after('status')->index();
|
||||
}
|
||||
if (!Schema::hasColumn('cats', 'adopted_at')) {
|
||||
$table->date('adopted_at')->nullable()->after('cattery_status');
|
||||
}
|
||||
if (!Schema::hasColumn('cats', 'adoption_notes')) {
|
||||
$table->text('adoption_notes')->nullable()->after('adopted_at');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('users', 'is_active')) {
|
||||
$table->boolean('is_active')->default(true)->after('phone')->index();
|
||||
}
|
||||
if (!Schema::hasColumn('users', 'deactivated_at')) {
|
||||
$table->timestamp('deactivated_at')->nullable()->after('is_active');
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('mattings', function (Blueprint $table) {
|
||||
if (!Schema::hasColumn('mattings', 'pregnancy_confirmed_at')) {
|
||||
$table->date('pregnancy_confirmed_at')->nullable()->after('status');
|
||||
}
|
||||
if (!Schema::hasColumn('mattings', 'actual_birth_date')) {
|
||||
$table->date('actual_birth_date')->nullable()->after('pregnancy_confirmed_at');
|
||||
}
|
||||
if (!Schema::hasColumn('mattings', 'breeding_notes')) {
|
||||
$table->text('breeding_notes')->nullable()->after('actual_birth_date');
|
||||
}
|
||||
});
|
||||
|
||||
if (!Schema::hasTable('notification_dispatches')) {
|
||||
Schema::create('notification_dispatches', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('notification_key', 190)->unique();
|
||||
$table->string('type', 40)->index();
|
||||
$table->foreignId('user_id')->nullable()->constrained('users')->nullOnDelete();
|
||||
$table->string('channel', 20)->default('whatsapp');
|
||||
$table->timestamp('sent_at')->nullable();
|
||||
$table->text('message')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
if (Schema::hasTable('settings')) {
|
||||
$adminRoleId = Schema::hasTable('roles')
|
||||
? DB::table('roles')->where('slug', 'admin')->value('id')
|
||||
: null;
|
||||
|
||||
$defaults = [
|
||||
['key' => 'notif_wa_status', 'value' => 'active', 'group' => 'notification'],
|
||||
['key' => 'notif_hpl_wa', 'value' => 'active', 'group' => 'notification'],
|
||||
['key' => 'notif_inventory_expiry_wa', 'value' => 'active', 'group' => 'notification'],
|
||||
['key' => 'notif_weight_stale_wa', 'value' => 'active', 'group' => 'notification'],
|
||||
['key' => 'notif_hpl_role_id', 'value' => $adminRoleId, 'group' => 'notification'],
|
||||
['key' => 'notif_inventory_role_id', 'value' => $adminRoleId, 'group' => 'notification'],
|
||||
['key' => 'notif_weight_role_id', 'value' => $adminRoleId, 'group' => 'notification'],
|
||||
];
|
||||
|
||||
foreach ($defaults as $item) {
|
||||
DB::table('settings')->updateOrInsert(
|
||||
['key' => $item['key']],
|
||||
[
|
||||
'value' => $item['value'],
|
||||
'group' => $item['group'],
|
||||
'updated_at' => now(),
|
||||
'created_at' => now(),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('notification_dispatches');
|
||||
|
||||
Schema::table('mattings', function (Blueprint $table) {
|
||||
foreach (['pregnancy_confirmed_at', 'actual_birth_date', 'breeding_notes'] as $column) {
|
||||
if (Schema::hasColumn('mattings', $column)) {
|
||||
$table->dropColumn($column);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('users', function (Blueprint $table) {
|
||||
foreach (['is_active', 'deactivated_at'] as $column) {
|
||||
if (Schema::hasColumn('users', $column)) {
|
||||
$table->dropColumn($column);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Schema::table('cats', function (Blueprint $table) {
|
||||
foreach (['cattery_status', 'adopted_at', 'adoption_notes'] as $column) {
|
||||
if (Schema::hasColumn('cats', $column)) {
|
||||
$table->dropColumn($column);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
@@ -0,0 +1,8 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Kucing">
|
||||
<rect width="128" height="128" rx="28" fill="#f1f5f9"/>
|
||||
<path d="M35 48 25 27l25 12a47 47 0 0 1 28 0l25-12-10 21c7 8 11 18 11 29 0 23-18 36-40 36S24 100 24 77c0-11 4-21 11-29Z" fill="#cbd5e1"/>
|
||||
<path d="M42 74c4-4 9-4 13 0M73 74c4-4 9-4 13 0" fill="none" stroke="#475569" stroke-width="5" stroke-linecap="round"/>
|
||||
<path d="M59 84c3 3 7 3 10 0" fill="none" stroke="#475569" stroke-width="4" stroke-linecap="round"/>
|
||||
<path d="m60 78 4 3 4-3" fill="#64748b"/>
|
||||
<path d="M42 86 19 82M43 92 21 96M86 86l23-4M85 92l22 4" stroke="#94a3b8" stroke-width="3" stroke-linecap="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 686 B |
@@ -0,0 +1,142 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
// Kompatibilitas SweetAlert tanpa CDN eksternal.
|
||||
window.Swal = window.Swal || {
|
||||
fire: function (options) {
|
||||
options = options || {};
|
||||
if (typeof options === 'string') options = { title: options };
|
||||
var title = options.title || '';
|
||||
var rawText = options.text || options.html || '';
|
||||
var text = String(rawText).replace(/<[^>]*>/g, ' ').replace(/\s+/g, ' ').trim();
|
||||
var message = [title, text].filter(Boolean).join('\n\n');
|
||||
|
||||
if (options.showCancelButton) {
|
||||
var ok = window.confirm(message || 'Lanjutkan?');
|
||||
return Promise.resolve({ isConfirmed: ok, isDismissed: !ok });
|
||||
}
|
||||
|
||||
if (message) window.alert(message);
|
||||
return Promise.resolve({ isConfirmed: true });
|
||||
}
|
||||
};
|
||||
|
||||
// Renderer line chart ringan sebagai pengganti Chart.js CDN untuk chart legacy ILYCats.
|
||||
if (!window.Chart) {
|
||||
window.Chart = function SimpleChart(target, config) {
|
||||
this.canvas = target && target.canvas ? target.canvas : target;
|
||||
this.config = config || {};
|
||||
var self = this;
|
||||
this._resize = function () { self.draw(); };
|
||||
window.addEventListener('resize', this._resize);
|
||||
this.draw();
|
||||
};
|
||||
|
||||
window.Chart.prototype.destroy = function () {
|
||||
window.removeEventListener('resize', this._resize);
|
||||
};
|
||||
|
||||
window.Chart.prototype.draw = function () {
|
||||
var canvas = this.canvas;
|
||||
var config = this.config || {};
|
||||
if (!canvas || !canvas.getContext || config.type !== 'line') return;
|
||||
|
||||
var labels = (config.data && config.data.labels) || [];
|
||||
var datasets = (config.data && config.data.datasets) || [];
|
||||
if (!labels.length || !datasets.length) return;
|
||||
|
||||
var parent = canvas.parentElement;
|
||||
var width = Math.max(280, (parent && parent.clientWidth) || canvas.clientWidth || 600);
|
||||
var height = Math.max(220, (parent && parent.clientHeight) || canvas.clientHeight || 300);
|
||||
var dpr = window.devicePixelRatio || 1;
|
||||
canvas.width = width * dpr;
|
||||
canvas.height = height * dpr;
|
||||
canvas.style.width = width + 'px';
|
||||
canvas.style.height = height + 'px';
|
||||
|
||||
var ctx = canvas.getContext('2d');
|
||||
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
||||
ctx.clearRect(0, 0, width, height);
|
||||
|
||||
var pad = { left: 44, right: 18, top: 16, bottom: 36 };
|
||||
var chartW = width - pad.left - pad.right;
|
||||
var chartH = height - pad.top - pad.bottom;
|
||||
var allValues = [];
|
||||
datasets.forEach(function (ds) {
|
||||
(ds.data || []).forEach(function (v) {
|
||||
if (v !== null && v !== undefined && !isNaN(Number(v))) allValues.push(Number(v));
|
||||
});
|
||||
});
|
||||
if (!allValues.length) return;
|
||||
|
||||
var minY = Math.min.apply(Math, allValues);
|
||||
var maxY = Math.max.apply(Math, allValues);
|
||||
var beginAtZero = !!(config.options && config.options.scales && config.options.scales.y && config.options.scales.y.beginAtZero === true);
|
||||
if (beginAtZero) minY = 0;
|
||||
if (minY === maxY) { minY = Math.max(0, minY - 1); maxY += 1; }
|
||||
var margin = (maxY - minY) * 0.12;
|
||||
if (!beginAtZero) minY = Math.max(0, minY - margin);
|
||||
maxY += margin;
|
||||
|
||||
var xAt = function (i) {
|
||||
return pad.left + (labels.length <= 1 ? chartW / 2 : (i / (labels.length - 1)) * chartW);
|
||||
};
|
||||
var yAt = function (v) {
|
||||
return pad.top + chartH - ((Number(v) - minY) / (maxY - minY)) * chartH;
|
||||
};
|
||||
|
||||
ctx.font = '11px system-ui, -apple-system, Segoe UI, sans-serif';
|
||||
ctx.textBaseline = 'middle';
|
||||
for (var i = 0; i <= 4; i++) {
|
||||
var value = minY + (maxY - minY) * (i / 4);
|
||||
var y = yAt(value);
|
||||
ctx.strokeStyle = '#e2e8f0';
|
||||
ctx.lineWidth = 1;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(pad.left, y);
|
||||
ctx.lineTo(pad.left + chartW, y);
|
||||
ctx.stroke();
|
||||
ctx.fillStyle = '#94a3b8';
|
||||
ctx.textAlign = 'right';
|
||||
ctx.fillText(value.toFixed(value < 10 ? 1 : 0), pad.left - 7, y);
|
||||
}
|
||||
|
||||
var labelStep = Math.max(1, Math.ceil(labels.length / 6));
|
||||
labels.forEach(function (label, idx) {
|
||||
if (idx % labelStep !== 0 && idx !== labels.length - 1) return;
|
||||
ctx.fillStyle = '#94a3b8';
|
||||
ctx.textAlign = 'center';
|
||||
ctx.fillText(String(label), xAt(idx), height - 15);
|
||||
});
|
||||
|
||||
var palette = ['#2563eb', '#059669', '#db2777', '#d97706', '#7c3aed', '#0891b2'];
|
||||
datasets.forEach(function (ds, index) {
|
||||
var color = ds.borderColor || palette[index % palette.length];
|
||||
var values = ds.data || [];
|
||||
ctx.strokeStyle = color;
|
||||
ctx.lineWidth = Number(ds.borderWidth || 2.5);
|
||||
ctx.lineJoin = 'round';
|
||||
ctx.lineCap = 'round';
|
||||
ctx.beginPath();
|
||||
var started = false;
|
||||
values.forEach(function (v, idx) {
|
||||
if (v === null || v === undefined) { started = false; return; }
|
||||
var x = xAt(idx), y = yAt(v);
|
||||
if (!started) { ctx.moveTo(x, y); started = true; } else { ctx.lineTo(x, y); }
|
||||
});
|
||||
ctx.stroke();
|
||||
|
||||
values.forEach(function (v, idx) {
|
||||
if (v === null || v === undefined) return;
|
||||
ctx.fillStyle = ds.pointBackgroundColor || '#fff';
|
||||
ctx.strokeStyle = ds.pointBorderColor || color;
|
||||
ctx.lineWidth = Number(ds.pointBorderWidth || 2);
|
||||
ctx.beginPath();
|
||||
ctx.arc(xAt(idx), yAt(v), Number(ds.pointRadius || 3), 0, Math.PI * 2);
|
||||
ctx.fill();
|
||||
ctx.stroke();
|
||||
});
|
||||
});
|
||||
};
|
||||
}
|
||||
})();
|
||||
@@ -10,10 +10,9 @@
|
||||
@endphp
|
||||
<title>{{ $appName }}</title>
|
||||
<link rel="icon" href="{{ $favicon ? Storage::url($favicon) : asset('favicon.ico') }}">
|
||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||
<link href="https://fonts.bunny.net/css?family=inter:400,500,600,700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
||||
<link rel="stylesheet" href="{{ asset('vendor/fontawesome/css/all.min.css') }}">
|
||||
@vite(['resources/css/app.css','resources/js/app.js'])
|
||||
<script src="{{ asset('vendor/ilycats/compat.js') }}" defer></script>
|
||||
@stack('styles')
|
||||
<style>[x-cloak]{display:none!important}</style>
|
||||
</head>
|
||||
@@ -25,21 +24,22 @@
|
||||
<main class="flex-1 overflow-y-auto">
|
||||
<div class="mx-auto w-full max-w-[1500px] p-4 md:p-6 lg:p-8">
|
||||
@if($errors->any())
|
||||
<div class="mb-5 border border-rose-200 bg-rose-50 p-4 text-sm text-rose-700"><p class="font-semibold">Periksa kembali data yang diisi.</p><ul class="mt-1 list-disc pl-5">@foreach($errors->all() as $error)<li>{{ $error }}</li>@endforeach</ul></div>
|
||||
<div class="mb-5 rounded-xl border border-rose-200 bg-rose-50 p-4 text-sm text-rose-700"><p class="font-semibold">Periksa kembali data yang diisi.</p><ul class="mt-1 list-disc pl-5">@foreach($errors->all() as $error)<li>{{ $error }}</li>@endforeach</ul></div>
|
||||
@endif
|
||||
@if(session('success'))<div class="mb-5 border border-emerald-200 bg-emerald-50 p-4 text-sm text-emerald-700">{{ session('success') }}</div>@endif
|
||||
@if(session('error'))<div class="mb-5 border border-rose-200 bg-rose-50 p-4 text-sm text-rose-700">{{ session('error') }}</div>@endif
|
||||
@if(session('warning'))<div class="mb-5 border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700">{{ session('warning') }}</div>@endif
|
||||
@if(session('success'))<div class="mb-5 rounded-xl border border-emerald-200 bg-emerald-50 p-4 text-sm text-emerald-700">{{ session('success') }}</div>@endif
|
||||
@if(session('error'))<div class="mb-5 rounded-xl border border-rose-200 bg-rose-50 p-4 text-sm text-rose-700">{{ session('error') }}</div>@endif
|
||||
@if(session('warning'))<div class="mb-5 rounded-xl border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700">{{ session('warning') }}</div>@endif
|
||||
{{ $slot }}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
window.confirmDelete=function(target,itemName='data ini'){
|
||||
Swal.fire({title:'Hapus data?',text:`${itemName} akan dihapus.`,icon:'warning',showCancelButton:true,confirmButtonText:'Hapus',cancelButtonText:'Batal',confirmButtonColor:'#e11d48'}).then(r=>{if(r.isConfirmed){if(typeof target==='string')document.getElementById(target)?.submit();else target.closest('form')?.submit();}})
|
||||
}
|
||||
window.confirmDelete = function(target, itemName='data ini') {
|
||||
if (!window.confirm(`Hapus ${itemName}? Tindakan ini tidak dapat dibatalkan.`)) return;
|
||||
if (typeof target === 'string') document.getElementById(target)?.submit();
|
||||
else target.closest('form')?.submit();
|
||||
};
|
||||
</script>
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
@@ -5,10 +5,9 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<title>{{ $title ?? config('app.name', 'Laravel') }}</title>
|
||||
<link rel="preconnect" href="https://fonts.bunny.net">
|
||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600,900&display=swap" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="{{ asset('vendor/fontawesome/css/all.min.css') }}">
|
||||
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
||||
<script src="{{ asset('vendor/ilycats/compat.js') }}" defer></script>
|
||||
</head>
|
||||
<body class="font-sans text-gray-900 antialiased bg-white">
|
||||
{{--
|
||||
|
||||
@@ -119,7 +119,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
function confirmDeleteRole(id, name) {
|
||||
Swal.fire({
|
||||
|
||||
@@ -118,6 +118,30 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Notifikasi WhatsApp Operasional --}}
|
||||
<div class="rounded-[2rem] border border-slate-200 bg-white p-6 md:p-8">
|
||||
<div class="mb-6 flex items-start gap-4">
|
||||
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-emerald-50 text-emerald-600"><i class="fab fa-whatsapp text-xl"></i></div>
|
||||
<div><h3 class="font-bold text-slate-900">Notifikasi WhatsApp operasional</h3><p class="mt-1 text-sm text-slate-500">Pilih jenis pengingat dan role penerima. Pengiriman dilakukan oleh scheduler server.</p></div>
|
||||
</div>
|
||||
<label class="mb-5 flex items-center gap-3 rounded-xl border border-slate-200 bg-slate-50 p-4">
|
||||
<input type="checkbox" name="notif_wa_status" value="1" {{ ($settings['notif_wa_status'] ?? 'active')==='active' ? 'checked' : '' }} class="rounded border-slate-300 text-emerald-600">
|
||||
<span><span class="block text-sm font-bold text-slate-800">Aktifkan notifikasi WhatsApp</span><span class="text-xs text-slate-500">Master switch untuk semua pengingat di bawah.</span></span>
|
||||
</label>
|
||||
<div class="grid gap-4 lg:grid-cols-3">
|
||||
@foreach([
|
||||
['notif_hpl_wa','notif_hpl_role_id','HPL kucing','H-7 sampai tanggal HPL, dikirim setiap hari.'],
|
||||
['notif_inventory_expiry_wa','notif_inventory_role_id','Kedaluwarsa inventori','Obat, makanan, dan perlengkapan mulai H-14.'],
|
||||
['notif_weight_stale_wa','notif_weight_role_id','Berat belum diperbarui','Kucing aktif yang tidak ditimbang lebih dari 7 hari.'],
|
||||
] as [$switchKey,$roleKey,$title,$desc])
|
||||
<div class="rounded-2xl border border-slate-200 p-4">
|
||||
<label class="flex items-start gap-3"><input type="checkbox" name="{{ $switchKey }}" value="1" {{ ($settings[$switchKey] ?? 'active')==='active' ? 'checked' : '' }} class="mt-1 rounded border-slate-300 text-indigo-600"><span><span class="block text-sm font-bold text-slate-800">{{ $title }}</span><span class="mt-1 block text-xs leading-relaxed text-slate-500">{{ $desc }}</span></span></label>
|
||||
<div class="mt-4"><label class="field-label">Role penerima</label><select name="{{ $roleKey }}" class="field-input rounded-xl"><option value="">Admin (default)</option>@foreach($roles as $role)<option value="{{ $role->id }}" @selected((string)($settings[$roleKey] ?? '') === (string)$role->id)>{{ $role->name }}</option>@endforeach</select></div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Card 3: Status Layanan --}}
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
{{-- WA Status --}}
|
||||
@@ -129,7 +153,7 @@
|
||||
<div>
|
||||
<h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest">WhatsApp Gateway</h4>
|
||||
<p class="text-xs font-black {{ $waStatus['active'] ? 'text-emerald-700' : 'text-rose-700' }}">
|
||||
{{ $waStatus['active'] ? 'Terhubung (Kuota: '.$waStatus['quota'].')' : 'Terputus' }}
|
||||
{{ $waStatus['message'] ?? ($waStatus['active'] ? 'Terkonfigurasi' : 'Belum dikonfigurasi') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -227,11 +227,33 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Status keberadaan di cattery --}}
|
||||
<div class="rounded-[2rem] border border-slate-200 bg-white p-6 shadow-sm">
|
||||
<div class="mb-4">
|
||||
<h4 class="text-xs font-black uppercase tracking-widest text-slate-700">Status keberadaan</h4>
|
||||
<p class="mt-1 text-xs text-slate-500">Kucing teradopsi dan induk eksternal tetap tersimpan untuk riwayat/pedigree, tetapi tidak dihitung sebagai kucing aktif di cattery.</p>
|
||||
</div>
|
||||
<div class="grid gap-4 md:grid-cols-2">
|
||||
<label class="flex cursor-pointer items-start gap-3 rounded-2xl border border-emerald-100 bg-emerald-50/50 p-4">
|
||||
<input type="checkbox" id="is_adopted" name="is_adopted" value="1" {{ old('is_adopted') ? 'checked' : '' }} class="mt-1 rounded border-slate-300 text-emerald-600">
|
||||
<span><span class="block text-sm font-bold text-emerald-800">Kucing teradopsi</span><span class="mt-1 block text-xs text-emerald-700/80">Tandai bila kucing sudah keluar dari cattery karena adopsi.</span></span>
|
||||
</label>
|
||||
<label class="flex cursor-pointer items-start gap-3 rounded-2xl border border-amber-100 bg-amber-50/50 p-4">
|
||||
<input type="checkbox" id="is_external_parent" name="is_external_parent" value="1" {{ old('is_external_parent') ? 'checked' : '' }} class="mt-1 rounded border-slate-300 text-amber-600">
|
||||
<span><span class="block text-sm font-bold text-amber-800">Induk eksternal / tidak tinggal di cattery</span><span class="mt-1 block text-xs text-amber-700/80">Gunakan untuk sire/dam yang hanya dibutuhkan pada silsilah dan pembiakan.</span></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="mt-4 grid gap-4 md:grid-cols-2">
|
||||
<div><label class="text-[10px] font-bold uppercase text-slate-400">Tanggal adopsi</label><input type="date" name="adopted_at" value="{{ old('adopted_at') }}" class="mt-1 w-full rounded-xl border-slate-200 bg-slate-50 text-sm"></div>
|
||||
<div><label class="text-[10px] font-bold uppercase text-slate-400">Catatan adopsi / keberadaan</label><input type="text" name="adoption_notes" value="{{ old('adoption_notes') }}" class="mt-1 w-full rounded-xl border-slate-200 bg-slate-50 text-sm" placeholder="Opsional"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Action Button --}}
|
||||
<div class="pt-4">
|
||||
<button type="submit" class="w-full py-6 bg-indigo-600 text-white text-xs font-black rounded-[2.5rem] shadow-2xl shadow-indigo-100 hover:bg-indigo-700 hover:-translate-y-1 transition-all active:scale-[0.98] flex items-center justify-center gap-4 group">
|
||||
<i class="fas fa-save text-xl group-hover:rotate-12 transition-transform"></i>
|
||||
<span class="tracking-[0.2em] uppercase">Simpan Record Baru Ilycats</span>
|
||||
<span class="tracking-[0.2em] uppercase">Simpan Data Kucing Baru</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
@@ -265,6 +287,16 @@
|
||||
handleSearchableDatalist('sire_search', 'sire_list', 'induk_jantan_id');
|
||||
handleSearchableDatalist('dam_search', 'dam_list', 'induk_betina_id');
|
||||
|
||||
// Status teradopsi dan induk eksternal bersifat saling eksklusif.
|
||||
const adoptedCheckbox = document.getElementById('is_adopted');
|
||||
const externalParentCheckbox = document.getElementById('is_external_parent');
|
||||
adoptedCheckbox?.addEventListener('change', () => {
|
||||
if (adoptedCheckbox.checked && externalParentCheckbox) externalParentCheckbox.checked = false;
|
||||
});
|
||||
externalParentCheckbox?.addEventListener('change', () => {
|
||||
if (externalParentCheckbox.checked && adoptedCheckbox) adoptedCheckbox.checked = false;
|
||||
});
|
||||
|
||||
// Preview Foto
|
||||
function previewImage(event) {
|
||||
const reader = new FileReader();
|
||||
|
||||
@@ -231,6 +231,28 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Status keberadaan di cattery --}}
|
||||
<div class="rounded-[2rem] border border-slate-200 bg-white p-6 shadow-sm">
|
||||
<div class="mb-4">
|
||||
<h4 class="text-xs font-black uppercase tracking-widest text-slate-700">Status keberadaan</h4>
|
||||
<p class="mt-1 text-xs text-slate-500">Kucing teradopsi dan induk eksternal tetap tersimpan untuk riwayat/pedigree, tetapi tidak dihitung sebagai kucing aktif di cattery.</p>
|
||||
</div>
|
||||
<div class="grid gap-4 md:grid-cols-2">
|
||||
<label class="flex cursor-pointer items-start gap-3 rounded-2xl border border-emerald-100 bg-emerald-50/50 p-4">
|
||||
<input type="checkbox" id="is_adopted" name="is_adopted" value="1" {{ old('is_adopted', ($cat->cattery_status ?? 'active') === 'adopted') ? 'checked' : '' }} class="mt-1 rounded border-slate-300 text-emerald-600">
|
||||
<span><span class="block text-sm font-bold text-emerald-800">Kucing teradopsi</span><span class="mt-1 block text-xs text-emerald-700/80">Tandai bila kucing sudah keluar dari cattery karena adopsi.</span></span>
|
||||
</label>
|
||||
<label class="flex cursor-pointer items-start gap-3 rounded-2xl border border-amber-100 bg-amber-50/50 p-4">
|
||||
<input type="checkbox" id="is_external_parent" name="is_external_parent" value="1" {{ old('is_external_parent', ($cat->cattery_status ?? 'active') === 'external_parent') ? 'checked' : '' }} class="mt-1 rounded border-slate-300 text-amber-600">
|
||||
<span><span class="block text-sm font-bold text-amber-800">Induk eksternal / tidak tinggal di cattery</span><span class="mt-1 block text-xs text-amber-700/80">Gunakan untuk sire/dam yang hanya dibutuhkan pada silsilah dan pembiakan.</span></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="mt-4 grid gap-4 md:grid-cols-2">
|
||||
<div><label class="text-[10px] font-bold uppercase text-slate-400">Tanggal adopsi</label><input type="date" name="adopted_at" value="{{ old('adopted_at', $cat->adopted_at?->format('Y-m-d')) }}" class="mt-1 w-full rounded-xl border-slate-200 bg-slate-50 text-sm"></div>
|
||||
<div><label class="text-[10px] font-bold uppercase text-slate-400">Catatan adopsi / keberadaan</label><input type="text" name="adoption_notes" value="{{ old('adoption_notes', $cat->adoption_notes) }}" class="mt-1 w-full rounded-xl border-slate-200 bg-slate-50 text-sm" placeholder="Opsional"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{-- Action Button --}}
|
||||
<button type="submit" class="w-full py-6 bg-indigo-600 text-white text-xs font-black rounded-[2.5rem] shadow-2xl hover:bg-indigo-700 hover:shadow-indigo-200 transition-all active:scale-[0.98] flex items-center justify-center gap-4 group">
|
||||
<i class="fas fa-save text-lg group-hover:rotate-12 transition-transform"></i>
|
||||
@@ -263,6 +285,16 @@
|
||||
handleSearchableDatalist('sire_search', 'sire_list', 'induk_jantan_id');
|
||||
handleSearchableDatalist('dam_search', 'dam_list', 'induk_betina_id');
|
||||
|
||||
// Status teradopsi dan induk eksternal bersifat saling eksklusif.
|
||||
const adoptedCheckbox = document.getElementById('is_adopted');
|
||||
const externalParentCheckbox = document.getElementById('is_external_parent');
|
||||
adoptedCheckbox?.addEventListener('change', () => {
|
||||
if (adoptedCheckbox.checked && externalParentCheckbox) externalParentCheckbox.checked = false;
|
||||
});
|
||||
externalParentCheckbox?.addEventListener('change', () => {
|
||||
if (externalParentCheckbox.checked && adoptedCheckbox) adoptedCheckbox.checked = false;
|
||||
});
|
||||
|
||||
// Preview Foto saat dipilih
|
||||
function previewImage(event) {
|
||||
const reader = new FileReader();
|
||||
|
||||
@@ -3,44 +3,80 @@
|
||||
$currentSort=request('sort','created_at'); $currentDir=request('direction','desc'); $nextDir=$currentDir==='asc'?'desc':'asc';
|
||||
$sortIcon=function($field)use($currentSort,$currentDir){return $currentSort!==$field?'fa-sort text-slate-300':($currentDir==='asc'?'fa-sort-up text-indigo-600':'fa-sort-down text-indigo-600');};
|
||||
@endphp
|
||||
|
||||
<div class="mb-6 flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between">
|
||||
<div><h1 class="text-2xl font-bold text-slate-900">Data kucing</h1><p class="mt-1 text-sm text-slate-500">Profil, silsilah, pedigree, berat badan, dan jadwal perawatan.</p></div>
|
||||
<div class="flex flex-wrap gap-2">@can('check-access',['cats','update'])<a href="{{ route('cats.bulk-weight') }}" class="border border-slate-300 bg-white px-4 py-2.5 text-sm font-semibold text-slate-700 hover:bg-slate-50"><i class="fas fa-weight-scale mr-2"></i>Input berat massal</a>@endcan @can('check-access',['cats','create'])<a href="{{ route('cats.create') }}" class="bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700"><i class="fas fa-plus mr-2"></i>Tambah kucing</a>@endcan</div>
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-slate-900">Data kucing</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Kucing aktif, kucing teradopsi, induk eksternal, silsilah, pedigree, dan pemantauan kesehatan.</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
@can('check-access',['cats','update'])
|
||||
<a href="{{ route('cats.bulk-weight') }}" class="rounded-xl border border-slate-300 bg-white px-4 py-2.5 text-sm font-semibold text-slate-700 hover:bg-slate-50"><i class="fas fa-weight-scale mr-2"></i>Input berat massal</a>
|
||||
@endcan
|
||||
@can('check-access',['cats','create'])
|
||||
<a href="{{ route('cats.create') }}" class="rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700"><i class="fas fa-plus mr-2"></i>Tambah kucing / induk eksternal</a>
|
||||
@endcan
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-5 grid gap-3 sm:grid-cols-3">
|
||||
<div class="border border-slate-200 bg-white p-4"><p class="text-xs text-slate-500">Total kucing</p><p class="mt-1 text-2xl font-bold text-slate-900">{{ $totalCats }}</p></div>
|
||||
<div class="border border-slate-200 bg-white p-4"><p class="text-xs text-slate-500">Sehat</p><p class="mt-1 text-2xl font-bold text-emerald-700">{{ max(0,$totalCats-$sickCats) }}</p></div>
|
||||
<div class="border border-slate-200 bg-white p-4"><p class="text-xs text-slate-500">Dalam perawatan</p><p class="mt-1 text-2xl font-bold text-rose-600">{{ $sickCats }}</p></div>
|
||||
<div class="mb-5 grid gap-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<a href="{{ route('cats.index',['list_scope'=>'active']) }}" class="rounded-2xl border {{ $listScope==='active'?'border-indigo-300 bg-indigo-50/60':'border-slate-200 bg-white' }} p-4 hover:border-indigo-300">
|
||||
<p class="text-xs font-semibold text-slate-500">Kucing aktif di cattery</p><p class="mt-1 text-2xl font-bold text-slate-900">{{ $activeCats }}</p>
|
||||
</a>
|
||||
<a href="{{ route('cats.index',['list_scope'=>'adopted']) }}" class="rounded-2xl border {{ $listScope==='adopted'?'border-emerald-300 bg-emerald-50/60':'border-slate-200 bg-white' }} p-4 hover:border-emerald-300">
|
||||
<p class="text-xs font-semibold text-slate-500">Kucing teradopsi</p><p class="mt-1 text-2xl font-bold text-emerald-700">{{ $adoptedCats }}</p>
|
||||
</a>
|
||||
<a href="{{ route('cats.index',['list_scope'=>'external_parent']) }}" class="rounded-2xl border {{ $listScope==='external_parent'?'border-amber-300 bg-amber-50/60':'border-slate-200 bg-white' }} p-4 hover:border-amber-300">
|
||||
<p class="text-xs font-semibold text-slate-500">Induk eksternal</p><p class="mt-1 text-2xl font-bold text-amber-700">{{ $externalParentCats }}</p>
|
||||
</a>
|
||||
<a href="{{ route('cats.index',['list_scope'=>'active','filter_health'=>'treatment']) }}" class="rounded-2xl border border-slate-200 bg-white p-4 hover:border-rose-300">
|
||||
<p class="text-xs font-semibold text-slate-500">Dalam perawatan</p><p class="mt-1 text-2xl font-bold text-rose-600">{{ $sickCats }}</p>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<section class="border border-slate-200 bg-white">
|
||||
<div class="flex flex-col gap-3 border-b border-slate-200 p-4 lg:flex-row lg:items-center lg:justify-between">
|
||||
<form method="GET" action="{{ route('cats.index') }}" class="flex w-full max-w-lg gap-2">
|
||||
<input type="hidden" name="status" value="{{ request('status') }}"><input type="hidden" name="sort" value="{{ request('sort') }}"><input type="hidden" name="direction" value="{{ request('direction') }}">
|
||||
<div class="relative flex-1"><i class="fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-sm text-slate-400"></i><input name="search" value="{{ request('search') }}" placeholder="Cari nama, EMS, microchip, ras, kandang..." class="field-input pl-9"></div><button class="border border-slate-300 px-4 text-sm font-semibold text-slate-700 hover:bg-slate-50">Cari</button>
|
||||
<section class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
||||
<div class="flex flex-col gap-3 border-b border-slate-200 p-4 xl:flex-row xl:items-center xl:justify-between">
|
||||
<form method="GET" action="{{ route('cats.index') }}" class="flex w-full max-w-xl gap-2">
|
||||
<input type="hidden" name="list_scope" value="{{ $listScope }}">
|
||||
<input type="hidden" name="status" value="{{ request('status') }}">
|
||||
<input type="hidden" name="sort" value="{{ request('sort') }}">
|
||||
<input type="hidden" name="direction" value="{{ request('direction') }}">
|
||||
<div class="relative flex-1"><i class="fas fa-search absolute left-3 top-1/2 -translate-y-1/2 text-sm text-slate-400"></i><input name="search" value="{{ request('search') }}" placeholder="Cari nama, EMS, microchip, ras, kandang..." class="field-input rounded-xl pl-9"></div>
|
||||
<button class="rounded-xl border border-slate-300 px-4 text-sm font-semibold text-slate-700 hover:bg-slate-50">Cari</button>
|
||||
</form>
|
||||
<div class="flex flex-wrap gap-1 text-sm">@foreach([''=>'Semua','Dewasa'=>'Dewasa','Junior'=>'Junior','Kitten'=>'Kitten'] as $value=>$label)<a href="{{ route('cats.index',array_merge(request()->except('page','status'),$value?['status'=>$value]:[])) }}" class="px-3 py-2 {{ request('status','')===$value?'bg-slate-900 text-white':'text-slate-600 hover:bg-slate-100' }}">{{ $label }}</a>@endforeach</div>
|
||||
<div class="flex flex-wrap gap-1 text-sm">
|
||||
@foreach([''=>'Semua usia','Dewasa'=>'Dewasa','Junior'=>'Junior','Kitten'=>'Kitten'] as $value=>$label)
|
||||
<a href="{{ route('cats.index',array_merge(request()->except('page','status'),$value?['status'=>$value]:[])) }}" class="rounded-lg px-3 py-2 {{ request('status','')===$value?'bg-slate-900 text-white':'text-slate-600 hover:bg-slate-100' }}">{{ $label }}</a>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-slate-200 text-sm">
|
||||
<thead class="bg-slate-50 text-left text-xs font-semibold text-slate-500"><tr>
|
||||
<th class="px-4 py-3"><a class="flex items-center gap-2" href="{{ request()->fullUrlWithQuery(['sort'=>'nama_kucing','direction'=>$nextDir]) }}">Kucing <i class="fas {{ $sortIcon('nama_kucing') }}"></i></a></th>
|
||||
<th class="px-4 py-3">Identitas & pedigree</th><th class="px-4 py-3">Silsilah</th>
|
||||
<th class="px-4 py-3">Status cattery</th>
|
||||
<th class="px-4 py-3">Identitas & pedigree</th>
|
||||
<th class="px-4 py-3">Silsilah</th>
|
||||
<th class="px-4 py-3"><a class="flex items-center gap-2" href="{{ request()->fullUrlWithQuery(['sort'=>'berat_badan','direction'=>$nextDir]) }}">Berat <i class="fas {{ $sortIcon('berat_badan') }}"></i></a></th>
|
||||
<th class="px-4 py-3"><a class="flex items-center gap-2" href="{{ request()->fullUrlWithQuery(['sort'=>'lokasi_kandang','direction'=>$nextDir]) }}">Kandang <i class="fas {{ $sortIcon('lokasi_kandang') }}"></i></a></th>
|
||||
<th class="px-4 py-3 text-right">Aksi</th>
|
||||
</tr></thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
@forelse($cats as $cat)
|
||||
@php
|
||||
$statusStyle = match($cat->cattery_status ?: 'active') {
|
||||
'adopted' => 'bg-emerald-50 text-emerald-700 border-emerald-100',
|
||||
'external_parent' => 'bg-amber-50 text-amber-700 border-amber-100',
|
||||
default => 'bg-indigo-50 text-indigo-700 border-indigo-100',
|
||||
};
|
||||
@endphp
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><div class="flex min-w-52 items-center gap-3"><img src="{{ $cat->foto_url }}" alt="{{ $cat->nama_kucing }}" class="h-11 w-11 rounded-lg border border-slate-200 object-cover"><div><a href="{{ route('cats.show',$cat) }}" class="font-semibold text-slate-900 hover:text-indigo-600">{{ $cat->nama_kucing }}</a><p class="mt-0.5 text-xs text-slate-500">{{ $cat->jenis_kelamin }} · {{ $cat->ras }}</p></div></div></td>
|
||||
<td class="px-4 py-3"><div class="space-y-1"><p class="text-xs text-slate-600"><span class="text-slate-400">EMS:</span> {{ $cat->kode_ems ?: '-' }}</p><p class="text-xs text-slate-600"><span class="text-slate-400">Microchip:</span> {{ $cat->microchip ?: '-' }}</p><div class="flex flex-wrap gap-1">@forelse($cat->registrations as $reg)<span class="border border-slate-200 bg-slate-50 px-1.5 py-0.5 text-[11px] font-semibold text-slate-600">{{ $reg->association->code }}{{ $reg->is_primary?' · utama':'' }}</span>@empty<span class="text-xs text-slate-400">Belum ada registrasi</span>@endforelse</div></div></td>
|
||||
<td class="px-4 py-3"><p class="text-xs text-slate-600">{{ $cat->age }}</p><p class="mt-1 text-xs text-slate-500">Jantan: {{ $cat->sire->nama_kucing ?? '-' }}</p><p class="text-xs text-slate-500">Betina: {{ $cat->dam->nama_kucing ?? '-' }}</p></td>
|
||||
<td class="px-4 py-3"><p class="font-semibold text-slate-800">{{ number_format((float)($cat->berat_badan ?? $cat->berat_terakhir ?? 0),2) }} kg</p><p class="text-xs {{ $cat->treatment_status==1?'text-rose-600':'text-emerald-600' }}">{{ $cat->treatment_status==1?'Dalam perawatan':'Sehat' }}</p></td>
|
||||
<td class="px-4 py-3"><p class="text-slate-700">{{ $cat->lokasi_kandang ?: '-' }}</p><p class="text-xs text-slate-500">{{ $cat->pic->name ?? '-' }}</p></td>
|
||||
<td class="px-4 py-3"><div class="flex justify-end gap-1"><a href="{{ route('cats.show',$cat) }}" class="p-2 text-slate-500 hover:bg-slate-100" title="Lihat"><i class="fas fa-eye"></i></a><a href="{{ route('cats.pedigree',$cat) }}" class="p-2 text-slate-500 hover:bg-slate-100" title="Pedigree"><i class="fas fa-file-lines"></i></a>@can('check-access',['cats','update'])<a href="{{ route('cats.edit',$cat) }}" class="p-2 text-slate-500 hover:bg-slate-100" title="Ubah"><i class="fas fa-pen"></i></a>@endcan @can('check-access',['cats','delete'])<form id="delete-cat-{{ $cat->id }}" method="POST" action="{{ route('cats.destroy',$cat) }}">@csrf @method('DELETE')<button type="button" onclick="confirmDelete('delete-cat-{{ $cat->id }}','{{ addslashes($cat->nama_kucing) }}')" class="p-2 text-rose-500 hover:bg-rose-50" title="Hapus"><i class="fas fa-trash"></i></button></form>@endcan</div></td>
|
||||
<td class="px-4 py-3"><div class="flex min-w-52 items-center gap-3"><img src="{{ $cat->foto_url }}" alt="{{ $cat->nama_kucing }}" class="h-11 w-11 rounded-xl border border-slate-200 object-cover"><div><a href="{{ route('cats.show',$cat) }}" class="font-semibold text-slate-900 hover:text-indigo-600">{{ $cat->nama_kucing }}</a><p class="mt-0.5 text-xs text-slate-500">{{ $cat->jenis_kelamin }} · {{ $cat->ras }}</p></div></div></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex rounded-full border px-2.5 py-1 text-xs font-semibold {{ $statusStyle }}">{{ $cat->cattery_status_label }}</span>@if($cat->adopted_at)<p class="mt-1 text-xs text-slate-400">Sejak {{ $cat->adopted_at->format('d-m-Y') }}</p>@endif</td>
|
||||
<td class="px-4 py-3"><div class="space-y-1"><p class="text-xs text-slate-600"><span class="text-slate-400">EMS:</span> {{ $cat->kode_ems ?: '-' }}</p><p class="text-xs text-slate-600"><span class="text-slate-400">Microchip:</span> {{ $cat->microchip ?: '-' }}</p><div class="flex flex-wrap gap-1">@forelse($cat->registrations as $reg)<span class="rounded border border-slate-200 bg-slate-50 px-1.5 py-0.5 text-[11px] font-semibold text-slate-600">{{ $reg->association->code }}{{ $reg->is_primary?' · utama':'' }}</span>@empty<span class="text-xs text-slate-400">Belum ada registrasi</span>@endforelse</div></div></td>
|
||||
<td class="px-4 py-3"><p class="text-xs text-slate-600">{{ $cat->age }}</p><p class="mt-1 text-xs text-slate-500">Sire: {{ $cat->sire->nama_kucing ?? '-' }}</p><p class="text-xs text-slate-500">Dam: {{ $cat->dam->nama_kucing ?? '-' }}</p></td>
|
||||
<td class="px-4 py-3"><p class="font-semibold text-slate-800">{{ number_format((float)($cat->berat_badan ?? $cat->berat_terakhir ?? 0),2) }} kg</p>@if(($cat->cattery_status ?: 'active')==='active')<p class="text-xs {{ $cat->treatment_status==1?'text-rose-600':'text-emerald-600' }}">{{ $cat->treatment_status==1?'Dalam perawatan':'Sehat' }}</p>@else<p class="text-xs text-slate-400">Tidak dihitung sebagai kucing aktif</p>@endif</td>
|
||||
<td class="px-4 py-3"><div class="flex justify-end gap-1"><a href="{{ route('cats.show',$cat) }}" class="rounded-lg p-2 text-slate-500 hover:bg-slate-100" title="Lihat"><i class="fas fa-eye"></i></a><a href="{{ route('cats.pedigree',$cat) }}" class="rounded-lg p-2 text-slate-500 hover:bg-slate-100" title="Pedigree"><i class="fas fa-file-lines"></i></a>@can('check-access',['cats','update'])<a href="{{ route('cats.edit',$cat) }}" class="rounded-lg p-2 text-slate-500 hover:bg-slate-100" title="Ubah"><i class="fas fa-pen"></i></a>@endcan @can('check-access',['cats','delete'])<form id="delete-cat-{{ $cat->id }}" method="POST" action="{{ route('cats.destroy',$cat) }}">@csrf @method('DELETE')<button type="button" onclick="confirmDelete('delete-cat-{{ $cat->id }}','{{ addslashes($cat->nama_kucing) }}')" class="rounded-lg p-2 text-rose-500 hover:bg-rose-50" title="Hapus"><i class="fas fa-trash"></i></button></form>@endcan</div></td>
|
||||
</tr>
|
||||
@empty<tr><td colspan="6" class="px-4 py-12 text-center text-sm text-slate-500">Data kucing tidak ditemukan.</td></tr>@endforelse
|
||||
</tbody>
|
||||
|
||||
@@ -1,51 +1,79 @@
|
||||
<x-app-layout>
|
||||
<div class="mb-6 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div><a href="{{ route('cats.show',$cat) }}" class="mb-2 inline-flex items-center gap-2 text-sm text-slate-500 hover:text-slate-800"><i class="fas fa-arrow-left"></i>Kembali ke profil</a><h1 class="text-2xl font-bold text-slate-900">Registrasi & pedigree</h1><p class="mt-1 text-sm text-slate-500">{{ $cat->nama_kucing }} dapat memiliki registrasi dan sertifikat dari lebih dari satu asosiasi.</p></div>
|
||||
<div>
|
||||
<a href="{{ route('cats.show',$cat) }}" class="mb-2 inline-flex items-center gap-2 text-sm text-slate-500 hover:text-slate-800"><i class="fas fa-arrow-left"></i>Kembali ke profil</a>
|
||||
<h1 class="text-2xl font-bold text-slate-900">Registrasi & pedigree</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">{{ $cat->nama_kucing }} dapat memiliki registrasi dan sertifikat dari beberapa asosiasi.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-6 xl:grid-cols-[1fr_360px]">
|
||||
<div class="space-y-4">
|
||||
@forelse($cat->registrations as $registration)
|
||||
<section class="border border-slate-200 bg-white">
|
||||
<section class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3 border-b border-slate-200 px-5 py-4">
|
||||
<div class="flex items-center gap-3"><div class="flex h-10 min-w-10 items-center justify-center bg-slate-100 px-2 text-sm font-bold text-slate-700">{{ $registration->association->code }}</div><div><h2 class="font-semibold text-slate-900">{{ $registration->association->name }}</h2><p class="text-xs text-slate-500">{{ $registration->is_primary ? 'Pedigree utama' : 'Registrasi tambahan' }}</p></div></div>
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="flex h-10 min-w-10 items-center justify-center rounded-xl bg-slate-100 px-2 text-sm font-bold text-slate-700">{{ $registration->association->code }}</div>
|
||||
<div><h2 class="font-semibold text-slate-900">{{ $registration->association->name }}</h2><p class="text-xs text-slate-500">{{ $registration->is_primary ? 'Pedigree utama' : 'Registrasi tambahan' }}</p></div>
|
||||
</div>
|
||||
@can('check-access',['cats','update'])
|
||||
<form action="{{ route('cats.registrations.destroy',[$cat,$registration]) }}" method="POST" onsubmit="return confirm('Hapus registrasi ini beserta dokumennya?')">@csrf @method('DELETE')<button class="text-sm font-medium text-rose-600 hover:text-rose-700">Hapus</button></form>
|
||||
@endcan
|
||||
</div>
|
||||
|
||||
<form action="{{ route('cats.registrations.update',[$cat,$registration]) }}" method="POST" class="grid gap-4 p-5 sm:grid-cols-2 lg:grid-cols-3">@csrf @method('PUT')
|
||||
<div><label class="field-label">Nomor registrasi</label><input name="registration_number" value="{{ $registration->registration_number }}" class="field-input"></div>
|
||||
<div><label class="field-label">Nomor pedigree</label><input name="pedigree_number" value="{{ $registration->pedigree_number }}" class="field-input"></div>
|
||||
<div><label class="field-label">Nomor sertifikat</label><input name="certificate_number" value="{{ $registration->certificate_number }}" class="field-input"></div>
|
||||
<div><label class="field-label">Tanggal terbit</label><input type="date" name="issue_date" value="{{ $registration->issue_date?->format('Y-m-d') }}" class="field-input"></div>
|
||||
<div><label class="field-label">Gelar / title</label><input name="title" value="{{ $registration->title }}" class="field-input" placeholder="Contoh: CH, GCH"></div>
|
||||
<div><label class="field-label">Status kepemilikan</label><select name="ownership_status" class="field-input"><option value="">-</option>@foreach(['milik_sendiri'=>'Milik sendiri','co_own'=>'Co-own','transfer'=>'Transfer','lainnya'=>'Lainnya'] as $v=>$l)<option value="{{ $v }}" @selected($registration->ownership_status===$v)>{{ $l }}</option>@endforeach</select></div>
|
||||
<div class="sm:col-span-2 lg:col-span-3"><label class="field-label">Catatan</label><textarea name="notes" rows="2" class="field-input">{{ $registration->notes }}</textarea></div>
|
||||
<div><label class="field-label">Nomor registrasi</label><input name="registration_number" value="{{ $registration->registration_number }}" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Nomor pedigree</label><input name="pedigree_number" value="{{ $registration->pedigree_number }}" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Nomor sertifikat</label><input name="certificate_number" value="{{ $registration->certificate_number }}" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Tanggal terbit</label><input type="date" name="issue_date" value="{{ $registration->issue_date?->format('Y-m-d') }}" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Gelar / title</label><input name="title" value="{{ $registration->title }}" class="field-input rounded-xl" placeholder="Contoh: CH, GCH"></div>
|
||||
<div><label class="field-label">Status kepemilikan</label><select name="ownership_status" class="field-input rounded-xl"><option value="">-</option>@foreach(['milik_sendiri'=>'Milik sendiri','co_own'=>'Co-own','transfer'=>'Transfer','lainnya'=>'Lainnya'] as $v=>$l)<option value="{{ $v }}" @selected($registration->ownership_status===$v)>{{ $l }}</option>@endforeach</select></div>
|
||||
<div class="sm:col-span-2 lg:col-span-3"><label class="field-label">Catatan</label><textarea name="notes" rows="2" class="field-input rounded-xl">{{ $registration->notes }}</textarea></div>
|
||||
<label class="flex items-center gap-2 text-sm text-slate-700"><input type="hidden" name="is_primary" value="0"><input type="checkbox" name="is_primary" value="1" @checked($registration->is_primary) class="rounded border-slate-300 text-indigo-600">Jadikan pedigree utama</label>
|
||||
<div class="sm:col-span-2 flex justify-end"><button class="border border-slate-300 bg-white px-4 py-2 text-sm font-semibold text-slate-700 hover:bg-slate-50">Simpan perubahan</button></div>
|
||||
@can('check-access',['cats','update'])<div class="sm:col-span-2 lg:col-span-3"><button class="rounded-xl bg-slate-800 px-4 py-2 text-sm font-semibold text-white hover:bg-slate-900">Simpan perubahan registrasi</button></div>@endcan
|
||||
</form>
|
||||
<div class="border-t border-slate-200 p-5">
|
||||
<div class="mb-3 flex items-center justify-between"><h3 class="text-sm font-semibold text-slate-800">Dokumen</h3><span class="text-xs text-slate-500">PDF/JPG/PNG, maks. 10 MB</span></div>
|
||||
<div class="mb-4 grid gap-2">@forelse($registration->documents as $document)<div class="flex items-center justify-between gap-3 border border-slate-200 p-3"><div class="min-w-0"><a href="{{ Storage::url($document->file_path) }}" target="_blank" class="truncate text-sm font-medium text-indigo-600 hover:underline">{{ $document->label }}</a><p class="text-xs text-slate-500">{{ ucfirst($document->document_type) }}{{ $document->issued_at ? ' · '.$document->issued_at->format('d-m-Y') : '' }}</p></div><form action="{{ route('cats.registrations.documents.destroy',[$cat,$registration,$document]) }}" method="POST">@csrf @method('DELETE')<button class="text-xs font-medium text-rose-600">Hapus</button></form></div>@empty<p class="text-sm text-slate-500">Belum ada dokumen pada registrasi ini.</p>@endforelse</div>
|
||||
<form action="{{ route('cats.registrations.documents.store',[$cat,$registration]) }}" method="POST" enctype="multipart/form-data" class="grid gap-3 md:grid-cols-[1fr_180px_180px_auto]">@csrf<input type="file" name="document" required class="field-input py-2"><select name="document_type" class="field-input"><option value="pedigree">Pedigree</option><option value="registration">Registrasi</option><option value="ownership">Kepemilikan</option><option value="title">Gelar</option><option value="other">Lainnya</option></select><input name="label" class="field-input" placeholder="Nama dokumen"><button class="bg-slate-800 px-4 py-2 text-sm font-semibold text-white hover:bg-slate-900">Tambah dokumen</button></form>
|
||||
|
||||
<div class="border-t border-slate-200 bg-slate-50/50 p-5">
|
||||
<div class="mb-3 flex items-center justify-between"><h3 class="text-sm font-semibold text-slate-800">Dokumen pedigree</h3><span class="text-xs text-slate-500">PDF/JPG/PNG, maks. 10 MB</span></div>
|
||||
<div class="mb-4 grid gap-2">
|
||||
@forelse($registration->documents as $document)
|
||||
<div class="flex flex-col gap-3 rounded-xl border border-slate-200 bg-white p-3 sm:flex-row sm:items-center sm:justify-between">
|
||||
<div class="min-w-0"><p class="truncate text-sm font-semibold text-slate-800">{{ $document->label }}</p><p class="text-xs text-slate-500">{{ ucfirst($document->document_type) }}{{ $document->issued_at ? ' · '.$document->issued_at->format('d-m-Y') : '' }}</p></div>
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<a href="{{ route('cats.registrations.documents.show',[$cat,$registration,$document]) }}" target="_blank" rel="noopener" class="rounded-lg border border-indigo-200 bg-indigo-50 px-3 py-2 text-xs font-semibold text-indigo-700 hover:bg-indigo-100"><i class="fas fa-eye mr-1"></i>Lihat</a>
|
||||
<a href="{{ route('cats.registrations.documents.download',[$cat,$registration,$document]) }}" class="rounded-lg border border-slate-200 bg-white px-3 py-2 text-xs font-semibold text-slate-700 hover:bg-slate-50"><i class="fas fa-download mr-1"></i>Unduh</a>
|
||||
@can('check-access',['cats','update'])<form action="{{ route('cats.registrations.documents.destroy',[$cat,$registration,$document]) }}" method="POST" onsubmit="return confirm('Hapus dokumen ini?')">@csrf @method('DELETE')<button class="rounded-lg border border-rose-200 bg-rose-50 px-3 py-2 text-xs font-semibold text-rose-700 hover:bg-rose-100"><i class="fas fa-trash mr-1"></i>Hapus</button></form>@endcan
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<p class="rounded-xl border border-dashed border-slate-300 bg-white p-5 text-center text-sm text-slate-500">Belum ada dokumen pada registrasi ini.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
@can('check-access',['cats','update'])
|
||||
<form action="{{ route('cats.registrations.documents.store',[$cat,$registration]) }}" method="POST" enctype="multipart/form-data" class="grid gap-3 md:grid-cols-[1fr_180px_180px_auto]">@csrf<input type="file" name="document" required class="field-input rounded-xl py-2"><select name="document_type" class="field-input rounded-xl"><option value="pedigree">Pedigree</option><option value="registration">Registrasi</option><option value="ownership">Kepemilikan</option><option value="title">Gelar</option><option value="other">Lainnya</option></select><input name="label" class="field-input rounded-xl" placeholder="Nama dokumen"><button class="rounded-xl bg-slate-800 px-4 py-2 text-sm font-semibold text-white hover:bg-slate-900">Tambah dokumen</button></form>
|
||||
@endcan
|
||||
</div>
|
||||
</section>
|
||||
@empty
|
||||
<div class="border border-dashed border-slate-300 bg-white p-10 text-center"><i class="fas fa-file-lines mb-3 text-3xl text-slate-300"></i><p class="font-medium text-slate-700">Belum ada registrasi pedigree</p><p class="mt-1 text-sm text-slate-500">Tambahkan asosiasi dari formulir di sebelah kanan.</p></div>
|
||||
<div class="rounded-2xl border border-dashed border-slate-300 bg-white p-10 text-center"><i class="fas fa-file-lines mb-3 text-3xl text-slate-300"></i><p class="font-medium text-slate-700">Belum ada registrasi pedigree</p><p class="mt-1 text-sm text-slate-500">Tambahkan asosiasi dari formulir di sebelah kanan.</p></div>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
<aside class="h-fit border border-slate-200 bg-white p-5" x-data="{custom:false}">
|
||||
@can('check-access',['cats','update'])
|
||||
<aside class="h-fit rounded-2xl border border-slate-200 bg-white p-5" x-data="{custom:false}">
|
||||
<h2 class="font-semibold text-slate-900">Tambah registrasi</h2><p class="mt-1 text-sm text-slate-500">Satu asosiasi dapat ditambahkan satu kali untuk setiap kucing.</p>
|
||||
<form action="{{ route('cats.registrations.store',$cat) }}" method="POST" enctype="multipart/form-data" class="mt-5 space-y-4">@csrf
|
||||
<div><label class="field-label">Asosiasi</label><select name="association_id" required class="field-input" @change="custom=$event.target.value==='custom'"><option value="">Pilih asosiasi</option>@foreach($associations as $association)<option value="{{ $association->id }}">{{ $association->code }} - {{ $association->name }}</option>@endforeach<option value="custom">Asosiasi lain…</option></select></div>
|
||||
<template x-if="custom"><div class="space-y-3"><div><label class="field-label">Kode asosiasi</label><input name="association_code" class="field-input" placeholder="Contoh: TICA"></div><div><label class="field-label">Nama asosiasi</label><input name="association_name" class="field-input"></div></div></template>
|
||||
<div><label class="field-label">Nomor registrasi</label><input name="registration_number" class="field-input"></div>
|
||||
<div><label class="field-label">Nomor pedigree</label><input name="pedigree_number" class="field-input"></div>
|
||||
<div><label class="field-label">Nomor sertifikat</label><input name="certificate_number" class="field-input"></div>
|
||||
<div class="grid grid-cols-2 gap-3"><div><label class="field-label">Tanggal terbit</label><input type="date" name="issue_date" class="field-input"></div><div><label class="field-label">Gelar</label><input name="title" class="field-input"></div></div>
|
||||
<div><label class="field-label">File sertifikat</label><input type="file" name="certificate_file" accept=".pdf,.jpg,.jpeg,.png" class="field-input py-2"></div>
|
||||
<div><label class="field-label">Asosiasi</label><select name="association_id" required class="field-input rounded-xl" @change="custom=$event.target.value==='custom'"><option value="">Pilih asosiasi</option>@foreach($associations as $association)<option value="{{ $association->id }}">{{ $association->code }} - {{ $association->name }}</option>@endforeach<option value="custom">Asosiasi lain…</option></select></div>
|
||||
<template x-if="custom"><div class="space-y-3"><div><label class="field-label">Kode asosiasi</label><input name="association_code" class="field-input rounded-xl" placeholder="Contoh: TICA"></div><div><label class="field-label">Nama asosiasi</label><input name="association_name" class="field-input rounded-xl"></div></div></template>
|
||||
<div><label class="field-label">Nomor registrasi</label><input name="registration_number" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Nomor pedigree</label><input name="pedigree_number" class="field-input rounded-xl"></div>
|
||||
<div><label class="field-label">Nomor sertifikat</label><input name="certificate_number" class="field-input rounded-xl"></div>
|
||||
<div class="grid grid-cols-2 gap-3"><div><label class="field-label">Tanggal terbit</label><input type="date" name="issue_date" class="field-input rounded-xl"></div><div><label class="field-label">Gelar</label><input name="title" class="field-input rounded-xl"></div></div>
|
||||
<div><label class="field-label">File sertifikat</label><input type="file" name="certificate_file" accept=".pdf,.jpg,.jpeg,.png" class="field-input rounded-xl py-2"></div>
|
||||
<label class="flex items-center gap-2 text-sm text-slate-700"><input type="hidden" name="is_primary" value="0"><input type="checkbox" name="is_primary" value="1" class="rounded border-slate-300 text-indigo-600">Jadikan pedigree utama</label>
|
||||
<button class="w-full bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700">Simpan registrasi</button>
|
||||
<button class="w-full rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700">Simpan registrasi</button>
|
||||
</form>
|
||||
</aside>
|
||||
@endcan
|
||||
</div>
|
||||
</x-app-layout>
|
||||
|
||||
@@ -367,7 +367,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const ctx = document.getElementById('weightChart');
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
|
||||
<div class="grid gap-4 sm:grid-cols-2 xl:grid-cols-4">
|
||||
@foreach([
|
||||
['Total kucing',$stats['total_cats'] ?? 0,'fa-cat','cats.index'],
|
||||
['Total kucing aktif',$stats['total_cats'] ?? 0,'fa-cat','cats.index'],
|
||||
['Dalam perawatan',$stats['sick_cats'] ?? 0,'fa-heart-pulse','cats.index'],
|
||||
['Pembiakan aktif',$stats['total_mating'] ?? 0,'fa-venus-mars','matting.index'],
|
||||
['Anakan tercatat',$stats['total_kittens'] ?? 0,'fa-paw','matting.index']
|
||||
['Masa kehamilan',$stats['total_mating'] ?? 0,'fa-venus-mars','matting.index'],
|
||||
['Total anakan',$stats['total_kittens'] ?? 0,'fa-paw','matting.index']
|
||||
] as $i=>$card)
|
||||
<a href="{{ $i===1 ? route($card[3],['filter_health'=>'treatment']) : route($card[3]) }}" class="border border-slate-200 bg-white p-5 hover:border-slate-300">
|
||||
<div class="flex items-start justify-between">
|
||||
@@ -301,6 +301,24 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="border-t border-slate-100 px-5 pb-5 pt-5">
|
||||
<div class="mb-4 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between">
|
||||
<div><h3 class="text-base font-bold text-slate-900">Perubahan berat yang perlu diperhatikan</h3><p class="mt-0.5 text-xs text-slate-500">Kenaikan dan penurunan berdasarkan dua pencatatan terakhir dalam periode {{ $weightPeriodLabel ?? '-' }}.</p></div>
|
||||
</div>
|
||||
<div class="grid gap-4 xl:grid-cols-3">
|
||||
@foreach(['Kitten','Junior','Dewasa'] as $category)
|
||||
@php $movement = data_get($weightMovements ?? [], $category, ['gainers'=>collect(),'losers'=>collect()]); @endphp
|
||||
<div class="rounded-2xl border border-slate-200 bg-slate-50/40 p-4">
|
||||
<h4 class="mb-3 font-bold text-slate-800">{{ $category }}</h4>
|
||||
<div class="grid gap-3 sm:grid-cols-2 xl:grid-cols-1 2xl:grid-cols-2">
|
||||
<div class="rounded-xl border border-emerald-100 bg-emerald-50/70 p-3"><p class="mb-2 text-xs font-bold text-emerald-700"><i class="fas fa-arrow-trend-up mr-1"></i>Kenaikan</p><div class="space-y-2">@forelse($movement['gainers'] as $row)<div class="flex items-center justify-between gap-3 text-xs"><a href="{{ route('cats.show',$row['cat_id']) }}" class="truncate font-semibold text-slate-700 hover:text-indigo-600">{{ $row['name'] }}</a><span class="shrink-0 font-bold text-emerald-700">+{{ number_format($row['change'],2,',','.') }} kg</span></div>@empty<p class="text-xs text-slate-400">Tidak ada kenaikan tercatat.</p>@endforelse</div></div>
|
||||
<div class="rounded-xl border border-rose-100 bg-rose-50/70 p-3"><p class="mb-2 text-xs font-bold text-rose-700"><i class="fas fa-arrow-trend-down mr-1"></i>Penurunan</p><div class="space-y-2">@forelse($movement['losers'] as $row)<div class="flex items-center justify-between gap-3 text-xs"><a href="{{ route('cats.show',$row['cat_id']) }}" class="truncate font-semibold text-slate-700 hover:text-indigo-600">{{ $row['name'] }}</a><span class="shrink-0 font-bold text-rose-700">{{ number_format($row['change'],2,',','.') }} kg</span></div>@empty<p class="text-xs text-slate-400">Tidak ada penurunan tercatat.</p>@endforelse</div></div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="mt-6 grid gap-6 xl:grid-cols-3">
|
||||
@@ -378,171 +396,77 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.7/dist/chart.umd.min.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const formatKg = (value) => `${Number(value).toFixed(2).replace('.', ',')} kg`;
|
||||
const formatMonth = (month) => {
|
||||
const d = new Date(`${month}-01T00:00:00`);
|
||||
return Number.isNaN(d.getTime()) ? month : d.toLocaleDateString('id-ID', { month: 'short', year: '2-digit' });
|
||||
};
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const formatKg = (value) => `${Number(value).toFixed(2).replace('.', ',')} kg`;
|
||||
const formatMonth = (month) => {
|
||||
const d = new Date(`${month}-01T00:00:00`);
|
||||
return Number.isNaN(d.getTime()) ? month : d.toLocaleDateString('id-ID', { month: 'short', year: '2-digit' });
|
||||
};
|
||||
|
||||
if (typeof Chart !== 'undefined') {
|
||||
Chart.defaults.font.family = "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif";
|
||||
Chart.defaults.color = '#64748b';
|
||||
function renderLineChart(canvas, labels, datasets) {
|
||||
if (!canvas || !labels.length || !datasets.length) return;
|
||||
const ctx = canvas.getContext('2d');
|
||||
const parent = canvas.parentElement;
|
||||
const cssWidth = Math.max(320, parent.clientWidth);
|
||||
const cssHeight = Math.max(250, parent.clientHeight);
|
||||
const dpr = window.devicePixelRatio || 1;
|
||||
canvas.width = cssWidth * dpr; canvas.height = cssHeight * dpr;
|
||||
canvas.style.width = cssWidth + 'px'; canvas.style.height = cssHeight + 'px';
|
||||
ctx.setTransform(dpr,0,0,dpr,0,0);
|
||||
ctx.clearRect(0,0,cssWidth,cssHeight);
|
||||
|
||||
const categoryColors = {
|
||||
Kitten: '#2563eb',
|
||||
Junior: '#db2777',
|
||||
Dewasa: '#059669'
|
||||
};
|
||||
const catPalette = ['#d97706', '#7c3aed', '#0891b2', '#2563eb', '#059669', '#be123c'];
|
||||
const pad = {left:48,right:16,top:12,bottom:58};
|
||||
const w = cssWidth-pad.left-pad.right, h = cssHeight-pad.top-pad.bottom;
|
||||
const values = datasets.flatMap(d => d.data.filter(v => v !== null && v !== undefined).map(Number));
|
||||
if (!values.length) return;
|
||||
const maxY = Math.max(1, Math.ceil(Math.max(...values)*1.15*2)/2);
|
||||
const minY = 0;
|
||||
const xAt = i => pad.left + (labels.length<=1 ? w/2 : (i/(labels.length-1))*w);
|
||||
const yAt = v => pad.top + h - ((Number(v)-minY)/(maxY-minY))*h;
|
||||
|
||||
const avgData = @json($categoryAverageTrend ?? ['labels'=>[], 'series'=>[]]);
|
||||
const avgCanvas = document.getElementById('weightCategoryAverageChart');
|
||||
if (avgCanvas && avgData.labels && avgData.labels.length) {
|
||||
new Chart(avgCanvas, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: avgData.labels.map(formatMonth),
|
||||
datasets: (avgData.series || []).map((series) => ({
|
||||
label: series.name,
|
||||
data: series.data,
|
||||
borderColor: categoryColors[series.name] || '#64748b',
|
||||
backgroundColor: categoryColors[series.name] || '#64748b',
|
||||
borderWidth: 2.5,
|
||||
pointRadius: 3,
|
||||
pointHoverRadius: 5,
|
||||
pointBorderWidth: 0,
|
||||
tension: 0.28,
|
||||
spanGaps: true
|
||||
}))
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
interaction: { mode: 'index', intersect: false },
|
||||
plugins: {
|
||||
legend: {
|
||||
position: 'bottom',
|
||||
labels: { usePointStyle: true, boxWidth: 8, boxHeight: 8, padding: 18, font: { size: 11, weight: '600' } }
|
||||
},
|
||||
tooltip: {
|
||||
backgroundColor: '#0f172a',
|
||||
padding: 10,
|
||||
cornerRadius: 10,
|
||||
callbacks: { label: (ctx) => `${ctx.dataset.label}: ${formatKg(ctx.parsed.y)}` }
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: { grid: { display: false }, border: { display: false }, ticks: { maxRotation: 0, autoSkip: true, maxTicksLimit: 8 } },
|
||||
y: {
|
||||
beginAtZero: true,
|
||||
grid: { color: '#e2e8f0' },
|
||||
border: { display: false },
|
||||
title: { display: true, text: 'Berat (kg)', color: '#64748b', font: { size: 11, weight: '600' } }
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const trendLabels = @json($weightTrendLabels ?? []);
|
||||
const trendSeries = @json($weightTrendSeries ?? []);
|
||||
const trendCanvas = document.getElementById('weightSelectedCategoryChart');
|
||||
if (trendCanvas && trendLabels.length && trendSeries.length) {
|
||||
new Chart(trendCanvas, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: trendLabels.map(formatMonth),
|
||||
datasets: trendSeries.map((series, index) => ({
|
||||
label: series.name,
|
||||
data: series.data,
|
||||
borderColor: catPalette[index % catPalette.length],
|
||||
backgroundColor: catPalette[index % catPalette.length],
|
||||
borderWidth: 2.2,
|
||||
pointRadius: 3,
|
||||
pointHoverRadius: 5,
|
||||
pointBorderWidth: 0,
|
||||
tension: 0.28,
|
||||
spanGaps: true
|
||||
}))
|
||||
},
|
||||
options: {
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
interaction: { mode: 'nearest', intersect: false },
|
||||
plugins: {
|
||||
legend: {
|
||||
position: 'bottom',
|
||||
labels: { usePointStyle: true, boxWidth: 8, boxHeight: 8, padding: 15, font: { size: 10, weight: '600' } }
|
||||
},
|
||||
tooltip: {
|
||||
backgroundColor: '#0f172a',
|
||||
padding: 10,
|
||||
cornerRadius: 10,
|
||||
callbacks: { label: (ctx) => `${ctx.dataset.label}: ${formatKg(ctx.parsed.y)}` }
|
||||
}
|
||||
},
|
||||
scales: {
|
||||
x: { grid: { display: false }, border: { display: false }, ticks: { maxRotation: 0, autoSkip: true, maxTicksLimit: 8 } },
|
||||
y: {
|
||||
beginAtZero: true,
|
||||
grid: { color: '#e2e8f0' },
|
||||
border: { display: false },
|
||||
title: { display: true, text: 'Berat (kg)', color: '#64748b', font: { size: 11, weight: '600' } }
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
ctx.font='11px system-ui, -apple-system, Segoe UI, sans-serif'; ctx.textBaseline='middle';
|
||||
for(let i=0;i<=4;i++){
|
||||
const v=maxY*(i/4), y=yAt(v);
|
||||
ctx.strokeStyle='#e2e8f0'; ctx.lineWidth=1; ctx.beginPath(); ctx.moveTo(pad.left,y); ctx.lineTo(pad.left+w,y); ctx.stroke();
|
||||
ctx.fillStyle='#64748b'; ctx.textAlign='right'; ctx.fillText(v.toFixed(v<1?1:1),pad.left-8,y);
|
||||
}
|
||||
const step=Math.max(1,Math.ceil(labels.length/6));
|
||||
labels.forEach((lab,i)=>{ if(i%step!==0 && i!==labels.length-1) return; ctx.fillStyle='#64748b'; ctx.textAlign='center'; ctx.fillText(formatMonth(lab),xAt(i),pad.top+h+20); });
|
||||
|
||||
// Pencarian + pagination tabel berat terbaru (client-side, tanpa request tambahan).
|
||||
const searchInput = document.getElementById('weightTableSearch');
|
||||
const rowsPerPageSelect = document.getElementById('weightRowsPerPage');
|
||||
const tableRows = Array.from(document.querySelectorAll('[data-weight-row]'));
|
||||
const prevButton = document.getElementById('weightPrevPage');
|
||||
const nextButton = document.getElementById('weightNextPage');
|
||||
const pageLabel = document.getElementById('weightPageLabel');
|
||||
const tableInfo = document.getElementById('weightTableInfo');
|
||||
let currentPage = 1;
|
||||
datasets.forEach(ds=>{
|
||||
ctx.strokeStyle=ds.color; ctx.fillStyle=ds.color; ctx.lineWidth=2.4; ctx.lineJoin='round'; ctx.lineCap='round';
|
||||
ctx.beginPath(); let started=false;
|
||||
ds.data.forEach((v,i)=>{ if(v===null||v===undefined){started=false;return;} const x=xAt(i),y=yAt(v); if(!started){ctx.moveTo(x,y);started=true;} else ctx.lineTo(x,y); });
|
||||
ctx.stroke();
|
||||
ds.data.forEach((v,i)=>{ if(v===null||v===undefined)return; const x=xAt(i),y=yAt(v); ctx.beginPath();ctx.arc(x,y,3,0,Math.PI*2);ctx.fill(); });
|
||||
});
|
||||
|
||||
const renderWeightTable = () => {
|
||||
if (!tableRows.length) {
|
||||
if (tableInfo) tableInfo.textContent = '0 data';
|
||||
if (pageLabel) pageLabel.textContent = '';
|
||||
if (prevButton) prevButton.disabled = true;
|
||||
if (nextButton) nextButton.disabled = true;
|
||||
return;
|
||||
}
|
||||
let lx=pad.left, ly=cssHeight-16;
|
||||
datasets.forEach(ds=>{ const text=ds.label; const tw=ctx.measureText(text).width+28; if(lx+tw>cssWidth-pad.right){ly-=18;lx=pad.left;} ctx.fillStyle=ds.color;ctx.beginPath();ctx.arc(lx+4,ly,4,0,Math.PI*2);ctx.fill();ctx.fillStyle='#475569';ctx.textAlign='left';ctx.fillText(text,lx+14,ly);lx+=tw; });
|
||||
}
|
||||
|
||||
const search = (searchInput?.value || '').trim().toLowerCase();
|
||||
const pageSize = Number(rowsPerPageSelect?.value || 10);
|
||||
const filtered = tableRows.filter((row) => (row.dataset.name || '').includes(search));
|
||||
const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));
|
||||
currentPage = Math.min(currentPage, totalPages);
|
||||
const start = (currentPage - 1) * pageSize;
|
||||
const visible = new Set(filtered.slice(start, start + pageSize));
|
||||
const categoryColors={Kitten:'#2563eb',Junior:'#db2777',Dewasa:'#059669'};
|
||||
const catPalette=['#d97706','#7c3aed','#0891b2','#2563eb','#059669','#be123c'];
|
||||
const avgData=@json($categoryAverageTrend ?? ['labels'=>[], 'series'=>[]]);
|
||||
const trendLabels=@json($weightTrendLabels ?? []);
|
||||
const trendSeries=@json($weightTrendSeries ?? []);
|
||||
const avgCanvas=document.getElementById('weightCategoryAverageChart');
|
||||
const trendCanvas=document.getElementById('weightSelectedCategoryChart');
|
||||
const draw=()=>{
|
||||
renderLineChart(avgCanvas, avgData.labels||[], (avgData.series||[]).map(s=>({label:s.name,data:s.data,color:categoryColors[s.name]||'#64748b'})));
|
||||
renderLineChart(trendCanvas, trendLabels||[], (trendSeries||[]).map((s,i)=>({label:s.name,data:s.data,color:catPalette[i%catPalette.length]})));
|
||||
};
|
||||
draw(); let resizeTimer; window.addEventListener('resize',()=>{clearTimeout(resizeTimer);resizeTimer=setTimeout(draw,120);});
|
||||
|
||||
tableRows.forEach((row) => row.classList.toggle('hidden', !visible.has(row)));
|
||||
|
||||
if (tableInfo) {
|
||||
const from = filtered.length ? start + 1 : 0;
|
||||
const to = Math.min(start + pageSize, filtered.length);
|
||||
tableInfo.textContent = `Menampilkan ${from}-${to} dari ${filtered.length} data`;
|
||||
}
|
||||
if (pageLabel) pageLabel.textContent = `Hal. ${currentPage} / ${totalPages}`;
|
||||
if (prevButton) prevButton.disabled = currentPage <= 1;
|
||||
if (nextButton) nextButton.disabled = currentPage >= totalPages;
|
||||
};
|
||||
|
||||
searchInput?.addEventListener('input', () => { currentPage = 1; renderWeightTable(); });
|
||||
rowsPerPageSelect?.addEventListener('change', () => { currentPage = 1; renderWeightTable(); });
|
||||
prevButton?.addEventListener('click', () => { if (currentPage > 1) { currentPage--; renderWeightTable(); } });
|
||||
nextButton?.addEventListener('click', () => { currentPage++; renderWeightTable(); });
|
||||
renderWeightTable();
|
||||
});
|
||||
const searchInput=document.getElementById('weightTableSearch');
|
||||
const rowsPerPageSelect=document.getElementById('weightRowsPerPage');
|
||||
const tableRows=Array.from(document.querySelectorAll('[data-weight-row]'));
|
||||
const prevButton=document.getElementById('weightPrevPage'); const nextButton=document.getElementById('weightNextPage');
|
||||
const pageLabel=document.getElementById('weightPageLabel'); const tableInfo=document.getElementById('weightTableInfo'); let currentPage=1;
|
||||
const renderTable=()=>{ const search=(searchInput?.value||'').trim().toLowerCase(); const size=Number(rowsPerPageSelect?.value||10); const filtered=tableRows.filter(r=>(r.dataset.name||'').includes(search)); const pages=Math.max(1,Math.ceil(filtered.length/size)); currentPage=Math.min(currentPage,pages); const start=(currentPage-1)*size; const visible=new Set(filtered.slice(start,start+size)); tableRows.forEach(r=>r.classList.toggle('hidden',!visible.has(r))); if(tableInfo)tableInfo.textContent=`Menampilkan ${filtered.length?start+1:0}-${Math.min(start+size,filtered.length)} dari ${filtered.length} data`; if(pageLabel)pageLabel.textContent=`Hal. ${currentPage} / ${pages}`; if(prevButton)prevButton.disabled=currentPage<=1; if(nextButton)nextButton.disabled=currentPage>=pages; };
|
||||
searchInput?.addEventListener('input',()=>{currentPage=1;renderTable();}); rowsPerPageSelect?.addEventListener('change',()=>{currentPage=1;renderTable();}); prevButton?.addEventListener('click',()=>{if(currentPage>1){currentPage--;renderTable();}}); nextButton?.addEventListener('click',()=>{currentPage++;renderTable();}); renderTable();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
</x-app-layout>
|
||||
|
||||
@@ -96,7 +96,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const ctx = document.getElementById('medicalTrendChart');
|
||||
|
||||
@@ -193,7 +193,6 @@
|
||||
|
||||
{{-- SCRIPTS SECTION --}}
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
function toggleCreateForm() {
|
||||
const form = document.getElementById('create-form');
|
||||
|
||||
@@ -196,7 +196,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
function confirmDeleteObat(id, name) {
|
||||
Swal.fire({
|
||||
|
||||
@@ -228,7 +228,6 @@
|
||||
|
||||
{{-- SCRIPTS SECTION --}}
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
|
||||
<!-- <script>
|
||||
function updateFileName(input) {
|
||||
|
||||
@@ -107,7 +107,8 @@
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase tracking-widest text-slate-400">Status Pembiakan</label>
|
||||
<select name="status" class="w-full mt-2 bg-white/10 border-white/10 rounded-xl text-xs font-bold focus:ring-indigo-500 text-white" required>
|
||||
<option value="proses" class="text-slate-800">Dalam proses</option>
|
||||
<option value="proses" class="text-slate-800">Menunggu konfirmasi</option>
|
||||
<option value="hamil" class="text-slate-800">Hamil / menunggu lahir</option>
|
||||
<option value="berhasil" class="text-slate-800">Berhasil (Lahir)</option>
|
||||
<option value="gagal" class="text-slate-800">Gagal</option>
|
||||
</select>
|
||||
|
||||
@@ -114,7 +114,8 @@
|
||||
<div>
|
||||
<label class="text-[9px] font-black uppercase text-slate-400 mb-1 block">Status</label>
|
||||
<select name="status" class="w-full bg-white/10 border-white/10 rounded-xl py-3 text-xs font-black text-white">
|
||||
<option value="proses" class="text-slate-800" {{ $matting->status == 'proses' ? 'selected' : '' }}>DALAM PROSES</option>
|
||||
<option value="proses" class="text-slate-800" {{ $matting->status == 'proses' ? 'selected' : '' }}>MENUNGGU KONFIRMASI</option>
|
||||
<option value="hamil" class="text-slate-800" {{ $matting->status == 'hamil' ? 'selected' : '' }}>HAMIL / MENUNGGU LAHIR</option>
|
||||
<option value="berhasil" class="text-slate-800" {{ $matting->status == 'berhasil' ? 'selected' : '' }}>BERHASIL</option>
|
||||
<option value="gagal" class="text-slate-800" {{ $matting->status == 'gagal' ? 'selected' : '' }}>GAGAL</option>
|
||||
</select>
|
||||
@@ -264,12 +265,12 @@
|
||||
jenis_kelamin: 'Jantan',
|
||||
tgl_lahir: defaultDate,
|
||||
kode_ems: '',
|
||||
registry: [], // Inisialisasi array kosong untuk record baru
|
||||
registry: [], // Inisialisasi array kosong untuk data baru
|
||||
is_pedigree: false
|
||||
});
|
||||
},
|
||||
removeKitten(index) {
|
||||
if(confirm('Hapus record anak ini? Profil di Manajemen Pasien juga akan terhapus setelah disimpan.')) {
|
||||
if(confirm('Hapus data anak ini? Profil di Manajemen Pasien juga akan terhapus setelah disimpan.')) {
|
||||
this.kittens.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,48 @@
|
||||
<x-app-layout>
|
||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between"><div><h1 class="text-2xl font-bold text-slate-900">Perkawinan & pembiakan</h1><p class="mt-1 text-sm text-slate-500">Riwayat pasangan induk, periode kawin, perkiraan kelahiran, dan data anakan.</p></div>@can('check-access',['matting','create'])<a href="{{ route('matting.create') }}" class="bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700"><i class="fas fa-plus mr-2"></i>Catat perkawinan</a>@endcan</div>
|
||||
<div class="mb-4 border border-slate-200 bg-white p-4"><p class="text-xs text-slate-500">Total riwayat pembiakan</p><p class="mt-1 text-2xl font-bold text-slate-900">{{ $mattings->total() }}</p></div>
|
||||
<section class="border border-slate-200 bg-white"><div class="overflow-x-auto"><table class="min-w-full divide-y divide-slate-200 text-sm"><thead class="bg-slate-50 text-left text-xs font-semibold text-slate-500"><tr><th class="px-4 py-3">Pasangan induk</th><th class="px-4 py-3">Periode kawin</th><th class="px-4 py-3">Perkiraan lahir</th><th class="px-4 py-3">Status & anakan</th><th class="px-4 py-3 text-right">Aksi</th></tr></thead><tbody class="divide-y divide-slate-100">
|
||||
<div class="mb-6 flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between">
|
||||
<div><h1 class="text-2xl font-bold text-slate-900">Perkawinan & pembiakan</h1><p class="mt-1 text-sm text-slate-500">Alur: catat kawin → konfirmasi hamil → pantau HPL → catat kelahiran/anakan.</p></div>
|
||||
@can('check-access',['matting','create'])<a href="{{ route('matting.create') }}" class="rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700"><i class="fas fa-plus mr-2"></i>Catat perkawinan</a>@endcan
|
||||
</div>
|
||||
|
||||
<div class="mb-5 grid gap-3 sm:grid-cols-4">
|
||||
@php
|
||||
$all=$mattings->getCollection();
|
||||
$countProses=$all->where('status','proses')->count();
|
||||
$countHamil=$all->where('status','hamil')->count();
|
||||
$countLahir=$all->where('status','berhasil')->count();
|
||||
$countGagal=$all->where('status','gagal')->count();
|
||||
@endphp
|
||||
<div class="rounded-2xl border border-blue-100 bg-blue-50/60 p-4"><p class="text-xs font-semibold text-blue-700">Menunggu konfirmasi</p><p class="mt-1 text-2xl font-bold text-blue-900">{{ $countProses }}</p></div>
|
||||
<div class="rounded-2xl border border-amber-100 bg-amber-50/60 p-4"><p class="text-xs font-semibold text-amber-700">Hamil / menunggu lahir</p><p class="mt-1 text-2xl font-bold text-amber-900">{{ $countHamil }}</p></div>
|
||||
<div class="rounded-2xl border border-emerald-100 bg-emerald-50/60 p-4"><p class="text-xs font-semibold text-emerald-700">Sudah lahir</p><p class="mt-1 text-2xl font-bold text-emerald-900">{{ $countLahir }}</p></div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4"><p class="text-xs font-semibold text-slate-500">Tidak berhasil</p><p class="mt-1 text-2xl font-bold text-slate-800">{{ $countGagal }}</p></div>
|
||||
</div>
|
||||
|
||||
<section class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
||||
<div class="overflow-x-auto"><table class="min-w-full divide-y divide-slate-200 text-sm"><thead class="bg-slate-50 text-left text-xs font-semibold text-slate-500"><tr><th class="px-4 py-3">Pasangan induk</th><th class="px-4 py-3">Periode kawin</th><th class="px-4 py-3">HPL</th><th class="px-4 py-3">Tahap</th><th class="px-4 py-3">Anakan</th><th class="px-4 py-3 text-right">Aksi</th></tr></thead><tbody class="divide-y divide-slate-100">
|
||||
@forelse($mattings as $m)
|
||||
@php $edd=$m->tgl_kawin_awal?->copy()->addDays(63); $days=$edd ? (int)now()->startOfDay()->diffInDays($edd->copy()->startOfDay(),false) : null; @endphp
|
||||
<tr class="hover:bg-slate-50"><td class="px-4 py-4"><div class="flex items-center gap-3"><div class="flex -space-x-2">@foreach([$m->sire,$m->dam] as $parent)<img src="{{ $parent?->foto_url ?? asset('images/default-cat.png') }}" class="h-10 w-10 rounded-full border-2 border-white object-cover" alt="">@endforeach</div><div><p class="font-semibold text-slate-900">{{ $m->sire->nama_kucing ?? '-' }} × {{ $m->dam->nama_kucing ?? '-' }}</p><p class="mt-1 text-xs text-slate-500">EMS {{ $m->sire->kode_ems ?? '-' }} × {{ $m->dam->kode_ems ?? '-' }}</p></div></div></td>
|
||||
<td class="px-4 py-4"><p class="text-slate-700">{{ $m->tgl_kawin_awal?->format('d-m-Y') ?? '-' }}{{ $m->tgl_kawin_akhir ? ' s.d. '.$m->tgl_kawin_akhir->format('d-m-Y') : '' }}</p>@if($m->tgl_kawin_awal && $m->tgl_kawin_akhir)<p class="mt-1 text-xs text-slate-500">{{ $m->tgl_kawin_awal->diffInDays($m->tgl_kawin_akhir)+1 }} hari</p>@endif</td>
|
||||
<td class="px-4 py-4">@if($edd)<p class="font-medium text-slate-800">{{ $edd->format('d-m-Y') }}</p><p class="mt-1 text-xs {{ $days!==null && $days<=7 && $days>=0?'text-rose-600':'text-slate-500' }}">{{ $days<0?'Lewat '.abs($days).' hari':($days===0?'Perkiraan hari ini':$days.' hari lagi') }}</p>@else<span class="text-slate-400">-</span>@endif</td>
|
||||
<td class="px-4 py-4"><p class="font-medium {{ $m->status==='berhasil'?'text-emerald-700':($m->status==='gagal'?'text-rose-600':'text-indigo-700') }}">{{ $m->status==='proses'?'Dalam proses':ucfirst($m->status) }}</p><p class="mt-1 text-xs text-slate-500">{{ $m->kittens_count }} anakan tercatat</p></td>
|
||||
<td class="px-4 py-4"><div class="flex justify-end gap-1">@can('check-access',['matting','update'])<a href="{{ route('matting.edit',$m) }}" class="p-2 text-slate-500 hover:bg-slate-100" title="Ubah"><i class="fas fa-pen"></i></a>@endcan @can('check-access',['matting','delete'])<form method="POST" action="{{ route('matting.destroy',$m) }}" id="delete-matting-{{ $m->id }}">@csrf @method('DELETE')<button type="button" onclick="confirmDelete('delete-matting-{{ $m->id }}','{{ addslashes(($m->sire->nama_kucing ?? '').' × '.($m->dam->nama_kucing ?? '')) }}')" class="p-2 text-rose-500 hover:bg-rose-50"><i class="fas fa-trash"></i></button></form>@endcan</div></td></tr>
|
||||
@empty<tr><td colspan="5" class="px-4 py-12 text-center text-sm text-slate-500">Belum ada riwayat pembiakan.</td></tr>@endforelse
|
||||
</tbody></table></div><div class="border-t border-slate-200 p-4">{{ $mattings->links() }}</div></section>
|
||||
@php
|
||||
$edd=$m->tgl_kawin_awal?->copy()->addDays(63); $days=$edd ? (int)now()->startOfDay()->diffInDays($edd->copy()->startOfDay(),false) : null;
|
||||
$flowLabel=match($m->status){'hamil'=>'Hamil / menunggu lahir','berhasil'=>'Sudah lahir','gagal'=>'Tidak berhasil',default=>'Menunggu konfirmasi'};
|
||||
$flowStyle=match($m->status){'hamil'=>'bg-amber-50 text-amber-700 border-amber-100','berhasil'=>'bg-emerald-50 text-emerald-700 border-emerald-100','gagal'=>'bg-rose-50 text-rose-700 border-rose-100',default=>'bg-blue-50 text-blue-700 border-blue-100'};
|
||||
@endphp
|
||||
<tr class="align-top hover:bg-slate-50">
|
||||
<td class="px-4 py-4"><div class="flex items-center gap-3"><div class="flex -space-x-2">@foreach([$m->sire,$m->dam] as $parent)<img src="{{ $parent?->foto_url ?? asset('images/default-cat.png') }}" class="h-10 w-10 rounded-full border-2 border-white object-cover" alt="">@endforeach</div><div><p class="font-semibold text-slate-900">{{ $m->sire->nama_kucing ?? '-' }} × {{ $m->dam->nama_kucing ?? '-' }}</p><p class="mt-1 text-xs text-slate-500">EMS {{ $m->sire->kode_ems ?? '-' }} × {{ $m->dam->kode_ems ?? '-' }}</p></div></div></td>
|
||||
<td class="px-4 py-4"><p class="text-slate-700">{{ $m->tgl_kawin_awal?->format('d-m-Y') ?? '-' }}{{ $m->tgl_kawin_akhir ? ' s.d. '.$m->tgl_kawin_akhir->format('d-m-Y') : '' }}</p>@if($m->tgl_kawin_awal && $m->tgl_kawin_akhir)<p class="mt-1 text-xs text-slate-500">{{ $m->tgl_kawin_awal->diffInDays($m->tgl_kawin_akhir)+1 }} hari</p>@endif</td>
|
||||
<td class="px-4 py-4">@if($edd)<p class="font-semibold text-slate-800">{{ $edd->format('d-m-Y') }}</p>@if(in_array($m->status,['proses','hamil']))<p class="mt-1 text-xs {{ $days!==null && $days<=7 && $days>=0?'font-semibold text-rose-600':'text-slate-500' }}">{{ $days<0?'Lewat '.abs($days).' hari':($days===0?'HPL hari ini':$days.' hari lagi') }}</p>@endif @else<span class="text-slate-400">-</span>@endif</td>
|
||||
<td class="px-4 py-4"><span class="inline-flex rounded-full border px-2.5 py-1 text-xs font-semibold {{ $flowStyle }}">{{ $flowLabel }}</span>
|
||||
@can('check-access',['matting','update'])
|
||||
<div class="mt-2 flex flex-wrap gap-1">
|
||||
@if($m->status==='proses')<form method="POST" action="{{ route('matting.status',$m) }}">@csrf @method('PATCH')<input type="hidden" name="status" value="hamil"><button class="rounded-lg bg-amber-100 px-2 py-1 text-[11px] font-semibold text-amber-800">Konfirmasi hamil</button></form>@endif
|
||||
@if(in_array($m->status,['proses','hamil']))<form method="POST" action="{{ route('matting.status',$m) }}">@csrf @method('PATCH')<input type="hidden" name="status" value="berhasil"><button class="rounded-lg bg-emerald-100 px-2 py-1 text-[11px] font-semibold text-emerald-800">Tandai lahir</button></form><form method="POST" action="{{ route('matting.status',$m) }}">@csrf @method('PATCH')<input type="hidden" name="status" value="gagal"><button class="rounded-lg bg-rose-100 px-2 py-1 text-[11px] font-semibold text-rose-800">Tidak berhasil</button></form>@endif
|
||||
</div>
|
||||
@endcan
|
||||
</td>
|
||||
<td class="px-4 py-4"><p class="font-semibold text-slate-800">{{ $m->kittens_count }}</p><p class="text-xs text-slate-500">anakan tercatat</p></td>
|
||||
<td class="px-4 py-4"><div class="flex justify-end gap-1">@can('check-access',['matting','update'])<a href="{{ route('matting.edit',$m) }}" class="rounded-lg p-2 text-slate-500 hover:bg-slate-100" title="Ubah / catat anakan"><i class="fas fa-pen"></i></a>@endcan @can('check-access',['matting','delete'])<form method="POST" action="{{ route('matting.destroy',$m) }}" id="delete-matting-{{ $m->id }}">@csrf @method('DELETE')<button type="button" onclick="confirmDelete('delete-matting-{{ $m->id }}','riwayat pembiakan ini')" class="rounded-lg p-2 text-rose-500 hover:bg-rose-50"><i class="fas fa-trash"></i></button></form>@endcan</div></td>
|
||||
</tr>
|
||||
@empty<tr><td colspan="6" class="px-4 py-12 text-center text-sm text-slate-500">Belum ada riwayat pembiakan.</td></tr>@endforelse
|
||||
</tbody></table></div>
|
||||
<div class="border-t border-slate-200 p-4">{{ $mattings->links() }}</div>
|
||||
</section>
|
||||
</x-app-layout>
|
||||
|
||||
@@ -170,7 +170,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
||||
<script>
|
||||
document.addEventListener('alpine:init', () => {
|
||||
Alpine.data('treatmentForm', () => ({
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Lampiran Foto Bukti</label>
|
||||
<div class="relative group">
|
||||
<div class="w-full h-48 rounded-3xl bg-slate-50 border-2 border-dashed border-slate-200 overflow-hidden shadow-inner flex items-center justify-center">
|
||||
<img id="preview" src="{{ $treatment->foto_bukti ? asset('storage/' . $treatment->foto_bukti) : 'https://ui-avatars.com/api/?name=No+Photo&background=f1f5f9&color=94a3b8' }}" class="w-full h-full object-cover">
|
||||
<img id="preview" src="{{ $treatment->foto_bukti ? asset('storage/' . $treatment->foto_bukti) : asset('images/default-cat.svg') }}" class="w-full h-full object-cover">
|
||||
</div>
|
||||
<input type="file" name="foto_bukti" onchange="previewImage(event)" class="mt-3 w-full text-[10px] font-black text-slate-400 file:mr-3 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-[9px] file:font-black file:bg-indigo-50 file:text-indigo-600 hover:file:bg-indigo-100 cursor-pointer">
|
||||
</div>
|
||||
@@ -161,7 +161,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
||||
|
||||
@php
|
||||
// [FIX ERROR SYNTAX BLADE]
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<td class="px-6 py-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<div class="w-10 h-10 rounded-xl bg-slate-100 overflow-hidden ring-2 ring-white shadow-sm shrink-0">
|
||||
<img src="{{ $treatment->cat->foto ? asset('storage/'.$treatment->cat->foto) : 'https://ui-avatars.com/api/?name='.urlencode($treatment->cat->nama_kucing).'&background=f1f5f9&color=4f46e5' }}" class="w-full h-full object-cover">
|
||||
<img src="{{ $treatment->cat->foto ? asset('storage/'.$treatment->cat->foto) : asset('images/default-cat.svg') }}" class="w-full h-full object-cover">
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[10px] font-black text-indigo-600 uppercase leading-none mb-1">{{ \Carbon\Carbon::parse($treatment->tanggal)->format('d M Y') }}</p>
|
||||
@@ -189,7 +189,6 @@
|
||||
</div>
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
function confirmDelete(button, name) {
|
||||
Swal.fire({
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
{{-- Info Kucing --}}
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-6 shadow-sm text-center">
|
||||
<div class="w-24 h-24 rounded-3xl bg-slate-100 mx-auto overflow-hidden ring-4 ring-indigo-50 shadow-md">
|
||||
<img src="{{ $treatment->cat->foto ? asset('storage/'.$treatment->cat->foto) : 'https://ui-avatars.com/api/?name='.urlencode($treatment->cat->nama_kucing) }}" class="w-full h-full object-cover">
|
||||
<img src="{{ $treatment->cat->foto ? asset('storage/'.$treatment->cat->foto) : asset('images/default-cat.svg') }}" class="w-full h-full object-cover">
|
||||
</div>
|
||||
<h3 class="mt-4 text-xl font-black text-slate-800 uppercase tracking-tight">{{ $treatment->cat->nama_kucing }}</h3>
|
||||
<p class="text-[10px] font-bold text-slate-400 uppercase">{{ $treatment->cat->ras }} • {{ \Carbon\Carbon::parse($treatment->tanggal)->format('d F Y') }}</p>
|
||||
|
||||
@@ -70,5 +70,15 @@
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form action="{{ route('admin.users.password', $user) }}" method="POST" class="rounded-[2rem] border border-slate-200 bg-white p-6 shadow-sm">
|
||||
@csrf @method('PATCH')
|
||||
<div class="mb-4"><h3 class="text-sm font-bold text-slate-900">Ganti kata sandi langsung</h3><p class="mt-1 text-xs text-slate-500">Administrator dapat menetapkan kata sandi baru tanpa mengetahui kata sandi lama.</p></div>
|
||||
<div class="grid gap-4 md:grid-cols-2">
|
||||
<div><label class="field-label">Kata sandi baru</label><input type="password" name="password" required class="field-input rounded-xl" autocomplete="new-password"></div>
|
||||
<div><label class="field-label">Konfirmasi kata sandi</label><input type="password" name="password_confirmation" required class="field-input rounded-xl" autocomplete="new-password"></div>
|
||||
</div>
|
||||
<button class="mt-4 rounded-xl bg-slate-800 px-4 py-2.5 text-sm font-semibold text-white hover:bg-slate-900"><i class="fas fa-key mr-2"></i>Ganti kata sandi</button>
|
||||
</form>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -1,85 +1,38 @@
|
||||
<x-app-layout>
|
||||
<div class="space-y-6 pb-8">
|
||||
|
||||
{{-- SECTION 1: HEADER & TAMBAH USER --}}
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight">Manajemen User</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic">Kelola otoritas akses staf cattery.</p>
|
||||
</div>
|
||||
|
||||
{{-- PROTEKSI CREATE: Mengikuti matriks izin modul users --}}
|
||||
<div class="flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between">
|
||||
<div><h2 class="text-2xl font-bold text-slate-900">Manajemen pengguna</h2><p class="mt-1 text-sm text-slate-500">Kelola akses, status akun, WhatsApp, dan kata sandi pengguna.</p></div>
|
||||
@can('check-access', ['users', 'create'])
|
||||
<a href="{{ route('admin.users.create') }}" class="inline-flex items-center px-5 py-3 bg-indigo-600 text-white text-[10px] font-black rounded-xl shadow-lg shadow-indigo-100 hover:bg-indigo-700 transition-all active:scale-95">
|
||||
<i class="fas fa-plus mr-2"></i> TAMBAH USER
|
||||
</a>
|
||||
<a href="{{ route('admin.users.create') }}" class="rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white hover:bg-indigo-700"><i class="fas fa-user-plus mr-2"></i>Tambah pengguna</a>
|
||||
@endcan
|
||||
</div>
|
||||
|
||||
{{-- SECTION 2: TABEL USER --}}
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] overflow-hidden shadow-sm">
|
||||
<table class="w-full text-left">
|
||||
<thead class="bg-slate-50 text-[10px] font-black text-slate-400 uppercase tracking-widest border-b">
|
||||
<tr>
|
||||
<th class="px-6 py-4">Nama & Email</th>
|
||||
<th class="px-6 py-4">WhatsApp</th>
|
||||
<th class="px-6 py-4 text-center">Role</th>
|
||||
<th class="px-6 py-4 text-right">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100 font-medium text-slate-700">
|
||||
@foreach($users as $user)
|
||||
<tr class="hover:bg-slate-50/50 transition-all">
|
||||
{{-- Identitas --}}
|
||||
<td class="px-6 py-4">
|
||||
<div class="font-black text-slate-800">{{ $user->name }}</div>
|
||||
<div class="text-[10px] text-slate-400 font-bold uppercase">{{ $user->email }}</div>
|
||||
</td>
|
||||
|
||||
{{-- Kontak --}}
|
||||
<td class="px-6 py-4">
|
||||
<span class="text-xs font-bold text-slate-500">{{ $user->phone ?? '-' }}</span>
|
||||
</td>
|
||||
|
||||
{{-- Badge Role --}}
|
||||
<td class="px-6 py-4 text-center">
|
||||
<span class="px-3 py-1 rounded-xl text-[10px] font-black uppercase {{ $user->role == 'admin' ? 'bg-indigo-50 text-indigo-600 border border-indigo-100' : 'bg-slate-50 text-slate-500 border border-slate-200' }}">
|
||||
{{ $user->roleModel?->name ?? $user->role ?? '-' }}
|
||||
</span>
|
||||
</td>
|
||||
|
||||
{{-- Aksi Berbasis Izin --}}
|
||||
<td class="px-6 py-4 text-right">
|
||||
<div class="flex justify-end gap-2">
|
||||
|
||||
{{-- PROTEKSI EDIT: Mengikuti matriks izin modul users --}}
|
||||
@can('check-access', ['users', 'update'])
|
||||
<a href="{{ route('admin.users.edit', $user->id) }}" class="p-2 text-slate-400 hover:text-amber-600 hover:bg-amber-50 rounded-xl transition-all" title="Edit Profile">
|
||||
<i class="fas fa-edit text-xs"></i>
|
||||
</a>
|
||||
<div class="overflow-hidden rounded-2xl border border-slate-200 bg-white">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-slate-200 text-sm">
|
||||
<thead class="bg-slate-50 text-left text-xs font-semibold text-slate-500"><tr><th class="px-5 py-3">Pengguna</th><th class="px-5 py-3">WhatsApp</th><th class="px-5 py-3">Role</th><th class="px-5 py-3">Status</th><th class="px-5 py-3 text-right">Aksi</th></tr></thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
@forelse($users as $user)
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-5 py-4"><p class="font-semibold text-slate-900">{{ $user->name }}</p><p class="mt-0.5 text-xs text-slate-500">{{ $user->email }}</p></td>
|
||||
<td class="px-5 py-4 text-slate-600">{{ $user->phone ?: '-' }}</td>
|
||||
<td class="px-5 py-4"><span class="rounded-full border border-slate-200 bg-slate-50 px-2.5 py-1 text-xs font-semibold text-slate-600">{{ $user->roleModel?->name ?? $user->role ?? '-' }}</span></td>
|
||||
<td class="px-5 py-4">@if($user->is_active)<span class="rounded-full border border-emerald-100 bg-emerald-50 px-2.5 py-1 text-xs font-semibold text-emerald-700">Aktif</span>@else<span class="rounded-full border border-rose-100 bg-rose-50 px-2.5 py-1 text-xs font-semibold text-rose-700">Nonaktif</span>@endif</td>
|
||||
<td class="px-5 py-4"><div class="flex justify-end gap-1">
|
||||
@can('check-access',['users','update'])
|
||||
<a href="{{ route('admin.users.edit',$user) }}" class="rounded-lg p-2 text-slate-500 hover:bg-slate-100" title="Ubah"><i class="fas fa-pen"></i></a>
|
||||
<form action="{{ route('admin.users.status',$user) }}" method="POST">@csrf @method('PATCH')<button class="rounded-lg p-2 {{ $user->is_active?'text-rose-500 hover:bg-rose-50':'text-emerald-600 hover:bg-emerald-50' }}" title="{{ $user->is_active?'Nonaktifkan':'Aktifkan' }}" {{ $user->id===auth()->id() && $user->is_active ? 'disabled' : '' }}><i class="fas {{ $user->is_active?'fa-user-slash':'fa-user-check' }}"></i></button></form>
|
||||
@endcan
|
||||
|
||||
{{-- PROTEKSI DELETE: Pengecekan manual 'admin' dihapus agar permission matriks berlaku sepenuhnya --}}
|
||||
@can('check-access', ['users', 'delete'])
|
||||
<form action="{{ route('admin.users.destroy', $user->id) }}" method="POST" onsubmit="return confirm('Hapus user ini? Staf ini tidak akan bisa login lagi.')" class="inline">
|
||||
@csrf @method('DELETE')
|
||||
<button type="submit" class="p-2 text-slate-400 hover:text-rose-600 hover:bg-rose-50 rounded-xl transition-all" title="Hapus User">
|
||||
<i class="fas fa-trash-alt text-xs"></i>
|
||||
</button>
|
||||
</form>
|
||||
@can('check-access',['users','delete'])
|
||||
<form action="{{ route('admin.users.destroy',$user) }}" method="POST" onsubmit="return confirm('Hapus user ini?')">@csrf @method('DELETE')<button class="rounded-lg p-2 text-rose-500 hover:bg-rose-50" title="Hapus"><i class="fas fa-trash"></i></button></form>
|
||||
@endcan
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
{{-- PAGINATION --}}
|
||||
<div class="mt-4">
|
||||
{{ $users->links() }}
|
||||
</div></td>
|
||||
</tr>
|
||||
@empty<tr><td colspan="5" class="px-5 py-10 text-center text-slate-500">Belum ada pengguna.</td></tr>@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="border-t border-slate-200 p-4">{{ $users->links() }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
</x-app-layout>
|
||||
|
||||
@@ -10,3 +10,5 @@ Artisan::command('inspire', function () {
|
||||
|
||||
// Menjalankan perintah pembersihan log setiap hari pada jam 00:00
|
||||
Schedule::command('activity-log:clean')->daily();
|
||||
|
||||
Schedule::command('ilycats:notify')->dailyAt('08:00')->withoutOverlapping();
|
||||
|
||||
@@ -16,7 +16,7 @@ WebAuthnRoutes::register();
|
||||
Route::get('/', fn() => redirect()->route('login'));
|
||||
|
||||
// --- AUTHENTICATED ROUTES ---
|
||||
Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::middleware(['auth', 'verified', 'active.user'])->group(function () {
|
||||
|
||||
// --- 1. DASHBOARD & INSIGHTS ---
|
||||
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||
@@ -35,6 +35,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::put('/{cat}/registrations/{registration}', [CatRegistrationController::class, 'update'])->name('registrations.update');
|
||||
Route::delete('/{cat}/registrations/{registration}', [CatRegistrationController::class, 'destroy'])->name('registrations.destroy');
|
||||
Route::post('/{cat}/registrations/{registration}/documents', [CatRegistrationController::class, 'storeDocument'])->name('registrations.documents.store');
|
||||
Route::get('/{cat}/registrations/{registration}/documents/{document}/show', [CatRegistrationController::class, 'showDocument'])->name('registrations.documents.show');
|
||||
Route::get('/{cat}/registrations/{registration}/documents/{document}/download', [CatRegistrationController::class, 'downloadDocument'])->name('registrations.documents.download');
|
||||
Route::delete('/{cat}/registrations/{registration}/documents/{document}', [CatRegistrationController::class, 'destroyDocument'])->name('registrations.documents.destroy');
|
||||
|
||||
// Alias lama dipertahankan agar bookmark/view lama tidak gagal.
|
||||
@@ -57,6 +59,7 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
|
||||
// Treatment Log (Rekam Medis Klinis)
|
||||
Route::resource('treatments', TreatmentController::class);
|
||||
Route::patch('/matting/{matting}/status', [MattingController::class, 'updateStatus'])->name('matting.status');
|
||||
Route::resource('matting', MattingController::class);
|
||||
|
||||
// Complete treatment - back to healthy
|
||||
@@ -112,6 +115,8 @@ Route::middleware(['auth', 'verified'])->group(function () {
|
||||
Route::resource('roles', RoleController::class)->except(['show']);
|
||||
|
||||
// User Management
|
||||
Route::patch('/users/{user}/status', [UserController::class, 'toggleStatus'])->name('users.status');
|
||||
Route::patch('/users/{user}/password', [UserController::class, 'changePassword'])->name('users.password');
|
||||
Route::resource('users', UserController::class);
|
||||
|
||||
// Audit Trail (Activity Logs)
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['title', 'value', 'icon', 'color']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['title', 'value', 'icon', 'color']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
// Map warna untuk icon background dan text
|
||||
$colors = [
|
||||
'indigo' => 'bg-indigo-100 text-indigo-600 shadow-indigo-100',
|
||||
'emerald' => 'bg-emerald-100 text-emerald-600 shadow-emerald-100',
|
||||
'rose' => 'bg-rose-100 text-rose-600 shadow-rose-100',
|
||||
'amber' => 'bg-amber-100 text-amber-600 shadow-amber-100',
|
||||
'blue' => 'bg-blue-100 text-blue-600 shadow-blue-100',
|
||||
][$color ?? 'indigo'];
|
||||
?>
|
||||
|
||||
<div class="bg-white p-6 rounded-3xl border border-slate-200 shadow-sm hover:shadow-md transition-all duration-300">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<div class="w-12 h-12 <?php echo e($colors); ?> rounded-2xl flex items-center justify-center shadow-sm">
|
||||
<i class="fas <?php echo e($icon); ?> text-xl"></i>
|
||||
</div>
|
||||
<span class="text-[10px] font-bold text-slate-400 uppercase tracking-widest">Statistik</span>
|
||||
</div>
|
||||
|
||||
<div class="space-y-1">
|
||||
<h3 class="text-3xl font-black text-slate-800 leading-none">
|
||||
<?php echo e($value); ?>
|
||||
|
||||
</h3>
|
||||
<p class="text-xs font-bold text-slate-500 uppercase tracking-tighter">
|
||||
<?php echo e($title); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/stats-card.blade.php ENDPATH**/ ?>
|
||||
@@ -1,167 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-[1200px] mx-auto pb-16 px-6 space-y-8 font-sans antialiased tracking-tight">
|
||||
|
||||
|
||||
<div class="flex flex-col lg:flex-row items-center justify-between gap-6">
|
||||
<div class="text-center lg:text-left">
|
||||
<h2 class="text-2xl font-black text-slate-900 uppercase tracking-tighter leading-none">Lineage Arsip</h2>
|
||||
<div class="flex items-center justify-center lg:justify-start gap-2 mt-2">
|
||||
<span class="w-8 h-0.5 bg-indigo-600"></span>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-[0.2em]">Basis Data Pembiakan Resmi</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="bg-white px-5 py-3 rounded-2xl border border-slate-200 shadow-sm flex items-center gap-4">
|
||||
<div class="text-right">
|
||||
<p class="text-[8px] text-slate-400 font-black uppercase tracking-widest">Total Record</p>
|
||||
<p class="text-lg font-black text-slate-800 leading-none"><?php echo e($mattings->total()); ?></p>
|
||||
</div>
|
||||
<div class="w-10 h-10 bg-indigo-50 text-indigo-600 rounded-xl flex items-center justify-center text-sm shadow-inner">
|
||||
<i class="fas fa-database"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['matting_reports', 'create'])): ?>
|
||||
<a href="<?php echo e(request()->fullUrlWithQuery(['export' => 'pdf'])); ?>" class="bg-slate-900 px-6 py-3 rounded-2xl text-[10px] font-black text-white uppercase hover:bg-indigo-600 transition-all shadow-lg flex items-center gap-3">
|
||||
<i class="fas fa-file-pdf"></i> PDF Export
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<form action="<?php echo e(route('admin.reports.matting.index')); ?>" method="GET" class="bg-white p-4 rounded-[1.5rem] border border-slate-200 shadow-sm grid grid-cols-1 md:grid-cols-4 lg:grid-cols-6 gap-4 items-end">
|
||||
<div class="space-y-1">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Ancestry Search</label>
|
||||
<input type="text" name="parent_name" value="<?php echo e(request('parent_name')); ?>" placeholder="Sire/Dam Name..." class="w-full bg-slate-50 border-none rounded-xl text-xs font-bold py-3">
|
||||
</div>
|
||||
|
||||
<div class="space-y-1">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Breed</label>
|
||||
<select name="ras" class="w-full bg-slate-50 border-none rounded-xl text-xs font-bold py-3">
|
||||
<option value="">All Breeds</option>
|
||||
<?php $__currentLoopData = $breeds; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $breed): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($breed); ?>" <?php echo e(request('ras') == $breed ? 'selected' : ''); ?>><?php echo e($breed); ?></option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-1 lg:col-span-2">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Registry (Hold Ctrl to select multiple)</label>
|
||||
<select name="registry[]" multiple class="w-full bg-slate-50 border-none rounded-xl text-xs font-bold py-2 h-[42px] focus:h-auto transition-all">
|
||||
<?php $__currentLoopData = $registries; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $reg): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($reg); ?>" <?php echo e(is_array(request('registry')) && in_array($reg, request('registry')) ? 'selected' : ''); ?>><?php echo e($reg); ?></option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="space-y-1">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Start Date</label>
|
||||
<input type="date" name="start_date" value="<?php echo e(request('start_date')); ?>" class="w-full bg-slate-50 border-none rounded-xl text-xs font-bold py-3">
|
||||
</div>
|
||||
|
||||
<button type="submit" class="bg-indigo-600 h-[42px] text-white rounded-xl text-[10px] font-black uppercase hover:bg-slate-900 transition-all shadow-md">Apply Filter</button>
|
||||
</form>
|
||||
|
||||
|
||||
<div class="space-y-4">
|
||||
|
||||
<div class="hidden lg:grid grid-cols-12 px-10 py-1 text-[9px] font-black text-slate-400 uppercase tracking-[0.2em]">
|
||||
<div class="col-span-5">Pasangan Induk</div>
|
||||
<div class="col-span-3 text-center">Record Statistics</div>
|
||||
<div class="col-span-2 text-center">Registrar PIC</div>
|
||||
<div class="col-span-2 text-right">Akses</div>
|
||||
</div>
|
||||
|
||||
<?php $__empty_1 = true; $__currentLoopData = $mattings; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $matting): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="bg-white border border-slate-200 rounded-[2rem] p-5 hover:border-indigo-400 hover:shadow-xl hover:shadow-indigo-50/50 transition-all group relative overflow-hidden">
|
||||
<span class="absolute -right-2 -bottom-4 text-7xl font-black text-slate-50 italic group-hover:text-indigo-50/50 transition-colors select-none z-0">
|
||||
<?php echo e(substr($matting->pic->name ?? 'S', 0, 1)); ?>
|
||||
|
||||
</span>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-12 gap-6 items-center relative z-10">
|
||||
|
||||
|
||||
<div class="lg:col-span-5 flex items-center gap-6 min-w-0">
|
||||
<div class="flex -space-x-4 shrink-0">
|
||||
|
||||
<img src="<?php echo e($matting->sire && $matting->sire->foto ? asset('storage/' . $matting->sire->foto) : asset('images/default-cat.png')); ?>"
|
||||
class="w-12 h-12 rounded-[1rem] border-4 border-white shadow-md object-cover transform group-hover:-rotate-6 transition-transform">
|
||||
|
||||
<img src="<?php echo e($matting->dam && $matting->dam->foto ? asset('storage/' . $matting->dam->foto) : asset('images/default-cat.png')); ?>"
|
||||
class="w-12 h-12 rounded-[1rem] border-4 border-white shadow-md object-cover transform group-hover:rotate-6 transition-transform">
|
||||
</div>
|
||||
<div class="min-w-0 flex-1">
|
||||
<h4 class="text-sm font-black text-slate-800 uppercase truncate leading-tight mb-1">
|
||||
<?php echo e($matting->sire->nama_kucing ?? 'N/A'); ?> <span class="text-slate-300 mx-1">×</span> <?php echo e($matting->dam->nama_kucing ?? 'N/A'); ?>
|
||||
|
||||
</h4>
|
||||
<div class="flex items-center gap-3">
|
||||
<span class="text-[8px] font-black text-indigo-600 bg-indigo-50 px-2 py-0.5 rounded tracking-widest leading-none">#<?php echo e($matting->id); ?></span>
|
||||
<span class="text-[10px] text-slate-400 font-bold uppercase tracking-tighter leading-none"><?php echo e($matting->registry ?? 'No Registry'); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="lg:col-span-3 flex items-center justify-around border-y lg:border-y-0 lg:border-x border-slate-100 py-3 lg:py-0 px-4">
|
||||
<div class="text-center">
|
||||
<p class="text-[8px] text-slate-400 font-black uppercase mb-1 tracking-widest">Offspring</p>
|
||||
<p class="text-[13px] font-black text-slate-800 leading-none"><?php echo e($matting->kittens_count); ?> <span class="text-[10px] text-slate-300 font-bold uppercase ml-0.5">Paws</span></p>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<p class="text-[8px] text-slate-400 font-black uppercase mb-1 tracking-widest">Date</p>
|
||||
<p class="text-[11px] font-black text-slate-800 leading-none"><?php echo e($matting->tgl_kawin_awal->format('d/m/Y')); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="lg:col-span-2 flex flex-col items-center lg:items-start px-4 min-w-0">
|
||||
<p class="text-[8px] text-slate-400 font-black uppercase mb-1.5 tracking-widest">Registrar</p>
|
||||
<p class="text-[11px] font-bold text-slate-600 uppercase italic truncate w-full text-center lg:text-left tracking-tight">
|
||||
<?php echo e($matting->pic->name ?? 'Sistem Admin'); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="lg:col-span-2 flex justify-end shrink-0">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['matting_reports', 'read'])): ?>
|
||||
<a href="<?php echo e(route('admin.reports.matting.show', $matting->id)); ?>" class="w-full lg:w-auto px-6 py-3 bg-slate-900 text-white text-[10px] font-black uppercase rounded-2xl hover:bg-indigo-600 transition-all shadow-md flex items-center justify-center gap-2 group-hover:scale-105">
|
||||
<i class="fas fa-certificate"></i> View Record
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="pt-8 flex justify-center">
|
||||
<?php echo e($mattings->links()); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/reports/matting/index.blade.php ENDPATH**/ ?>
|
||||
@@ -1,2 +0,0 @@
|
||||
<a <?php echo e($attributes->merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 transition duration-150 ease-in-out'])); ?>><?php echo e($slot); ?></a>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/dropdown-link.blade.php ENDPATH**/ ?>
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" <?php echo e($attributes); ?>>
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/check.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 400 B |
@@ -1,190 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
|
||||
<div class="max-w-[1100px] mx-auto pb-12 px-6 space-y-8 font-sans antialiased tracking-tight">
|
||||
|
||||
|
||||
<div class="flex items-center justify-between bg-white px-6 py-4 rounded-2xl border border-slate-200/60 shadow-sm">
|
||||
<div class="flex items-center gap-5">
|
||||
|
||||
<a href="<?php echo e(route('admin.reports.matting.index')); ?>" class="w-10 h-10 flex items-center justify-center text-slate-400 hover:text-slate-900 transition-all bg-slate-50 rounded-xl border border-slate-100">
|
||||
<i class="fas fa-chevron-left text-xs"></i>
|
||||
</a>
|
||||
<div class="h-8 w-px bg-slate-100"></div>
|
||||
<div>
|
||||
<h2 class="text-[14px] font-black text-slate-800 uppercase tracking-tighter leading-none">Lineage Archive</h2>
|
||||
<p class="text-[8px] text-slate-400 font-bold uppercase tracking-[0.3em] mt-1.5 italic">Official Record #<?php echo e($matting->id); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex items-center gap-5 border-l border-slate-100 pl-6">
|
||||
<div class="text-right leading-none">
|
||||
<p class="text-[8px] text-slate-400 font-black uppercase mb-1 tracking-tighter">Registrar</p>
|
||||
<p class="text-[10px] font-bold text-slate-600 uppercase italic"><?php echo e($matting->pic->name ?? 'Admin'); ?></p>
|
||||
</div>
|
||||
<span class="text-slate-950 font-black text-4xl italic leading-none select-none tracking-tighter opacity-20">
|
||||
<?php echo e(substr($matting->pic->name ?? 'S', 0, 1)); ?>.
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<?php $__currentLoopData = [
|
||||
['role' => 'Sire (Pejantan)', 'cat' => $matting->sire, 'theme' => 'indigo', 'icon' => 'fa-mars'],
|
||||
['role' => 'Dam (Indukan)', 'cat' => $matting->dam, 'theme' => 'rose', 'icon' => 'fa-venus']
|
||||
]; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $p): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="bg-white border border-slate-200/70 rounded-[2rem] p-6 flex items-center gap-8 shadow-sm group overflow-hidden relative">
|
||||
|
||||
<div class="shrink-0 relative z-10">
|
||||
<img src="<?php echo e($p['cat']->photo ? asset('storage/' . $p['cat']->photo) : asset('images/default-cat.png')); ?>"
|
||||
class="w-20 h-20 object-cover rounded-2xl border-2 border-white shadow-md transition-transform duration-700 group-hover:scale-110" alt="Parent">
|
||||
<span class="absolute -top-2 -left-2 w-7 h-7 bg-<?php echo e($p['theme']); ?>-600 text-white rounded-xl flex items-center justify-center text-[10px] shadow-lg border-2 border-white">
|
||||
<i class="fas <?php echo e($p['icon']); ?>"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-0 z-10">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<span class="text-[9px] font-black text-<?php echo e($p['theme']); ?>-600 uppercase tracking-widest"><?php echo e($p['role']); ?></span>
|
||||
<span class="text-[8px] font-black bg-slate-900 text-white px-2 py-0.5 rounded-md uppercase">EMS: <?php echo e($p['cat']->kode_ems ?? '-'); ?></span>
|
||||
</div>
|
||||
<h3 class="text-base font-black text-slate-800 uppercase truncate mb-4 tracking-tight leading-none"><?php echo e($p['cat']->nama_kucing); ?></h3>
|
||||
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-4 border-t border-slate-50 pt-4 mt-1">
|
||||
<div class="min-w-0">
|
||||
<p class="text-[8px] text-slate-400 font-bold uppercase mb-1.5 tracking-wider">Pedigree</p>
|
||||
<p class="text-[10px] font-mono font-bold text-slate-700 truncate tracking-tighter italic leading-none">
|
||||
<?php echo e($p['cat']->pedigree ?? '-'); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div class="min-w-0">
|
||||
<p class="text-[8px] text-slate-400 font-bold uppercase mb-1.5 tracking-wider">Microchip</p>
|
||||
<p class="text-[10px] font-mono font-bold text-slate-700 truncate tracking-tighter italic leading-none">
|
||||
<?php echo e($p['cat']->microchip ?? '-'); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-center py-14">
|
||||
|
||||
<div class="bg-slate-900 text-white w-full max-w-[1000px] py-5 rounded-full flex items-center justify-between px-72 shadow-[0_30px_60px_-15px_rgba(0,0,0,0.6)] border border-slate-800/60 mx-auto group relative">
|
||||
|
||||
|
||||
<div class="text-center shrink-0">
|
||||
|
||||
<p class="text-[4.5px] text-slate-500 font-black uppercase mb-1.5 tracking-[0.6em] leading-none opacity-80">Started</p>
|
||||
|
||||
<span class="text-[7.5px] font-black text-slate-100 tracking-tighter leading-none whitespace-nowrap">
|
||||
<?php echo e($matting->tgl_kawin_awal->format('d / m / Y')); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex flex-col items-center flex-1 px-10">
|
||||
<i class="fas fa-heart text-rose-500 text-[7px] mb-2 animate-pulse"></i>
|
||||
<div class="flex items-center w-full max-w-[140px] gap-4">
|
||||
<div class="h-[0.5px] flex-1 bg-slate-800"></div>
|
||||
|
||||
<span class="text-[6px] font-black uppercase text-indigo-400/80 tracking-[0.2em] italic leading-none whitespace-nowrap">
|
||||
<?php echo e($matting->tgl_kawin_awal->diffInDays($matting->tgl_kawin_akhir) + 1); ?> Days Process
|
||||
</span>
|
||||
<div class="h-[0.5px] flex-1 bg-slate-800"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="text-center shrink-0">
|
||||
<p class="text-[4.5px] text-slate-500 font-black uppercase mb-1.5 tracking-[0.6em] leading-none opacity-80">Finished</p>
|
||||
<span class="text-[7.5px] font-black text-slate-100 tracking-tighter leading-none whitespace-nowrap">
|
||||
<?php echo e($matting->tgl_kawin_akhir->format('d / m / Y')); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="flex items-center gap-4 px-2">
|
||||
<div class="h-4 w-1 bg-indigo-500 rounded-full"></div>
|
||||
<h3 class="text-[11px] font-black text-slate-400 uppercase tracking-[0.3em]">Offspring Records (<?php echo e($matting->kittens->count()); ?>)</h3>
|
||||
<div class="h-px flex-1 bg-slate-100"></div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $matting->kittens; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $k): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="bg-white border border-slate-200/70 rounded-[2rem] p-6 flex items-center gap-8 shadow-sm hover:border-indigo-100 transition-all group overflow-hidden">
|
||||
|
||||
<div class="shrink-0 relative">
|
||||
<img src="<?php echo e($k->cat->photo ? asset('storage/' . $k->cat->photo) : asset('images/default-cat.png')); ?>"
|
||||
class="w-20 h-20 object-cover rounded-2xl border border-slate-50 shadow-md group-hover:scale-105 transition-transform duration-500" alt="Kitten">
|
||||
<span class="absolute -top-2 -left-2 w-7 h-7 rounded-xl flex items-center justify-center text-[10px] <?php echo e($k->cat->jenis_kelamin == 'Jantan' ? 'bg-blue-600' : 'bg-rose-500'); ?> text-white border-2 border-white shadow-lg">
|
||||
<i class="fas <?php echo e($k->cat->jenis_kelamin == 'Jantan' ? 'fa-mars' : 'fa-venus'); ?>"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 min-w-0">
|
||||
<div class="flex items-center justify-between mb-2">
|
||||
<span class="text-[9px] font-black text-slate-400 uppercase tracking-widest leading-none">Kitten Profile</span>
|
||||
<span class="text-[8px] font-bold bg-slate-50 text-slate-400 px-2 py-0.5 rounded border border-slate-100 uppercase tracking-tighter leading-none">EMS: <?php echo e($k->cat->kode_ems ?? '-'); ?></span>
|
||||
</div>
|
||||
|
||||
<h4 class="text-base font-black text-slate-800 uppercase truncate leading-tight group-hover:text-indigo-600 transition-colors tracking-tight leading-none mb-4"><?php echo e($k->cat->nama_kucing); ?></h4>
|
||||
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-4 border-t border-slate-50 pt-4 mt-1">
|
||||
<div class="min-w-0">
|
||||
<p class="text-[8px] text-slate-400 font-bold uppercase leading-none mb-1.5 tracking-wider">Pedigree</p>
|
||||
<p class="text-[10px] font-mono font-bold text-slate-700 truncate italic tracking-tighter leading-none">
|
||||
<?php echo e($k->cat->pedigree ?? '-'); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
<div class="min-w-0">
|
||||
<p class="text-[8px] text-slate-400 font-bold uppercase leading-none mb-1.5 tracking-wider">Microchip</p>
|
||||
<p class="text-[10px] font-mono font-bold text-slate-700 truncate italic tracking-tighter leading-none">
|
||||
<?php echo e($k->cat->microchip ?? '-'); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<div class="col-span-full py-16 text-center bg-white rounded-[2.5rem] border border-dashed border-slate-200">
|
||||
<i class="fas fa-paw text-2xl text-slate-100 mb-4"></i>
|
||||
<p class="text-slate-400 font-bold uppercase text-[9px] tracking-[0.3em] italic">No offspring registered for this session.</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/reports/matting/show.blade.php ENDPATH**/ ?>
|
||||
@@ -1,35 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['value']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['value']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<label <?php echo e($attributes->merge(['class' => 'block font-medium text-sm text-gray-700'])); ?>>
|
||||
<?php echo e($value ?? $slot); ?>
|
||||
|
||||
</label>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/input-label.blade.php ENDPATH**/ ?>
|
||||
@@ -1,353 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-[1600px] mx-auto space-y-8 pb-12">
|
||||
|
||||
<div class="flex items-center gap-4 px-2">
|
||||
<a href="<?php echo e(route('cats.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-3xl font-black text-slate-800 tracking-tight leading-none">Bulk Treatment Manager</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic uppercase tracking-widest mt-1">Manajemen Tindakan Medis Masal • Ily Cattery</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="<?php echo e(route('medical-records.bulk.store')); ?>" method="POST">
|
||||
<?php echo csrf_field(); ?>
|
||||
<div class="grid grid-cols-1 xl:grid-cols-12 gap-8 px-2">
|
||||
|
||||
|
||||
<div class="lg:col-span-5 space-y-6">
|
||||
<div x-data="catSelector()" class="bg-white border border-slate-200 rounded-[3rem] p-8 shadow-sm h-full flex flex-col relative overflow-hidden">
|
||||
|
||||
<div class="flex items-center justify-between mb-6">
|
||||
<div class="flex items-center gap-3">
|
||||
<h4 class="font-black text-slate-800 uppercase tracking-tighter text-lg">Pilih Kucing</h4>
|
||||
<div x-show="selectedCount > 0" x-transition x-cloak class="flex items-center">
|
||||
<span class="bg-indigo-100 text-indigo-700 text-[10px] font-black px-2.5 py-1 rounded-lg uppercase tracking-widest border border-indigo-200 shadow-sm">
|
||||
<span x-text="selectedCount"></span> Terpilih
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-2">
|
||||
<input type="checkbox" id="select_all" x-model="selectAll" @change="toggleAll()" class="w-4 h-4 text-indigo-600 border-slate-300 rounded focus:ring-indigo-500 cursor-pointer">
|
||||
<label for="select_all" class="text-[10px] font-black text-slate-400 uppercase tracking-widest cursor-pointer hover:text-indigo-600 transition-colors">Pilih Semua</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="relative mb-6">
|
||||
<i class="fas fa-search absolute left-4 top-1/2 -translate-y-1/2 text-slate-400 text-xs"></i>
|
||||
<input type="text" x-model="search" @input="resetPage()" placeholder="Cari nama atau kode kucing..." class="w-full pl-11 pr-4 py-3.5 bg-slate-50 border border-slate-200 rounded-2xl text-xs font-bold focus:ring-4 focus:ring-indigo-500/10 outline-none transition-all placeholder:text-slate-400">
|
||||
</div>
|
||||
|
||||
|
||||
<div class="flex-1 overflow-y-auto custom-scrollbar pr-2 space-y-3" style="max-height: 450px;">
|
||||
<template x-for="cat in paginatedCats" :key="cat.id">
|
||||
<label class="flex items-center gap-4 p-4 rounded-3xl border transition-all cursor-pointer group"
|
||||
:class="selectedCats.includes(cat.id.toString()) ? 'border-indigo-400 bg-indigo-50/80 ring-1 ring-indigo-400 shadow-md' : 'border-slate-100 bg-slate-50/50 hover:bg-indigo-50 hover:border-indigo-100'">
|
||||
|
||||
<input type="checkbox" name="cat_ids[]" :value="cat.id" x-model="selectedCats" @change="updateSelectAll()" class="cat-checkbox w-5 h-5 text-indigo-600 border-slate-300 rounded-lg focus:ring-indigo-500 transition-all cursor-pointer">
|
||||
|
||||
<div class="w-12 h-12 rounded-2xl overflow-hidden border-2 shadow-sm shrink-0" :class="selectedCats.includes(cat.id.toString()) ? 'border-indigo-200' : 'border-white'">
|
||||
<img :src="cat.foto_url" class="w-full h-full object-cover">
|
||||
</div>
|
||||
|
||||
<div class="min-w-0 flex-1">
|
||||
<p class="text-sm font-black uppercase truncate leading-none mb-1 transition-colors" :class="selectedCats.includes(cat.id.toString()) ? 'text-indigo-900' : 'text-slate-800'" x-text="cat.nama_kucing"></p>
|
||||
<span class="text-[8px] font-black text-slate-400 uppercase tracking-widest" x-text="`${cat.ras} • ${cat.lokasi_kandang || 'Global'}`"></span>
|
||||
</div>
|
||||
|
||||
<div class="text-right">
|
||||
<span class="px-2 py-1 bg-white border border-slate-100 rounded-lg text-[8px] font-black text-slate-400 uppercase" x-text="`#${cat.id}`"></span>
|
||||
</div>
|
||||
</label>
|
||||
</template>
|
||||
|
||||
<div x-show="paginatedCats.length === 0" x-cloak class="py-10 text-center text-slate-400">
|
||||
<i class="fas fa-folder-open text-3xl mb-3 opacity-50"></i>
|
||||
<p class="text-xs font-bold uppercase tracking-widest">Tidak ada kucing ditemukan</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mt-6 pt-4 border-t border-slate-100 flex items-center justify-between" x-show="totalPages > 1" x-cloak>
|
||||
<button type="button" @click="prevPage()" :disabled="currentPage === 1" class="p-2 bg-slate-50 text-slate-400 rounded-xl hover:bg-indigo-50 hover:text-indigo-600 disabled:opacity-50 disabled:cursor-not-allowed transition-all">
|
||||
<i class="fas fa-chevron-left text-xs"></i>
|
||||
</button>
|
||||
|
||||
<span class="text-[10px] font-black text-slate-400 uppercase tracking-widest">
|
||||
Halaman <span class="text-indigo-600" x-text="currentPage"></span> dari <span x-text="totalPages"></span>
|
||||
</span>
|
||||
|
||||
<button type="button" @click="nextPage()" :disabled="currentPage === totalPages" class="p-2 bg-slate-50 text-slate-400 rounded-xl hover:bg-indigo-50 hover:text-indigo-600 disabled:opacity-50 disabled:cursor-not-allowed transition-all">
|
||||
<i class="fas fa-chevron-right text-xs"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="lg:col-span-7 space-y-6">
|
||||
<div class="bg-indigo-600 rounded-[3rem] p-10 text-white shadow-xl shadow-indigo-100 relative overflow-hidden h-full flex flex-col justify-between">
|
||||
<div class="relative z-10 space-y-8">
|
||||
<div>
|
||||
<h3 class="text-2xl font-black uppercase tracking-tight">Treatment Configuration</h3>
|
||||
<p class="text-indigo-100 text-xs font-bold italic tracking-tighter uppercase">Terapkan tindakan & potong stok otomatis</p>
|
||||
</div>
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-indigo-200 uppercase ml-1 tracking-widest">Jenis Tindakan</label>
|
||||
<select name="type" id="type_selector" onchange="adjustBulkForm()" required class="w-full px-5 py-4 bg-white/10 border border-white/20 rounded-2xl text-xs font-black text-white focus:ring-4 focus:ring-white/10 outline-none appearance-none cursor-pointer">
|
||||
<option value="Vaccine" class="text-slate-800">Vaksinasi</option>
|
||||
<option value="Deworming" class="text-slate-800">Obat Cacing</option>
|
||||
<option value="Flea Treatment" class="text-slate-800">Obat Kutu</option>
|
||||
<option value="Grooming" class="text-slate-800">Grooming (Tanpa Obat)</option>
|
||||
<option value="Medical Checkup" class="text-slate-800">Medical Checkup (Multi-Obat)</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-indigo-200 uppercase ml-1 tracking-widest">Tanggal Pemberian</label>
|
||||
<input type="date" name="date_given" value="<?php echo e(date('Y-m-d')); ?>" required class="w-full px-5 py-4 bg-white/10 border border-white/20 rounded-2xl text-xs font-black text-white">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="medicine_container" class="space-y-4">
|
||||
<div class="medicine-row grid grid-cols-1 md:grid-cols-7 gap-4 p-6 bg-white/5 rounded-[2.5rem] border border-white/10 relative">
|
||||
<div class="md:col-span-3 space-y-2">
|
||||
<label class="text-[9px] font-black text-indigo-200 uppercase">Nama Produk</label>
|
||||
|
||||
<select name="medicines[0][name]" onchange="updateMedicineDetails(this)" required class="medicine-name-input w-full px-4 py-3 bg-white text-slate-800 border-none rounded-xl text-xs font-black cursor-pointer focus:ring-4 focus:ring-indigo-500/30 outline-none">
|
||||
<option value="" disabled selected>-- Pilih Obat / Vitamin --</option>
|
||||
<?php $__currentLoopData = $availableMedicines; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $med): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($med->nama_obat); ?>"><?php echo e($med->nama_obat); ?> (Sisa: <?php echo e((float)$med->qty); ?> <?php echo e($med->unit); ?>)</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="md:col-span-2 space-y-2">
|
||||
<label class="text-[9px] font-black text-indigo-200 uppercase">Dosis (Per Kucing)</label>
|
||||
|
||||
<input type="text" name="medicines[0][dosage]" placeholder="Cth: 1 atau 1/2" required class="dosage-input w-full px-4 py-3 bg-white text-slate-800 border-none rounded-xl text-xs font-black">
|
||||
</div>
|
||||
<div class="md:col-span-2 space-y-2">
|
||||
<label class="text-[9px] font-black text-indigo-200 uppercase">Satuan</label>
|
||||
<input type="text" name="medicines[0][unit]" placeholder="-" readonly class="unit-display w-full px-4 py-3 bg-indigo-500/30 text-indigo-100 border border-white/10 rounded-xl text-[10px] font-black uppercase">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="button" id="add_med_btn" onclick="addBulkMedicineRow()" class="hidden items-center gap-2 text-[10px] font-black text-white uppercase tracking-widest hover:text-indigo-200 transition-all cursor-pointer">
|
||||
<i class="fas fa-plus-circle"></i> Tambah Obat Lain
|
||||
</button>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-indigo-200 uppercase ml-1 tracking-widest">Rencana Selanjutnya</label>
|
||||
<input type="date" name="next_schedule" class="w-full px-5 py-4 bg-white/10 border border-white/20 rounded-2xl text-xs font-black text-white">
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-indigo-200 uppercase ml-1 tracking-widest">Catatan (Notes)</label>
|
||||
<textarea name="notes" placeholder="Berlaku untuk semua kucing yang dipilih..." class="w-full px-5 py-4 bg-white/10 border border-white/20 rounded-2xl text-xs font-black text-white h-14 outline-none focus:ring-4 focus:ring-white/10"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="relative z-10 mt-8">
|
||||
<button type="submit" class="w-full py-6 bg-white text-indigo-600 font-black rounded-[2rem] text-xs uppercase tracking-[0.4em] shadow-2xl hover:scale-[1.02] transition-all active:scale-95">
|
||||
APPLY TO SELECTED CATS
|
||||
</button>
|
||||
</div>
|
||||
<i class="fas fa-heartbeat absolute -bottom-10 -left-10 text-[15rem] text-white/5"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<?php
|
||||
// Mengolah data kucing agar aman untuk dibaca oleh AlpineJS
|
||||
$catData = $cats->map(function($cat) {
|
||||
return [
|
||||
'id' => $cat->id,
|
||||
'nama_kucing' => $cat->nama_kucing,
|
||||
'ras' => $cat->ras,
|
||||
'lokasi_kandang' => $cat->lokasi_kandang,
|
||||
'foto_url' => $cat->foto_url
|
||||
];
|
||||
})->values()->toArray();
|
||||
?>
|
||||
|
||||
<script>
|
||||
// Data Global untuk Javascript
|
||||
const allCatsData = <?php echo json_encode($catData, 15, 512) ?>;
|
||||
const availableMeds = <?php echo json_encode($availableMedicines, 15, 512) ?>;
|
||||
|
||||
// ALPINE JS COMPONENT: Penanganan Pilih Kucing & Pagination
|
||||
document.addEventListener('alpine:init', () => {
|
||||
Alpine.data('catSelector', () => ({
|
||||
search: '',
|
||||
currentPage: 1,
|
||||
itemsPerPage: 10,
|
||||
selectedCats: [],
|
||||
selectAll: false,
|
||||
allCats: allCatsData,
|
||||
|
||||
get filteredCats() {
|
||||
if (this.search === '') return this.allCats;
|
||||
const term = this.search.toLowerCase();
|
||||
return this.allCats.filter(cat =>
|
||||
cat.nama_kucing.toLowerCase().includes(term) ||
|
||||
(cat.lokasi_kandang && cat.lokasi_kandang.toLowerCase().includes(term))
|
||||
);
|
||||
},
|
||||
|
||||
get totalPages() { return Math.ceil(this.filteredCats.length / this.itemsPerPage) || 1; },
|
||||
|
||||
get paginatedCats() {
|
||||
const start = (this.currentPage - 1) * this.itemsPerPage;
|
||||
return this.filteredCats.slice(start, start + this.itemsPerPage);
|
||||
},
|
||||
|
||||
get selectedCount() { return this.selectedCats.length; },
|
||||
|
||||
nextPage() { if (this.currentPage < this.totalPages) this.currentPage++; },
|
||||
prevPage() { if (this.currentPage > 1) this.currentPage--; },
|
||||
|
||||
resetPage() {
|
||||
this.currentPage = 1;
|
||||
this.updateSelectAll();
|
||||
},
|
||||
|
||||
toggleAll() {
|
||||
if (this.selectAll) {
|
||||
const currentVisibleIds = this.filteredCats.map(c => c.id.toString());
|
||||
currentVisibleIds.forEach(id => {
|
||||
if (!this.selectedCats.includes(id)) { this.selectedCats.push(id); }
|
||||
});
|
||||
} else {
|
||||
const currentVisibleIds = this.filteredCats.map(c => c.id.toString());
|
||||
this.selectedCats = this.selectedCats.filter(id => !currentVisibleIds.includes(id));
|
||||
}
|
||||
},
|
||||
|
||||
updateSelectAll() {
|
||||
if (this.filteredCats.length === 0) {
|
||||
this.selectAll = false;
|
||||
return;
|
||||
}
|
||||
const currentVisibleIds = this.filteredCats.map(c => c.id.toString());
|
||||
this.selectAll = currentVisibleIds.every(id => this.selectedCats.includes(id));
|
||||
}
|
||||
}));
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// LOGIKA FORM OBAT (AUTO-READ SATUAN DARI DATABASE)
|
||||
// ---------------------------------------------------------
|
||||
let medRowCount = 1;
|
||||
|
||||
// HTML untuk opsi select baru (Tambah Obat Lain)
|
||||
const medOptionsHtml = `<option value="" disabled selected>-- Pilih Obat / Vitamin --</option>` +
|
||||
availableMeds.map(med => `<option value="${med.nama_obat}">${med.nama_obat} (Sisa: ${parseFloat(med.qty)} ${med.unit})</option>`).join('');
|
||||
|
||||
// 1. FUNGSI MENARIK SATUAN OTOMATIS SAAT OBAT DIPILIH
|
||||
function updateMedicineDetails(selectElement) {
|
||||
const row = selectElement.closest('.medicine-row');
|
||||
const unitInput = row.querySelector('.unit-display');
|
||||
|
||||
const selectedName = selectElement.value;
|
||||
// Cari data obat dari array database
|
||||
const medicine = availableMeds.find(m => m.nama_obat === selectedName);
|
||||
|
||||
if (medicine) {
|
||||
// Tuliskan langsung satuannya (Misal: Botol, ML, PCS)
|
||||
unitInput.value = medicine.unit;
|
||||
} else {
|
||||
unitInput.value = '-';
|
||||
}
|
||||
}
|
||||
|
||||
// 2. FUNGSI TAMPIL / SEMBUNYI FORM
|
||||
function adjustBulkForm() {
|
||||
const type = document.getElementById('type_selector').value;
|
||||
const container = document.getElementById('medicine_container');
|
||||
const addBtn = document.getElementById('add_med_btn');
|
||||
const medInputs = document.querySelectorAll('.medicine-name-input');
|
||||
|
||||
container.classList.remove('hidden');
|
||||
addBtn.classList.add('hidden');
|
||||
|
||||
if (type === 'Grooming') {
|
||||
container.classList.add('hidden');
|
||||
medInputs.forEach(i => i.required = false);
|
||||
} else {
|
||||
container.classList.remove('hidden');
|
||||
medInputs.forEach(i => i.required = true);
|
||||
|
||||
if (type === 'Medical Checkup') {
|
||||
addBtn.classList.remove('hidden');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateBulkUnits(val) {
|
||||
document.querySelectorAll('.unit-display').forEach(u => u.value = val);
|
||||
}
|
||||
|
||||
// 3. FUNGSI TAMBAH BARIS OBAT BARU
|
||||
function addBulkMedicineRow() {
|
||||
const container = document.getElementById('medicine_container');
|
||||
const row = document.createElement('div');
|
||||
row.className = 'medicine-row grid grid-cols-1 md:grid-cols-7 gap-4 p-6 bg-white/10 rounded-[2.5rem] border border-white/5 mt-4 relative';
|
||||
row.innerHTML = `
|
||||
<div class="md:col-span-3 space-y-2">
|
||||
<select name="medicines[${medRowCount}][name]" onchange="updateMedicineDetails(this)" required class="medicine-name-input w-full px-4 py-3 bg-white text-slate-800 border-none rounded-xl text-xs font-black cursor-pointer focus:ring-4 focus:ring-indigo-500/30 outline-none">
|
||||
${medOptionsHtml}
|
||||
</select>
|
||||
</div>
|
||||
<div class="md:col-span-2 space-y-2">
|
||||
<input type="text" name="medicines[${medRowCount}][dosage]" placeholder="Cth: 1 atau 1/2" required class="w-full px-4 py-3 bg-white text-slate-800 border-none rounded-xl text-xs font-black">
|
||||
</div>
|
||||
<div class="md:col-span-2 flex items-center gap-2">
|
||||
<input type="text" name="medicines[${medRowCount}][unit]" placeholder="-" value="" readonly class="unit-display w-full px-4 py-3 bg-indigo-500/30 text-indigo-100 border border-white/10 rounded-xl text-[10px] font-black uppercase">
|
||||
<button type="button" onclick="this.parentElement.parentElement.remove()" class="text-white hover:text-rose-200 transition-colors"><i class="fas fa-times-circle text-lg"></i></button>
|
||||
</div>
|
||||
`;
|
||||
container.appendChild(row);
|
||||
medRowCount++;
|
||||
}
|
||||
|
||||
// Saat halaman pertama kali dimuat
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
adjustBulkForm();
|
||||
// Kosongkan semua satuan default bawaan browser jika ada
|
||||
document.querySelectorAll('.unit-display').forEach(u => u.value = '');
|
||||
});
|
||||
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/cats/medical-bulk.blade.php ENDPATH**/ ?>
|
||||
@@ -1,137 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-4xl mx-auto py-12 px-4">
|
||||
|
||||
<div class="flex items-center gap-6 mb-10">
|
||||
<a href="<?php echo e(route('cats.show', $cat->id)); ?>" class="p-4 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 uppercase tracking-tight">Pedigree Management</h2>
|
||||
<p class="text-sm text-slate-400 font-bold uppercase tracking-widest">Digital Archive for: <?php echo e($cat->nama_kucing); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
|
||||
|
||||
<div class="md:col-span-1 space-y-6">
|
||||
<div class="bg-white rounded-[2.5rem] shadow-xl border border-slate-100 p-8">
|
||||
<div class="w-12 h-12 bg-indigo-50 text-indigo-600 rounded-2xl flex items-center justify-center mb-6">
|
||||
<i class="fas fa-cloud-upload-alt text-xl"></i>
|
||||
</div>
|
||||
<h3 class="text-lg font-black text-slate-800 uppercase tracking-tight mb-2">Upload Sertifikat</h3>
|
||||
<p class="text-xs text-slate-400 font-medium mb-8">Format didukung: JPG, PNG, atau PDF. Max 2MB.</p>
|
||||
|
||||
<form action="<?php echo e(route('cats.upload-pedigree', $cat->id)); ?>" method="POST" enctype="multipart/form-data" class="space-y-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<div class="relative group">
|
||||
<input type="file" name="sertifikat_ped_file" required accept=".pdf,.jpg,.jpeg,.png" class="absolute inset-0 w-full h-full opacity-0 cursor-pointer z-10">
|
||||
<div class="w-full p-8 border-2 border-dashed border-slate-200 rounded-3xl bg-slate-50 text-center group-hover:border-indigo-400 group-hover:bg-indigo-50 transition-all">
|
||||
<i class="fas fa-file-import text-3xl text-slate-300 group-hover:text-indigo-400 mb-4 transition-colors"></i>
|
||||
<p class="text-xs font-black text-slate-600 uppercase tracking-widest">Pilih File</p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="w-full py-4 bg-indigo-600 text-white rounded-2xl font-black uppercase text-[10px] tracking-widest shadow-lg shadow-indigo-200 hover:bg-indigo-700 transition-all">
|
||||
Simpan Ke Arsip
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="md:col-span-2">
|
||||
<div class="bg-white rounded-[2.5rem] shadow-xl border border-slate-100 p-8 h-full flex flex-col">
|
||||
<div class="flex justify-between items-center border-b border-slate-100 pb-6 mb-6">
|
||||
<h3 class="text-lg font-black text-slate-800 uppercase tracking-tight">Current Certificate</h3>
|
||||
<?php if($cat->sertifikat_ped_file): ?>
|
||||
<a href="<?php echo e(asset('storage/' . $cat->sertifikat_ped_file)); ?>" download class="px-5 py-2.5 bg-emerald-50 text-emerald-600 rounded-xl font-black text-[10px] uppercase tracking-widest hover:bg-emerald-600 hover:text-white transition-colors shadow-sm">
|
||||
<i class="fas fa-download mr-2"></i> Download
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="flex-1 bg-slate-50 rounded-[2rem] overflow-hidden flex items-center justify-center min-h-[500px] border border-slate-100 p-2 relative">
|
||||
<?php if($cat->sertifikat_ped_file): ?>
|
||||
<?php
|
||||
$extension = pathinfo($cat->sertifikat_ped_file, PATHINFO_EXTENSION);
|
||||
$isPdf = strtolower($extension) === 'pdf';
|
||||
$filePath = asset('storage/' . $cat->sertifikat_ped_file);
|
||||
?>
|
||||
|
||||
<?php if($isPdf): ?>
|
||||
<iframe src="<?php echo e($filePath); ?>" class="w-full h-[600px] rounded-3xl" frameborder="0"></iframe>
|
||||
<?php else: ?>
|
||||
|
||||
<div id="zoom-container" class="w-full h-full relative overflow-hidden rounded-3xl cursor-crosshair flex items-center justify-center">
|
||||
<img id="zoom-image" src="<?php echo e($filePath); ?>" class="w-full h-full object-contain transition-transform duration-200 ease-out origin-center">
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
<div class="text-center text-slate-400">
|
||||
<i class="fas fa-folder-open text-6xl mb-4 opacity-50"></i>
|
||||
<p class="text-xs font-black uppercase tracking-widest">Belum ada sertifikat</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if($cat->sertifikat_ped_file && !$isPdf): ?>
|
||||
<p class="text-center mt-4 text-[10px] font-bold text-slate-400 uppercase tracking-widest italic">
|
||||
* Arahkan kursor & geser pada gambar untuk memperbesar (Zoom)
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const container = document.getElementById('zoom-container');
|
||||
const img = document.getElementById('zoom-image');
|
||||
|
||||
if (container && img) {
|
||||
// Saat mouse bergerak di dalam kotak gambar
|
||||
container.addEventListener('mousemove', function(e) {
|
||||
const rect = container.getBoundingClientRect();
|
||||
// Hitung posisi X dan Y kursor dalam persentase
|
||||
const x = ((e.clientX - rect.left) / rect.width) * 100;
|
||||
const y = ((e.clientY - rect.top) / rect.height) * 100;
|
||||
|
||||
// Pindahkan titik pusat zoom mengikuti kursor
|
||||
img.style.transformOrigin = `${x}% ${y}%`;
|
||||
// Perbesar gambar 2.5x lipat
|
||||
img.style.transform = 'scale(2.5)';
|
||||
});
|
||||
|
||||
// Saat mouse keluar dari kotak gambar
|
||||
container.addEventListener('mouseleave', function() {
|
||||
// Kembalikan ke ukuran dan posisi semula secara halus
|
||||
img.style.transformOrigin = 'center center';
|
||||
img.style.transform = 'scale(1)';
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/cats/pedigree.blade.php ENDPATH**/ ?>
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['body']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['body']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<div class="flex flex-col gap-3">
|
||||
<h2 class="text-lg font-semibold">Body</h2>
|
||||
<?php if($body): ?>
|
||||
<div class="bg-white dark:bg-white/[2%] border border-neutral-200 dark:border-neutral-800 rounded-md overflow-x-auto p-5 text-sm font-mono shadow-xs">
|
||||
<?php if (isset($component)) { $__componentOriginal12cb286571f553eebcbe98210b217f94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal12cb286571f553eebcbe98210b217f94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.syntax-highlight','data' => ['code' => $body,'language' => 'json']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::syntax-highlight'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['code' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($body),'language' => 'json']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal12cb286571f553eebcbe98210b217f94)): ?>
|
||||
<?php $attributes = $__attributesOriginal12cb286571f553eebcbe98210b217f94; ?>
|
||||
<?php unset($__attributesOriginal12cb286571f553eebcbe98210b217f94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal12cb286571f553eebcbe98210b217f94)): ?>
|
||||
<?php $component = $__componentOriginal12cb286571f553eebcbe98210b217f94; ?>
|
||||
<?php unset($__componentOriginal12cb286571f553eebcbe98210b217f94); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php if (isset($component)) { $__componentOriginal612ffe32146e3bd2ac6ba6076cca9520 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal612ffe32146e3bd2ac6ba6076cca9520 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.empty-state','data' => ['message' => 'No request body']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::empty-state'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['message' => 'No request body']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal612ffe32146e3bd2ac6ba6076cca9520)): ?>
|
||||
<?php $attributes = $__attributesOriginal612ffe32146e3bd2ac6ba6076cca9520; ?>
|
||||
<?php unset($__attributesOriginal612ffe32146e3bd2ac6ba6076cca9520); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal612ffe32146e3bd2ac6ba6076cca9520)): ?>
|
||||
<?php $component = $__componentOriginal612ffe32146e3bd2ac6ba6076cca9520; ?>
|
||||
<?php unset($__componentOriginal612ffe32146e3bd2ac6ba6076cca9520); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/request-body.blade.php ENDPATH**/ ?>
|
||||
@@ -1,423 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php $__env->startPush('styles'); ?>
|
||||
<style>
|
||||
canvas { max-width: 100% !important; }
|
||||
.custom-scrollbar::-webkit-scrollbar { width: 5px; }
|
||||
.custom-scrollbar::-webkit-scrollbar-track { background: #f1f5f9; }
|
||||
.custom-scrollbar::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 10px; }
|
||||
|
||||
.animate-modal-enter { animation: modalFadeIn 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
|
||||
@keyframes modalFadeIn {
|
||||
from { opacity: 0; transform: scale(0.95) translateY(20px); }
|
||||
to { opacity: 1; transform: scale(1) translateY(0); }
|
||||
}
|
||||
</style>
|
||||
<?php $__env->stopPush(); ?>
|
||||
|
||||
<?php
|
||||
// Mengambil daftar penyakit yang MASIH AKTIF untuk dropdown
|
||||
$activeTreatments = $cat->treatments->where('status_perawatan', 1);
|
||||
?>
|
||||
|
||||
<div class="max-w-[1600px] mx-auto space-y-8 pb-12">
|
||||
|
||||
<div class="flex flex-col md:flex-row md:items-center justify-between gap-6 px-2">
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="<?php echo e(route('cats.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<div class="flex items-center gap-3">
|
||||
<h2 class="text-3xl font-black text-slate-800 tracking-tight leading-none uppercase"><?php echo e($cat->nama_kucing); ?></h2>
|
||||
<?php echo $cat->gender_icon; ?>
|
||||
|
||||
</div>
|
||||
<p class="text-sm text-slate-500 font-medium italic uppercase tracking-widest mt-1">Medical Record #FE-<?php echo e(str_pad($cat->id, 5, '0', STR_PAD_LEFT)); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-wrap items-center gap-3">
|
||||
<a href="<?php echo e(route('medical-records.bulk.create')); ?>" class="inline-flex items-center px-6 py-3.5 bg-indigo-50 text-indigo-600 border border-indigo-100 text-[10px] font-black rounded-2xl hover:bg-indigo-600 hover:text-white transition-all shadow-sm active:scale-95">
|
||||
<i class="fas fa-layer-group mr-2 text-sm"></i> BULK TREATMENT
|
||||
</a>
|
||||
<a href="<?php echo e(route('cats.medical-report', $cat->id)); ?>" class="inline-flex items-center px-6 py-3.5 bg-rose-600 text-white text-[10px] font-black rounded-2xl hover:bg-rose-700 transition-all shadow-lg shadow-rose-100 active:scale-95">
|
||||
<i class="fas fa-file-medical mr-2 text-sm"></i> DOWNLOAD HEALTH LEDGER
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
<?php if($activeTreatments->count() > 0): ?>
|
||||
<div x-data="{ openModal: false }" class="inline-block">
|
||||
<button @click="openModal = true" type="button"
|
||||
class="inline-flex items-center px-6 py-3.5 bg-emerald-600 text-white text-[10px] font-black rounded-2xl hover:bg-emerald-700 transition-all shadow-lg shadow-emerald-100 active:scale-95 animate-pulse">
|
||||
<i class="fas fa-notes-medical mr-2 text-sm"></i> RESOLVE CLINICAL CASE
|
||||
</button>
|
||||
|
||||
|
||||
<div x-show="openModal"
|
||||
x-transition:enter="transition ease-out duration-300"
|
||||
x-transition:enter-start="opacity-0"
|
||||
x-transition:enter-end="opacity-100"
|
||||
x-transition:leave="transition ease-in duration-200"
|
||||
x-transition:leave-start="opacity-100"
|
||||
x-transition:leave-end="opacity-0"
|
||||
class="fixed inset-0 z-50 overflow-y-auto bg-slate-900/60 backdrop-blur-sm flex items-center justify-center p-4"
|
||||
x-cloak>
|
||||
|
||||
|
||||
<div @click.away="openModal = false" class="bg-white rounded-[2.5rem] border border-slate-100 shadow-2xl max-w-md w-full p-8 transform transition-all space-y-6">
|
||||
<div class="flex justify-between items-start">
|
||||
<div>
|
||||
<h3 class="text-lg font-black text-slate-800 uppercase tracking-tight">Resolusi Penyakit</h3>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-wider mt-1">Pilih kasus yang sudah sembuh</p>
|
||||
</div>
|
||||
<button @click="openModal = false" type="button" class="text-slate-400 hover:text-rose-600 transition-colors">
|
||||
<i class="fas fa-times-circle text-xl"></i>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<form action="<?php echo e(route('cats.complete-treatment', $cat->id)); ?>" method="POST" class="space-y-4">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('PATCH'); ?>
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="block text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Pilih Keluhan / Penyakit</label>
|
||||
<select name="treatment_id" required class="w-full bg-slate-50 border-none rounded-2xl text-xs font-bold p-4 text-slate-700 focus:ring-4 focus:ring-indigo-500/20 outline-none">
|
||||
<option value="" disabled selected>-- Pilih Penyakit yang Sembuh --</option>
|
||||
<?php $__currentLoopData = $activeTreatments; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $tr): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($tr->id); ?>"><?php echo e($tr->keluhan); ?> (Tanggal: <?php echo e($tr->tanggal->format('d/m/Y')); ?>)</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="block text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Kondisi Pasca Sakit / Remark</label>
|
||||
<textarea name="remark_pasca_sakit" rows="4" required placeholder="Catat perkembangan... (Contoh: Jamur sembuh total)" class="w-full bg-slate-50 border-none rounded-2xl text-xs font-bold p-4 text-slate-700 focus:ring-4 focus:ring-indigo-500/20 outline-none"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-2 gap-3 pt-2">
|
||||
<button @click="openModal = false" type="button" class="w-full bg-slate-100 text-slate-500 py-3.5 rounded-xl text-[10px] font-black uppercase tracking-widest hover:bg-slate-200 transition-all">Batal</button>
|
||||
<button type="submit" class="w-full bg-emerald-600 text-white py-3.5 rounded-xl text-[10px] font-black uppercase tracking-widest hover:bg-emerald-700 shadow-lg shadow-emerald-100 transition-all">Simpan Resolusi</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if(Gate::allows('check-access', ['cats', 'update']) || Gate::allows('check-access', ['cats', 'delete'])): ?>
|
||||
<a href="<?php echo e(route('cats.edit', $cat->id)); ?>" class="inline-flex items-center px-6 py-3.5 bg-white border border-slate-200 text-slate-600 text-[10px] font-black rounded-2xl hover:bg-slate-50 transition-all shadow-sm active:scale-95">
|
||||
<i class="fas fa-edit mr-2 text-indigo-500 text-sm"></i> UPDATE DATA
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-8 px-2">
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="bg-white border border-slate-200 rounded-[3rem] p-8 shadow-sm text-center relative overflow-hidden group">
|
||||
<div class="absolute top-0 left-0 p-6 z-10"><?php echo $cat->status_badge; ?></div>
|
||||
<div class="w-48 h-48 mx-auto rounded-[3rem] bg-slate-50 overflow-hidden ring-8 ring-slate-50 shadow-xl mb-6 transition-transform group-hover:scale-105 duration-500">
|
||||
<img src="<?php echo e($cat->foto_url); ?>" class="w-full h-full object-cover">
|
||||
</div>
|
||||
<h3 class="text-2xl font-black text-slate-800 mb-6 tracking-tighter uppercase"><?php echo e($cat->nama_kucing); ?></h3>
|
||||
<div class="grid grid-cols-2 gap-4 text-left border-t border-slate-100 pt-6">
|
||||
<div class="bg-slate-50/50 p-4 rounded-2xl border border-slate-100">
|
||||
<p class="text-[9px] font-black text-slate-400 uppercase tracking-widest mb-2">Registry</p>
|
||||
<div class="flex flex-wrap gap-1"><?php echo $cat->registry_badges; ?></div>
|
||||
</div>
|
||||
<div class="bg-slate-50/50 p-4 rounded-2xl border border-slate-100 text-center">
|
||||
<p class="text-[9px] font-black text-slate-400 uppercase tracking-widest mb-1">Umur Saat Ini</p>
|
||||
<p class="text-xs font-black text-slate-700 tracking-tighter"><?php echo e($cat->age); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[3rem] p-8 shadow-sm space-y-5">
|
||||
<h4 class="text-[10px] font-black text-slate-400 uppercase tracking-widest border-b border-slate-50 pb-3">Informasi Teknis</h4>
|
||||
<div class="space-y-4">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-xs font-bold text-slate-400 uppercase">Microchip</span>
|
||||
<span class="text-xs font-black text-slate-700 font-mono"><?php echo e($cat->microchip ?? 'Unchipped'); ?></span>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-xs font-bold text-slate-400 uppercase">Pedigree No.</span>
|
||||
<span class="text-xs font-black text-slate-700"><?php echo e($cat->pedigree ?? '-'); ?></span>
|
||||
</div>
|
||||
<div class="flex justify-between items-center pt-3 border-t border-slate-50 mt-1">
|
||||
<span class="text-xs font-bold text-slate-400 uppercase">Sertifikat Ped</span>
|
||||
<div class="flex items-center gap-2">
|
||||
<?php if($cat->sertifikat_ped_file): ?>
|
||||
<span class="text-[9px] font-black text-emerald-600 bg-emerald-50 px-2 py-1 rounded-md uppercase"><i class="fas fa-check-circle mr-1"></i> Tersedia</span>
|
||||
<?php else: ?>
|
||||
<span class="text-[9px] font-black text-rose-500 bg-rose-50 px-2 py-1 rounded-md uppercase"><i class="fas fa-times-circle mr-1"></i> Kosong</span>
|
||||
<?php endif; ?>
|
||||
<a href="<?php echo e(route('cats.pedigree', $cat->id)); ?>" class="flex items-center justify-center px-4 py-2.5 bg-indigo-50 text-indigo-600 rounded-xl hover:bg-indigo-600 hover:text-white transition-all font-black text-[10px] uppercase tracking-widest shadow-sm">
|
||||
<i class="fas fa-folder-open mr-2"></i> Buka
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-xs font-bold text-slate-400 uppercase">PIC Bertugas</span>
|
||||
<span class="text-xs font-black text-slate-700"><?php echo e($cat->pic?->name ?? 'System'); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-8">
|
||||
<div class="bg-white border border-slate-200 rounded-[3rem] p-8 shadow-sm">
|
||||
<h4 class="text-xs font-black text-slate-800 uppercase tracking-widest border-b border-slate-100 pb-4 mb-6">Parental Intelligence</h4>
|
||||
<div class="space-y-4">
|
||||
<div <?php if($cat->sire_id): ?> onclick="window.location.href='<?php echo e(route('cats.show', $cat->sire_id)); ?>'" <?php endif; ?>
|
||||
class="p-4 bg-indigo-50/30 border border-indigo-100 rounded-3xl flex items-center gap-4 hover:bg-indigo-50 transition-colors <?php echo e($cat->sire_id ? 'cursor-pointer' : 'cursor-default'); ?>">
|
||||
<div class="w-12 h-12 bg-white border border-indigo-100 text-indigo-600 rounded-2xl flex items-center justify-center shadow-sm"><i class="fas fa-mars text-lg"></i></div>
|
||||
<div class="flex-1">
|
||||
<p class="text-[9px] font-black text-indigo-400 uppercase tracking-widest">Sire (Pejantan)</p>
|
||||
<p class="text-sm font-black text-slate-700 uppercase leading-none mt-1"><?php echo e($cat->sire->nama_kucing ?? 'Unknown'); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
<div <?php if($cat->dam_id): ?> onclick="window.location.href='<?php echo e(route('cats.show', $cat->dam_id)); ?>'" <?php endif; ?>
|
||||
class="p-4 bg-rose-50/30 border border-rose-100 rounded-3xl flex items-center gap-4 hover:bg-rose-50 transition-colors <?php echo e($cat->dam_id ? 'cursor-pointer' : 'cursor-default'); ?>">
|
||||
<div class="w-12 h-12 bg-white border border-rose-100 text-rose-600 rounded-2xl flex items-center justify-center shadow-sm"><i class="fas fa-venus text-lg"></i></div>
|
||||
<div class="flex-1">
|
||||
<p class="text-[9px] font-black text-rose-400 uppercase tracking-widest">Dam (Betina)</p>
|
||||
<p class="text-sm font-black text-slate-700 uppercase leading-none mt-1"><?php echo e($cat->dam->nama_kucing ?? 'Unknown'); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-slate-900 rounded-[3rem] p-8 text-white shadow-2xl relative overflow-hidden">
|
||||
<h4 class="text-xs font-black uppercase tracking-widest border-b border-white/10 pb-4 mb-6 italic">Current Health Reminders</h4>
|
||||
<div class="grid grid-cols-1 gap-4 relative z-10">
|
||||
<?php $__currentLoopData = [
|
||||
['icon' => 'fa-syringe', 'label' => 'Vaksin', 'field' => 'jadwal_vaksin'],
|
||||
['icon' => 'fa-bug', 'label' => 'Obat Cacing', 'field' => 'jadwal_obat_cacing'],
|
||||
['icon' => 'fa-shield-virus', 'label' => 'Obat Kutu', 'field' => 'jadwal_obat_kutu'],
|
||||
['icon' => 'fa-bath', 'label' => 'Grooming', 'field' => 'jadwal_grooming']
|
||||
]; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="flex items-center justify-between p-4 bg-white/5 rounded-2xl border border-white/5 hover:bg-white/10 transition-all">
|
||||
<div class="flex items-center gap-3">
|
||||
<i class="fas <?php echo e($item['icon']); ?> text-xs text-slate-400"></i>
|
||||
<span class="text-[10px] font-black uppercase tracking-widest text-slate-300"><?php echo e($item['label']); ?></span>
|
||||
</div>
|
||||
<span class="text-[11px] font-black <?php echo e($cat->{$item['field']} && $cat->{$item['field']}->isPast() ? 'text-rose-400' : 'text-white'); ?>">
|
||||
<?php echo e($cat->{$item['field']} ? $cat->{$item['field']}->format('d M Y') : 'NOT SET'); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
<i class="fas fa-paw absolute -bottom-10 -right-10 text-[12rem] text-white/5 -rotate-12"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-8">
|
||||
<div class="bg-white border border-slate-200 rounded-[3rem] p-8 shadow-sm">
|
||||
<div class="flex items-center justify-between mb-8">
|
||||
<div>
|
||||
<h4 class="font-black text-slate-800 uppercase tracking-tighter text-lg leading-none">Analisis Berat</h4>
|
||||
<p class="text-[10px] text-slate-400 font-black uppercase mt-1">Growth Index (Kg)</p>
|
||||
</div>
|
||||
<div class="w-12 h-12 bg-emerald-50 text-emerald-500 rounded-2xl flex items-center justify-center"><i class="fas fa-chart-line text-lg"></i></div>
|
||||
</div>
|
||||
<div class="relative h-[250px]"><canvas id="weightChart"></canvas></div>
|
||||
</div>
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['cats', 'update'])): ?>
|
||||
<div class="bg-indigo-600 rounded-[3rem] p-8 text-white shadow-xl shadow-indigo-100 flex flex-col justify-between h-[300px] group overflow-hidden relative">
|
||||
<div class="relative z-10">
|
||||
<h4 class="text-xs font-black uppercase tracking-widest mb-2 border-b border-white/20 pb-3">Smart Medical Action</h4>
|
||||
<p class="text-[10px] text-indigo-100/60 leading-relaxed italic uppercase font-bold tracking-tighter">Log tindakan kesehatan cepat atau pengobatan klinis.</p>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col gap-3 relative z-10">
|
||||
<a href="<?php echo e(route('medical-records.create', $cat->id)); ?>" class="w-full flex items-center justify-center gap-3 p-4 bg-white text-indigo-600 rounded-2xl font-black uppercase text-[10px] shadow-lg hover:bg-indigo-50 transition-all active:scale-95">
|
||||
<i class="fas fa-calendar-check"></i> LOG ROUTINE LEDGER
|
||||
</a>
|
||||
<a href="<?php echo e(route('treatments.create', ['cat_id' => $cat->id])); ?>" class="w-full flex items-center justify-center gap-3 p-4 bg-indigo-500 text-white border border-indigo-400 rounded-2xl font-black uppercase text-[10px] shadow-lg hover:bg-indigo-400 transition-all active:scale-95">
|
||||
<i class="fas fa-briefcase-medical"></i> LOG CLINICAL CASE
|
||||
</a>
|
||||
</div>
|
||||
<i class="fas fa-heartbeat absolute -bottom-10 -left-10 text-[10rem] text-white/5"></i>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[3.5rem] overflow-hidden shadow-sm mx-2">
|
||||
<div class="p-10 border-b border-slate-100 bg-slate-50/50 flex flex-col md:flex-row justify-between items-center gap-4">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 bg-indigo-600 text-white rounded-2xl flex items-center justify-center shadow-lg shadow-indigo-100">
|
||||
<i class="fas fa-book-medical text-xl"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="font-black text-slate-800 uppercase tracking-tighter text-xl leading-none">Comprehensive Health History</h4>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-[0.2em] mt-2">Jejak medis dari pertama hingga rencana mendatang</p>
|
||||
</div>
|
||||
</div>
|
||||
<span class="text-[10px] font-black text-indigo-600 bg-white border border-indigo-100 px-6 py-2.5 rounded-full shadow-sm">
|
||||
<?php echo e($cat->medicalRecords->count()); ?> TOTAL RECORDS
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="p-10 max-h-[800px] overflow-y-auto custom-scrollbar bg-white">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $cat->medicalRecords->sortByDesc('date_given'); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $record): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="p-8 rounded-[2.5rem] border border-slate-100 bg-slate-50/30 hover:bg-white hover:border-indigo-100 hover:shadow-xl transition-all duration-500 group/item relative overflow-hidden">
|
||||
<i class="fas <?php echo e($record->type === 'Vaccine' ? 'fa-syringe' : ($record->type === 'Grooming' ? 'fa-bath' : 'fa-pills')); ?> absolute -bottom-4 -right-4 text-7xl text-slate-100/50 group-hover/item:text-indigo-500/10 transition-colors"></i>
|
||||
<div class="flex items-start justify-between mb-6 relative z-10">
|
||||
<div class="w-12 h-12 rounded-2xl flex items-center justify-center shadow-sm
|
||||
<?php echo e($record->type === 'Vaccine' ? 'bg-blue-600 text-white' :
|
||||
($record->type === 'Deworming' ? 'bg-emerald-500 text-white' :
|
||||
($record->type === 'Flea Treatment' ? 'bg-amber-500 text-white' : 'bg-pink-500 text-white'))); ?>">
|
||||
<i class="fas <?php echo e($record->type === 'Vaccine' ? 'fa-syringe' : ($record->type === 'Grooming' ? 'fa-bath' : 'fa-pills')); ?> text-sm"></i>
|
||||
</div>
|
||||
<span class="text-[10px] font-black text-slate-800 uppercase tracking-widest"><?php echo e($record->date_given->format('d M Y')); ?></span>
|
||||
</div>
|
||||
<div class="relative z-10">
|
||||
<h5 class="text-base font-black text-slate-800 uppercase tracking-tight mb-1"><?php echo e($record->treatment_name); ?></h5>
|
||||
<div class="flex items-center gap-2 mb-4">
|
||||
<span class="text-[8px] font-black text-indigo-600 bg-indigo-50 px-2.5 py-1 rounded-lg border border-indigo-100 uppercase italic"><?php echo e($record->type); ?></span>
|
||||
<?php if($record->dosage && $record->type !== 'Grooming'): ?>
|
||||
<span class="text-[8px] font-black text-emerald-600 bg-emerald-50 px-2.5 py-1 rounded-lg border border-emerald-100 uppercase tracking-widest">
|
||||
DOSIS: <?php echo e($record->dosage); ?> <?php echo e($record->unit); ?>
|
||||
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<p class="text-[11px] text-slate-500 font-medium italic mb-6 leading-relaxed bg-white/50 p-3 rounded-xl border border-dashed border-slate-200">
|
||||
"<?php echo e($record->notes ?? 'Pemberian rutin tanpa keluhan klinis.'); ?>"
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<div class="col-span-full py-20 text-center text-slate-400 font-black uppercase text-xs">No Records Found</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[3rem] overflow-hidden shadow-sm mx-2">
|
||||
<div class="p-8 border-b border-slate-100 bg-slate-50/50 flex justify-between items-center">
|
||||
<div class="flex items-center gap-3">
|
||||
<i class="fas fa-history text-slate-400"></i>
|
||||
<h4 class="font-black text-slate-800 uppercase tracking-tighter text-lg">Clinical Case History (Non-Routine)</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-10 max-h-[600px] overflow-y-auto custom-scrollbar">
|
||||
<div class="relative space-y-12">
|
||||
<div class="absolute left-[11px] top-2 bottom-2 w-0.5 bg-slate-100"></div>
|
||||
<?php $__empty_1 = true; $__currentLoopData = $cat->treatments->sortByDesc('tanggal'); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $treatment): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<div class="relative flex items-start gap-8 group">
|
||||
|
||||
<div class="z-10 w-6 h-6 rounded-full border-4 ring-8 shadow-md
|
||||
<?php echo e($treatment->status_perawatan == 2 ? 'bg-emerald-500 border-white ring-emerald-50' : 'bg-white border-rose-500 ring-rose-50'); ?>">
|
||||
</div>
|
||||
|
||||
<div class="flex-1 space-y-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<p class="text-xs font-black text-indigo-600 uppercase tracking-widest bg-indigo-50 px-3 py-1 rounded-lg border border-indigo-100"><?php echo e($treatment->tanggal->format('d F Y')); ?></p>
|
||||
|
||||
|
||||
<?php if($treatment->status_perawatan == 2): ?>
|
||||
<span class="text-[9px] font-black text-emerald-600 bg-emerald-50 px-3 py-1 rounded-full uppercase tracking-widest border border-emerald-100"><i class="fas fa-check-circle mr-1"></i> SEMBUH</span>
|
||||
<?php else: ?>
|
||||
<span class="text-[9px] font-black text-rose-600 bg-rose-50 px-3 py-1 rounded-full uppercase tracking-widest border border-rose-100 animate-pulse"><i class="fas fa-procedures mr-1"></i> AKTIF</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="bg-white rounded-[2.5rem] p-8 border <?php echo e($treatment->status_perawatan == 2 ? 'border-emerald-100' : 'border-rose-100'); ?> shadow-sm transition-all duration-300">
|
||||
<div class="flex flex-col md:flex-row gap-10">
|
||||
<div class="flex-1">
|
||||
<h5 class="text-lg font-black text-slate-800 mb-2 uppercase tracking-tight"><?php echo e($treatment->keluhan); ?></h5>
|
||||
<p class="text-sm text-slate-500 font-medium leading-relaxed italic border-l-4 <?php echo e($treatment->status_perawatan == 2 ? 'border-emerald-200' : 'border-rose-200'); ?> pl-4 mb-6">Diagnosa: <?php echo e($treatment->diagnosa); ?></p>
|
||||
|
||||
<div class="flex items-center gap-4 p-4 bg-slate-50/50 rounded-2xl mb-4">
|
||||
<div class="w-10 h-10 rounded-xl bg-indigo-50 flex items-center justify-center text-indigo-500"><i class="fas fa-capsules"></i></div>
|
||||
<div><p class="text-[9px] font-black text-slate-400 uppercase tracking-widest">Therapy</p><p class="text-xs font-black text-slate-800 uppercase"><?php echo e($treatment->nama_obat); ?> (<?php echo e($treatment->dosis); ?>)</p></div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if($treatment->status_perawatan == 2 && $treatment->remark_pasca_sakit): ?>
|
||||
<div class="bg-emerald-50/50 p-4 rounded-2xl border border-emerald-100/50 mt-4">
|
||||
<p class="text-[9px] font-black text-emerald-600 uppercase tracking-widest mb-1"><i class="fas fa-clipboard-check mr-1"></i> Catatan Resolusi Sembuh</p>
|
||||
<p class="text-xs font-bold text-slate-600 italic">"<?php echo e($treatment->remark_pasca_sakit); ?>"</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if($treatment->foto_bukti): ?>
|
||||
<div class="shrink-0"><div class="w-44 h-44 rounded-[2.5rem] overflow-hidden ring-4 ring-slate-100 shadow-lg"><img src="<?php echo e(asset('storage/' . $treatment->foto_bukti)); ?>" class="w-full h-full object-cover"></div></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<div class="text-center py-10 text-slate-300 uppercase font-black text-xs">No Clinical Cases</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const ctx = document.getElementById('weightChart');
|
||||
const weightHistories = <?php echo json_encode($cat->weightHistories->sortBy('created_at')->values() ?? []); ?>;
|
||||
if(ctx && weightHistories && weightHistories.length > 0) {
|
||||
const labels = weightHistories.map(d => new Date(d.created_at).toLocaleDateString('id-ID', { day: '2-digit', month: 'short' }));
|
||||
const data = weightHistories.map(d => d.berat);
|
||||
new Chart(ctx, {
|
||||
type: 'line',
|
||||
data: {
|
||||
labels: labels,
|
||||
datasets: [{
|
||||
label: 'Weight (Kg)',
|
||||
data: data,
|
||||
borderColor: '#10b981',
|
||||
backgroundColor: 'rgba(16, 185, 129, 0.1)',
|
||||
borderWidth: 5,
|
||||
tension: 0.4,
|
||||
fill: true,
|
||||
pointBackgroundColor: '#fff',
|
||||
pointBorderColor: '#10b981',
|
||||
pointBorderWidth: 3,
|
||||
pointRadius: 4
|
||||
}]
|
||||
},
|
||||
options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false } }, scales: { y: { beginAtZero: false }, x: { grid: { display: false } } } }
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/cats/show.blade.php ENDPATH**/ ?>
|
||||
@@ -1,60 +0,0 @@
|
||||
# <?php echo e($exception->class()); ?> - <?php echo $exception->title(); ?>
|
||||
|
||||
|
||||
<?php echo $exception->message(); ?>
|
||||
|
||||
|
||||
PHP <?php echo e(PHP_VERSION); ?>
|
||||
|
||||
Laravel <?php echo e(app()->version()); ?>
|
||||
|
||||
<?php echo e($exception->request()->httpHost()); ?>
|
||||
|
||||
|
||||
## Stack Trace
|
||||
|
||||
<?php $__currentLoopData = $exception->frames(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $frame): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php echo e($index); ?> - <?php echo e($frame->file()); ?>:<?php echo e($frame->line()); ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
|
||||
## Request
|
||||
|
||||
<?php echo e($exception->request()->method()); ?> <?php echo e(\Illuminate\Support\Str::start($exception->request()->path(), '/')); ?>
|
||||
|
||||
|
||||
## Headers
|
||||
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->requestHeaders(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $key => $value): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
* **<?php echo e($key); ?>**: <?php echo $value; ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
No header data available.
|
||||
<?php endif; ?>
|
||||
|
||||
## Route Context
|
||||
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->applicationRouteContext(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $name => $value): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<?php echo e($name); ?>: <?php echo $value; ?>
|
||||
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
No routing data available.
|
||||
<?php endif; ?>
|
||||
|
||||
## Route Parameters
|
||||
|
||||
<?php if($routeParametersContext = $exception->applicationRouteParametersContext()): ?>
|
||||
<?php echo $routeParametersContext; ?>
|
||||
|
||||
<?php else: ?>
|
||||
No route parameter data available.
|
||||
<?php endif; ?>
|
||||
|
||||
## Database Queries
|
||||
|
||||
<?php $__empty_1 = true; $__currentLoopData = $exception->applicationQueries(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as ['connectionName' => $connectionName, 'sql' => $sql, 'time' => $time]): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
* <?php echo e($connectionName); ?> - <?php echo $sql; ?> (<?php echo e($time); ?> ms)
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
No database queries detected.
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/markdown.blade.php ENDPATH**/ ?>
|
||||
@@ -1,38 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['messages']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['messages']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php if($messages): ?>
|
||||
<ul <?php echo e($attributes->merge(['class' => 'text-sm text-red-600 space-y-1'])); ?>>
|
||||
<?php $__currentLoopData = (array) $messages; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $message): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<li><?php echo e($message); ?></li>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/input-error.blade.php ENDPATH**/ ?>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php $__env->startSection('title', __('Forbidden')); ?>
|
||||
<?php $__env->startSection('code', '403'); ?>
|
||||
<?php $__env->startSection('message', __($exception->getMessage() ?: 'Forbidden')); ?>
|
||||
|
||||
<?php echo $__env->make('errors::minimal', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/403.blade.php ENDPATH**/ ?>
|
||||
@@ -1,143 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><?php echo e($title); ?></title>
|
||||
<style>
|
||||
body { font-family: 'Helvetica', sans-serif; font-size: 10px; color: #333; margin: 0; }
|
||||
.header { text-align: center; margin-bottom: 30px; border-bottom: 2px solid #4f46e5; padding-bottom: 10px; }
|
||||
.header h1 { margin: 0; color: #1e293b; font-size: 18px; text-transform: uppercase; }
|
||||
.header p { margin: 5px 0; color: #64748b; font-size: 8px; letter-spacing: 2px; }
|
||||
|
||||
.meta-info { margin-bottom: 20px; width: 100%; }
|
||||
.meta-info td { vertical-align: top; }
|
||||
|
||||
table { width: 100%; border-collapse: collapse; margin-bottom: 20px; table-layout: fixed; }
|
||||
th { background-color: #f8fafc; border: 1px solid #e2e8f0; padding: 8px; text-align: left; text-transform: uppercase; color: #475569; font-size: 8px; }
|
||||
td { border: 1px solid #e2e8f0; padding: 8px; vertical-align: top; word-wrap: break-word; }
|
||||
|
||||
/* Status Colors */
|
||||
.badge { padding: 3px 6px; border-radius: 4px; font-weight: bold; font-size: 7px; text-transform: uppercase; }
|
||||
.bg-red { background-color: #fee2e2; color: #991b1b; }
|
||||
.bg-amber { background-color: #fef3c7; color: #92400e; }
|
||||
.bg-green { background-color: #d1fae5; color: #065f46; }
|
||||
.bg-slate { background-color: #f1f5f9; color: #475569; }
|
||||
|
||||
.footer { position: fixed; bottom: 0; width: 100%; text-align: center; font-size: 8px; color: #94a3b8; border-top: 1px solid #e2e8f0; padding-top: 5px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="header">
|
||||
<h1>ILY CATTERY - INTELLIGENCE REPORT</h1>
|
||||
<p>MODUL: <?php echo e(strtoupper($module)); ?> | UNIT ANALYTICS SYSTEM</p>
|
||||
</div>
|
||||
|
||||
<table class="meta-info">
|
||||
<tr>
|
||||
<td width="50%">
|
||||
<strong>Dicetak Oleh:</strong> <?php echo e(Auth::user()->name); ?><br>
|
||||
<strong>Tanggal Cetak:</strong> <?php echo e(now()->translatedFormat('d F Y H:i')); ?>
|
||||
|
||||
</td>
|
||||
<td width="50%" style="text-align: right;">
|
||||
<strong>Total Data:</strong> <?php echo e(count($data)); ?> Records<br>
|
||||
<strong>Status Laporan:</strong> <?php echo e(strtoupper($title)); ?>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th width="30px">No</th>
|
||||
|
||||
<?php if($module == 'cats'): ?>
|
||||
<th>Nama Kucing</th><th>Ras</th><th>Kelamin</th><th>Tgl Lahir</th><th>Status</th>
|
||||
<?php elseif(in_array($module, ['vaccine', 'deworming', 'flea', 'grooming'])): ?>
|
||||
<th>Nama Kucing</th><th>Tindakan</th><th>PIC Staf</th><th>Jadwal</th><th>Status Analitik</th>
|
||||
<?php elseif(in_array($module, ['medicine', 'food', 'supplies'])): ?>
|
||||
<th>Nama Produk</th><th>Stok</th><th>Unit</th><th>Tgl Expired</th><th>Kondisi</th>
|
||||
<?php else: ?>
|
||||
<th>Informasi Utama</th><th>Detail</th><th>PIC</th><th>Tanggal</th><th>Status</th>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $__empty_1 = true; $__currentLoopData = $data; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $item): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<?php
|
||||
// Deteksi Kolom Tanggal
|
||||
$dateCol = match($module) {
|
||||
'cats' => 'tanggal_lahir',
|
||||
'vaccine' => 'jadwal_vaksin',
|
||||
'deworming' => 'jadwal_obat_cacing',
|
||||
'flea' => 'jadwal_obat_kutu',
|
||||
'grooming' => 'jadwal_grooming',
|
||||
'medicine', 'food' => 'expired_date',
|
||||
default => 'created_at'
|
||||
};
|
||||
$dateVal = $item->{$dateCol};
|
||||
?>
|
||||
<tr>
|
||||
<td style="text-align: center;"><?php echo e($index + 1); ?></td>
|
||||
|
||||
|
||||
<?php if($module == 'cats'): ?>
|
||||
<td><strong><?php echo e($item->nama_kucing); ?></strong></td>
|
||||
<td><?php echo e($item->ras); ?></td>
|
||||
<td><?php echo e($item->jenis_kelamin); ?></td>
|
||||
<td><?php echo e($item->tanggal_lahir ? \Carbon\Carbon::parse($item->tanggal_lahir)->format('d/m/Y') : '-'); ?></td>
|
||||
<td>
|
||||
<span class="badge <?php echo e($item->riwayat_sakit_terakhir ? 'bg-amber' : 'bg-green'); ?>">
|
||||
<?php echo e($item->riwayat_sakit_terakhir ? 'In Treatment' : 'Healthy'); ?>
|
||||
|
||||
</span>
|
||||
</td>
|
||||
|
||||
<?php elseif(in_array($module, ['vaccine', 'deworming', 'flea', 'grooming'])): ?>
|
||||
<td><strong><?php echo e($item->nama_kucing); ?></strong></td>
|
||||
<td><?php echo e(strtoupper($module)); ?></td>
|
||||
<td><?php echo e($item->pic->name ?? '-'); ?></td>
|
||||
<td><?php echo e($dateVal ? \Carbon\Carbon::parse($dateVal)->format('d/m/Y') : 'NOT SET'); ?></td>
|
||||
<td>
|
||||
<?php if(empty($dateVal)): ?>
|
||||
<span class="badge bg-slate">Date Not Set</span>
|
||||
<?php elseif(\Carbon\Carbon::parse($dateVal)->isPast()): ?>
|
||||
<span class="badge bg-red">Overdue</span>
|
||||
<?php elseif(\Carbon\Carbon::parse($dateVal)->diffInDays(now()) <= 7): ?>
|
||||
<span class="badge bg-amber">Soon</span>
|
||||
<?php else: ?>
|
||||
<span class="badge bg-green">Safe</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
||||
<?php elseif(in_array($module, ['medicine', 'food', 'supplies'])): ?>
|
||||
<td><strong><?php echo e($item->nama_obat ?? $item->nama_makanan ?? $item->nama_perlengkapan); ?></strong></td>
|
||||
<td><?php echo e($item->qty); ?></td>
|
||||
<td><?php echo e($item->unit); ?></td>
|
||||
<td><?php echo e($item->expired_date ? \Carbon\Carbon::parse($item->expired_date)->format('d/m/Y') : '-'); ?></td>
|
||||
<td>
|
||||
<?php if($item->qty < 5): ?>
|
||||
<span class="badge bg-red">Low Stock</span>
|
||||
<?php elseif($item->expired_date && \Carbon\Carbon::parse($item->expired_date)->isPast()): ?>
|
||||
<span class="badge bg-red">Expired</span>
|
||||
<?php else: ?>
|
||||
<span class="badge bg-green">Ready</span>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
<?php endif; ?>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr>
|
||||
<td colspan="6" style="text-align: center; padding: 20px;">Data Tidak Ditemukan</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="footer">
|
||||
Ily Cattery Intelligence System - Dokumen Sah Dihasilkan Secara Otomatis
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/reports/pdf_template.blade.php ENDPATH**/ ?>
|
||||
@@ -1,182 +0,0 @@
|
||||
<section class="space-y-6">
|
||||
<header>
|
||||
<h2 class="text-lg font-medium text-gray-900">
|
||||
<?php echo e(__('Hapus akun')); ?>
|
||||
|
||||
</h2>
|
||||
|
||||
<p class="mt-1 text-sm text-gray-600">
|
||||
<?php echo e(__('Setelah akun dihapus, seluruh data terkait akun akan dihapus secara permanen. Pastikan data yang diperlukan sudah diamankan sebelum melanjutkan.')); ?>
|
||||
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.danger-button','data' => ['xData' => '','xOn:click.prevent' => '$dispatch(\'open-modal\', \'confirm-user-deletion\')']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('danger-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['x-data' => '','x-on:click.prevent' => '$dispatch(\'open-modal\', \'confirm-user-deletion\')']); ?><?php echo e(__('Hapus akun')); ?> <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11)): ?>
|
||||
<?php $attributes = $__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11; ?>
|
||||
<?php unset($__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11)): ?>
|
||||
<?php $component = $__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11; ?>
|
||||
<?php unset($__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal9f64f32e90b9102968f2bc548315018c = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9f64f32e90b9102968f2bc548315018c = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.modal','data' => ['name' => 'confirm-user-deletion','show' => $errors->userDeletion->isNotEmpty(),'focusable' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('modal'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['name' => 'confirm-user-deletion','show' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->userDeletion->isNotEmpty()),'focusable' => true]); ?>
|
||||
<form method="post" action="<?php echo e(route('profile.destroy')); ?>" class="p-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('delete'); ?>
|
||||
|
||||
<h2 class="text-lg font-medium text-gray-900">
|
||||
<?php echo e(__('Are you sure you want to delete your account?')); ?>
|
||||
|
||||
</h2>
|
||||
|
||||
<p class="mt-1 text-sm text-gray-600">
|
||||
<?php echo e(__('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.')); ?>
|
||||
|
||||
</p>
|
||||
|
||||
<div class="mt-6">
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'password','value' => ''.e(__('Password')).'','class' => 'sr-only']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'password','value' => ''.e(__('Password')).'','class' => 'sr-only']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'password','name' => 'password','type' => 'password','class' => 'mt-1 block w-3/4','placeholder' => ''.e(__('Password')).'']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'password','name' => 'password','type' => 'password','class' => 'mt-1 block w-3/4','placeholder' => ''.e(__('Password')).'']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->userDeletion->get('password'),'class' => 'mt-2']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->userDeletion->get('password')),'class' => 'mt-2']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 flex justify-end">
|
||||
<?php if (isset($component)) { $__componentOriginal3b0e04e43cf890250cc4d85cff4d94af = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3b0e04e43cf890250cc4d85cff4d94af = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.secondary-button','data' => ['xOn:click' => '$dispatch(\'close\')']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('secondary-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['x-on:click' => '$dispatch(\'close\')']); ?>
|
||||
<?php echo e(__('Cancel')); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3b0e04e43cf890250cc4d85cff4d94af)): ?>
|
||||
<?php $attributes = $__attributesOriginal3b0e04e43cf890250cc4d85cff4d94af; ?>
|
||||
<?php unset($__attributesOriginal3b0e04e43cf890250cc4d85cff4d94af); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3b0e04e43cf890250cc4d85cff4d94af)): ?>
|
||||
<?php $component = $__componentOriginal3b0e04e43cf890250cc4d85cff4d94af; ?>
|
||||
<?php unset($__componentOriginal3b0e04e43cf890250cc4d85cff4d94af); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.danger-button','data' => ['class' => 'ms-3']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('danger-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'ms-3']); ?>
|
||||
<?php echo e(__('Hapus akun')); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11)): ?>
|
||||
<?php $attributes = $__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11; ?>
|
||||
<?php unset($__attributesOriginal656e8c5ea4d9a4fa173298297bfe3f11); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11)): ?>
|
||||
<?php $component = $__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11; ?>
|
||||
<?php unset($__componentOriginal656e8c5ea4d9a4fa173298297bfe3f11); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9f64f32e90b9102968f2bc548315018c)): ?>
|
||||
<?php $attributes = $__attributesOriginal9f64f32e90b9102968f2bc548315018c; ?>
|
||||
<?php unset($__attributesOriginal9f64f32e90b9102968f2bc548315018c); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9f64f32e90b9102968f2bc548315018c)): ?>
|
||||
<?php $component = $__componentOriginal9f64f32e90b9102968f2bc548315018c; ?>
|
||||
<?php unset($__componentOriginal9f64f32e90b9102968f2bc548315018c); ?>
|
||||
<?php endif; ?>
|
||||
</section>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/profile/partials/delete-user-form.blade.php ENDPATH**/ ?>
|
||||
@@ -1,5 +0,0 @@
|
||||
<button <?php echo e($attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 focus:bg-gray-700 active:bg-gray-900 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition ease-in-out duration-150'])); ?>>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</button>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/primary-button.blade.php ENDPATH**/ ?>
|
||||
@@ -1,229 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-3xl mx-auto space-y-6 pb-12">
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="<?php echo e(route('admin.users.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight">Daftarkan Staf Baru</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic">Tambahkan pengguna baru ke sistem earrin cats.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<form action="<?php echo e(route('admin.users.store')); ?>" method="POST" class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Nama Lengkap</label>
|
||||
<input type="text" name="name" value="<?php echo e(old('name')); ?>" required placeholder="Contoh: Budi Santoso"
|
||||
class="w-full px-4 py-3 bg-slate-50 border <?php $__errorArgs = ['name'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-red-500 <?php else: ?> border-slate-200 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?> rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->get('name'),'class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('name')),'class' => 'mt-1']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Alamat Email</label>
|
||||
<input type="email" name="email" value="<?php echo e(old('email')); ?>" required placeholder="email@earrincats.com"
|
||||
class="w-full px-4 py-3 bg-slate-50 border <?php $__errorArgs = ['email'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-red-500 <?php else: ?> border-slate-200 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?> rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->get('email'),'class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('email')),'class' => 'mt-1']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Nomor WhatsApp</label>
|
||||
<input type="text" name="phone" value="<?php echo e(old('phone')); ?>" placeholder="0812..."
|
||||
class="w-full px-4 py-3 bg-slate-50 border <?php $__errorArgs = ['phone'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-red-500 <?php else: ?> border-slate-200 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?> rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->get('phone'),'class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('phone')),'class' => 'mt-1']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Otoritas (Role)</label>
|
||||
<select name="role_id" required class="w-full px-4 py-3 bg-slate-50 border <?php $__errorArgs = ['role_id'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-red-500 <?php else: ?> border-slate-200 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?> rounded-2xl text-sm font-black text-indigo-600 uppercase focus:ring-2 focus:ring-indigo-500 transition-all cursor-pointer">
|
||||
<option value="" disabled selected>Pilih Otoritas</option>
|
||||
<?php $__currentLoopData = $roles; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $role): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($role->id); ?>" <?php echo e(old('role_id') == $role->id ? 'selected' : ''); ?>>
|
||||
<?php echo e(strtoupper($role->name)); ?>
|
||||
|
||||
</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->get('role_id'),'class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('role_id')),'class' => 'mt-1']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Password</label>
|
||||
<input type="password" name="password" required
|
||||
class="w-full px-4 py-3 bg-slate-50 border <?php $__errorArgs = ['password'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-red-500 <?php else: ?> border-slate-200 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?> rounded-2xl text-sm font-bold focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->get('password'),'class' => 'mt-1']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('password')),'class' => 'mt-1']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Konfirmasi Password</label>
|
||||
<input type="password" name="password_confirmation" required
|
||||
class="w-full px-4 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pt-4">
|
||||
<button type="submit" class="w-full py-5 bg-slate-900 text-white text-xs font-black rounded-3xl shadow-xl hover:bg-black transition-all active:scale-[0.98] flex items-center justify-center gap-2 uppercase tracking-widest">
|
||||
<i class="fas fa-user-plus"></i> Daftarkan Pengguna
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/users/create.blade.php ENDPATH**/ ?>
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-3xl mx-auto space-y-6 pb-12">
|
||||
<div class="flex items-center gap-4 px-2">
|
||||
<a href="<?php echo e(route('inventory.supplies.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight">Edit Perlengkapan</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic">Pembaruan data inventori untuk <?php echo e($supply->nama_perlengkapan); ?>.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form action="<?php echo e(route('inventory.supplies.update', $supply->id)); ?>" method="POST" enctype="multipart/form-data" class="space-y-6 mx-2">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('PATCH'); ?>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div class="md:col-span-2 space-y-1">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Nama Perlengkapan</label>
|
||||
<input type="text" name="nama_perlengkapan" value="<?php echo e(old('nama_perlengkapan', $supply->nama_perlengkapan)); ?>" required
|
||||
class="w-full px-5 py-4 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all outline-none">
|
||||
</div>
|
||||
|
||||
<div class="space-y-1">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Jumlah Stok</label>
|
||||
<input type="number" step="any" name="qty" value="<?php echo e(old('qty', (float)$supply->qty)); ?>" required
|
||||
class="w-full px-5 py-4 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all outline-none">
|
||||
</div>
|
||||
|
||||
<div class="space-y-1">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Satuan (Unit)</label>
|
||||
<input type="text" name="unit" value="<?php echo e(old('unit', $supply->unit)); ?>" required placeholder="Contoh: sak, set, pcs"
|
||||
class="w-full px-5 py-4 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all outline-none">
|
||||
</div>
|
||||
|
||||
<div class="md:col-span-2 space-y-1">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Ganti Foto Item (Opsional)</label>
|
||||
<input type="file" name="foto_produk"
|
||||
class="w-full px-5 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-xs font-bold text-slate-500 file:mr-4 file:py-2 file:px-4 file:rounded-xl file:border-0 file:text-[10px] file:font-black file:bg-indigo-50 file:text-indigo-600 hover:file:bg-indigo-100">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if($supply->foto_produk): ?>
|
||||
<div class="pt-4 border-t border-slate-100 flex items-center gap-4">
|
||||
<div>
|
||||
<p class="text-[10px] font-black text-slate-400 uppercase tracking-widest mb-3">Pratinjau Foto</p>
|
||||
<div class="w-24 h-24 rounded-2xl border-4 border-white shadow-md overflow-hidden bg-slate-50">
|
||||
<img src="<?php echo e(asset('storage/' . $supply->foto_produk)); ?>" class="w-full h-full object-cover">
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-[10px] text-slate-400 italic">Foto lama akan dihapus otomatis jika Anda mengunggah foto baru.</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="w-full py-5 bg-indigo-600 text-white text-sm font-black rounded-[2rem] shadow-xl shadow-indigo-100 hover:bg-indigo-700 transition-all active:scale-[0.98] flex items-center justify-center gap-3">
|
||||
<i class="fas fa-save text-lg"></i> SIMPAN PERUBAHAN ITEM
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/inventory/supplies/edit.blade.php ENDPATH**/ ?>
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php $__env->startSection('title', __('Not Found')); ?>
|
||||
<?php $__env->startSection('code', '404'); ?>
|
||||
<?php $__env->startSection('message', __('Not Found')); ?>
|
||||
|
||||
<?php echo $__env->make('errors::minimal', array_diff_key(get_defined_vars(), ['__data' => 1, '__path' => 1]))->render(); ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/404.blade.php ENDPATH**/ ?>
|
||||
@@ -1,11 +0,0 @@
|
||||
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" xmlns="http://www.w3.org/2000/svg" <?php echo e($attributes); ?>>
|
||||
<g clip-path="url(#clip0_14732_6105)">
|
||||
<path d="M9.87466 7.8287L5.92654 0.549947C5.82917 0.369362 5.68068 0.221523 5.49966 0.124947C5.25374 -0.00665839 4.9658 -0.0358401 4.69847 0.0437494C4.43115 0.123339 4.20606 0.305262 4.07216 0.549947L0.124664 7.8287C0.0383472 7.98887 -0.00481098 8.16875 -0.000569449 8.35066C0.00367208 8.53256 0.0551674 8.71024 0.148856 8.86622C0.242546 9.0222 0.375205 9.15112 0.533798 9.24031C0.692391 9.32951 0.871462 9.37591 1.05341 9.37495H8.94591C9.12031 9.37495 9.29203 9.33202 9.44591 9.24995C9.56783 9.18524 9.67572 9.09703 9.76338 8.99041C9.85104 8.8838 9.91672 8.76088 9.95663 8.62876C9.99655 8.49663 10.0099 8.35791 9.99595 8.22059C9.98199 8.08328 9.94036 7.95009 9.87466 7.8287ZM4.99966 8.12495C4.87605 8.12495 4.75521 8.08829 4.65243 8.01962C4.54965 7.95094 4.46954 7.85333 4.42224 7.73912C4.37493 7.62492 4.36256 7.49925 4.38667 7.37802C4.41079 7.25678 4.47031 7.14541 4.55772 7.05801C4.64513 6.9706 4.75649 6.91107 4.87773 6.88696C4.99897 6.86284 5.12464 6.87522 5.23884 6.92252C5.35304 6.96983 5.45066 7.04993 5.51933 7.15272C5.58801 7.2555 5.62466 7.37633 5.62466 7.49995C5.62466 7.66571 5.55882 7.82468 5.44161 7.94189C5.3244 8.0591 5.16542 8.12495 4.99966 8.12495ZM5.62466 5.93745C5.62466 6.02033 5.59174 6.09981 5.53313 6.15842C5.47453 6.21702 5.39504 6.24995 5.31216 6.24995H4.68716C4.60428 6.24995 4.5248 6.21702 4.46619 6.15842C4.40759 6.09981 4.37466 6.02033 4.37466 5.93745V3.43745C4.37466 3.35457 4.40759 3.27508 4.46619 3.21648C4.5248 3.15787 4.60428 3.12495 4.68716 3.12495H5.31216C5.39504 3.12495 5.47453 3.15787 5.53313 3.21648C5.59174 3.27508 5.62466 3.35457 5.62466 3.43745V5.93745Z" fill="currentColor" />
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_14732_6105">
|
||||
<rect width="10" height="10" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/alert.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1,273 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php
|
||||
// Helper untuk logika sorting dinamis
|
||||
$currentSort = request('sort', 'name');
|
||||
$currentDir = request('direction', 'asc');
|
||||
$nextDir = $currentDir === 'asc' ? 'desc' : 'asc';
|
||||
|
||||
$getSortIcon = function($field) use ($currentSort, $currentDir) {
|
||||
if ($currentSort !== $field) return 'fa-sort opacity-20';
|
||||
return $currentDir === 'asc' ? 'fa-sort-up text-indigo-600' : 'fa-sort-down text-indigo-600';
|
||||
};
|
||||
?>
|
||||
|
||||
<div class="max-w-7xl mx-auto space-y-6 pb-12">
|
||||
|
||||
|
||||
<div class="flex flex-col md:flex-row md:items-center justify-between gap-4 px-2">
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight leading-none mb-1 uppercase">Kategori Manager</h2>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-[0.2em]">Master data kategori ILY Cattery</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3">
|
||||
<?php if(auth()->user()->role === 'admin'): ?>
|
||||
<button type="button" onclick="confirmRecategorize()" class="inline-flex items-center px-5 py-2.5 bg-emerald-50 text-emerald-600 border border-emerald-100 text-[10px] font-black rounded-xl hover:bg-emerald-600 hover:text-white transition-all shadow-sm active:scale-95">
|
||||
<i class="fas fa-sync-alt mr-2"></i> RE-CATEGORIZE ALL
|
||||
</button>
|
||||
<form id="form-recategorize" action="<?php echo e(route('categories.recategorize')); ?>" method="POST" class="hidden">
|
||||
<?php echo csrf_field(); ?>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['categories', 'create'])): ?>
|
||||
<button onclick="toggleCreateForm()" class="inline-flex items-center px-5 py-2.5 bg-indigo-600 hover:bg-indigo-700 text-white text-[10px] font-black rounded-xl transition-all shadow-lg active:scale-95">
|
||||
<i class="fas fa-plus-circle mr-2"></i> TAMBAH KATEGORI
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 px-2">
|
||||
<div class="bg-white border border-slate-200 p-6 rounded-[2rem] shadow-sm">
|
||||
<p class="text-[9px] font-black text-slate-400 uppercase tracking-widest">Total Master Kategori</p>
|
||||
<h3 class="text-2xl font-black text-slate-800 mt-1"><?php echo e($totalCategories); ?> <span class="text-xs text-slate-400 font-bold">LABEL</span></h3>
|
||||
</div>
|
||||
<div class="bg-white border border-slate-200 p-6 rounded-[2rem] shadow-sm border-l-4 border-l-indigo-500">
|
||||
<p class="text-[9px] font-black text-indigo-600 uppercase tracking-widest">Kategori Terbaru</p>
|
||||
<h3 class="text-sm font-black text-slate-800 mt-2 uppercase truncate"><?php echo e($latestCategory); ?></h3>
|
||||
</div>
|
||||
<div class="bg-indigo-50 border border-indigo-100 p-6 rounded-[2rem] shadow-sm flex items-center justify-between">
|
||||
<div>
|
||||
<p class="text-[9px] font-black text-indigo-600 uppercase tracking-widest">Status Sinkronisasi</p>
|
||||
<h3 class="text-xs font-black text-indigo-900 mt-1 uppercase tracking-tighter">Deteksi Kategori Aktif</h3>
|
||||
</div>
|
||||
<i class="fas fa-microchip text-indigo-200 text-2xl"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="px-2">
|
||||
<form action="<?php echo e(route('categories.index')); ?>" method="GET" class="relative max-w-md">
|
||||
<input type="hidden" name="sort" value="<?php echo e(request('sort')); ?>">
|
||||
<input type="hidden" name="direction" value="<?php echo e(request('direction')); ?>">
|
||||
|
||||
<i class="fas fa-search absolute left-4 top-1/2 -translate-y-1/2 text-slate-400 text-xs"></i>
|
||||
<input type="text" name="search" value="<?php echo e(request('search')); ?>"
|
||||
placeholder="Cari nama kategori atau kata kunci..."
|
||||
class="w-full pl-12 pr-4 py-3.5 bg-white border border-slate-200 rounded-2xl text-xs font-bold focus:ring-4 focus:ring-indigo-500/10 focus:border-indigo-500 transition-all shadow-sm">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['categories', 'create'])): ?>
|
||||
<div id="create-form" class="<?php echo e($errors->any() ? '' : 'hidden'); ?> bg-white border border-indigo-100 rounded-[2.5rem] p-8 shadow-xl shadow-indigo-100/50 animate-fade-in-down mx-2">
|
||||
<div class="flex items-center gap-3 mb-6 border-b border-slate-50 pb-4">
|
||||
<i class="fas fa-plus-circle text-indigo-600"></i>
|
||||
<h4 class="text-xs font-black text-slate-800 uppercase tracking-widest">Entry Master Data Baru</h4>
|
||||
</div>
|
||||
<form action="<?php echo e(route('categories.store')); ?>" method="POST" class="grid grid-cols-1 md:grid-cols-7 gap-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<div class="md:col-span-2 space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Nama Kategori</label>
|
||||
<input type="text" name="name" value="<?php echo e(old('name')); ?>" required placeholder="Contoh: Antibiotik"
|
||||
class="w-full px-4 py-4 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all outline-none">
|
||||
</div>
|
||||
<div class="md:col-span-3 space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Kata Kunci Deteksi (Pisah Koma)</label>
|
||||
<input type="text" name="keywords" value="<?php echo e(old('keywords')); ?>" required placeholder="amoxicillin, doxy, antibiotic"
|
||||
class="w-full px-4 py-4 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all outline-none">
|
||||
</div>
|
||||
<div class="md:col-span-2 flex items-end pb-1">
|
||||
<button type="submit" class="w-full py-4 bg-indigo-600 text-white font-black rounded-2xl text-[10px] uppercase tracking-[0.2em] shadow-lg shadow-indigo-100 hover:bg-indigo-700 transition-all active:scale-95">
|
||||
SIMPAN MASTER DATA
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] overflow-hidden shadow-sm mx-2">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-left border-collapse">
|
||||
<thead class="bg-slate-50 text-[10px] font-black text-slate-400 uppercase tracking-widest border-b border-slate-100">
|
||||
<tr>
|
||||
<th class="px-6 py-5">
|
||||
<a href="<?php echo e(request()->fullUrlWithQuery(['sort' => 'name', 'direction' => $nextDir])); ?>" class="flex items-center gap-2 hover:text-indigo-600 transition-colors">
|
||||
Informasi Kategori <i class="fas <?php echo e($getSortIcon('name')); ?>"></i>
|
||||
</a>
|
||||
</th>
|
||||
<th class="px-6 py-5">Kata Kunci Deteksi</th>
|
||||
<th class="px-6 py-5 text-center">
|
||||
<a href="<?php echo e(request()->fullUrlWithQuery(['sort' => 'created_at', 'direction' => $nextDir])); ?>" class="flex items-center justify-center gap-2 hover:text-indigo-600 transition-colors">
|
||||
Dibuat Pada <i class="fas <?php echo e($getSortIcon('created_at')); ?>"></i>
|
||||
</a>
|
||||
</th>
|
||||
<th class="px-6 py-5 text-right">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $categories; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $cat): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<tr class="hover:bg-slate-50/50 transition-all group">
|
||||
<td class="px-6 py-5">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-10 h-10 rounded-xl bg-indigo-50 flex items-center justify-center text-indigo-500 shrink-0 border border-indigo-100">
|
||||
<i class="fas fa-tag text-xs"></i>
|
||||
</div>
|
||||
<div class="min-w-0">
|
||||
<div class="text-sm font-black text-slate-800 uppercase tracking-tight"><?php echo e($cat->name); ?></div>
|
||||
<div class="text-[9px] text-slate-400 font-bold italic truncate">slug: <?php echo e($cat->slug); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-6 py-5">
|
||||
<div class="flex flex-wrap gap-1.5 max-w-md">
|
||||
<?php $__currentLoopData = explode(',', $cat->keywords); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $word): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<span class="px-2.5 py-1 bg-slate-100 text-slate-500 text-[9px] font-bold rounded-lg border border-slate-200/60 uppercase whitespace-nowrap">
|
||||
<?php echo e(trim($word)); ?>
|
||||
|
||||
</span>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-6 py-5 text-center">
|
||||
<span class="text-[10px] font-bold text-slate-400"><?php echo e($cat->created_at->format('d/m/Y')); ?></span>
|
||||
</td>
|
||||
<td class="px-6 py-5 text-right">
|
||||
<div class="flex justify-end gap-2">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['categories', 'update'])): ?>
|
||||
<a href="<?php echo e(route('categories.edit', $cat->id)); ?>"
|
||||
class="w-9 h-9 flex items-center justify-center bg-amber-50 text-amber-600 hover:bg-amber-600 hover:text-white rounded-xl transition-all shadow-sm"
|
||||
title="Edit Kategori">
|
||||
<i class="fas fa-edit text-xs"></i>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['categories', 'delete'])): ?>
|
||||
<button type="button"
|
||||
onclick="confirmDelete(<?php echo e($cat->id); ?>, '<?php echo e(addslashes($cat->name)); ?>')"
|
||||
class="w-9 h-9 flex items-center justify-center bg-rose-50 text-rose-600 hover:bg-rose-500 hover:text-white rounded-xl transition-all shadow-sm"
|
||||
title="Hapus Kategori">
|
||||
<i class="fas fa-trash-alt text-xs"></i>
|
||||
</button>
|
||||
<form id="delete-form-<?php echo e($cat->id); ?>" action="<?php echo e(route('categories.destroy', $cat->id)); ?>" method="POST" class="hidden">
|
||||
<?php echo csrf_field(); ?> <?php echo method_field('DELETE'); ?>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr>
|
||||
<td colspan="4" class="px-8 py-24 text-center">
|
||||
<div class="flex flex-col items-center">
|
||||
<i class="fas fa-tags text-5xl text-slate-100 mb-4"></i>
|
||||
<h3 class="text-slate-400 font-black uppercase text-xs tracking-[0.4em]">Kategori Kosong</h3>
|
||||
<p class="text-slate-300 text-[10px] font-bold mt-2 uppercase italic tracking-tighter font-mono">Gunakan pencarian lain atau tambahkan data baru</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<?php if($categories->hasPages()): ?>
|
||||
<div class="px-8 py-6 bg-slate-50/50 border-t border-slate-100">
|
||||
<?php echo e($categories->links()); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||
<script>
|
||||
function toggleCreateForm() {
|
||||
const form = document.getElementById('create-form');
|
||||
if (form) form.classList.toggle('hidden');
|
||||
}
|
||||
|
||||
function confirmRecategorize() {
|
||||
Swal.fire({
|
||||
title: 'Sinkronisasi Ulang?',
|
||||
text: "Sistem akan memindai seluruh data persediaan berdasarkan kata kunci terbaru. Ini mungkin memakan waktu.",
|
||||
icon: 'question',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#10b981',
|
||||
confirmButtonText: 'Ya, Sinkronkan!',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { popup: 'rounded-[2rem]' }
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
const form = document.getElementById('form-recategorize');
|
||||
if (form) form.submit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function confirmDelete(id, name) {
|
||||
Swal.fire({
|
||||
title: 'Hapus Kategori?',
|
||||
text: `Kategori "${name}" akan dihapus permanen. Data produk terkait akan kembali ke kategori "Umum".`,
|
||||
icon: 'warning',
|
||||
showCancelButton: true,
|
||||
confirmButtonColor: '#f43f5e',
|
||||
cancelButtonColor: '#64748b',
|
||||
confirmButtonText: 'Ya, Hapus!',
|
||||
cancelButtonText: 'Batal',
|
||||
customClass: { popup: 'rounded-[2rem]' }
|
||||
}).then((result) => {
|
||||
if (result.isConfirmed) {
|
||||
const form = document.getElementById(`delete-form-${id}`);
|
||||
if (form) form.submit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
<?php if(session('success')): ?>
|
||||
Swal.fire({
|
||||
icon: 'success',
|
||||
title: 'Berhasil!',
|
||||
text: "<?php echo e(session('success')); ?>",
|
||||
showConfirmButton: false,
|
||||
timer: 2500,
|
||||
customClass: { popup: 'rounded-[2rem]' },
|
||||
iconColor: '#4f46e5'
|
||||
});
|
||||
<?php endif; ?>
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/inventory/categories/index.blade.php ENDPATH**/ ?>
|
||||
@@ -1,5 +0,0 @@
|
||||
<button <?php echo e($attributes->merge(['type' => 'submit', 'class' => 'inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 transition ease-in-out duration-150'])); ?>>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</button>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/danger-button.blade.php ENDPATH**/ ?>
|
||||
@@ -1,6 +0,0 @@
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" <?php echo e($attributes); ?>>
|
||||
<path d="M5.99996 10.6876C7.10936 10.6876 8.00871 8.58896 8.00871 6.00012C8.00871 3.41129 7.10936 1.31262 5.99996 1.31262C4.89056 1.31262 3.99121 3.41129 3.99121 6.00012C3.99121 8.58896 4.89056 10.6876 5.99996 10.6876Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M1.3125 6.00012H10.6875" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6 10.6876C8.58883 10.6876 10.6875 8.58896 10.6875 6.00012C10.6875 3.41129 8.58883 1.31262 6 1.31262C3.41117 1.31262 1.3125 3.41129 1.3125 6.00012C1.3125 8.58896 3.41117 10.6876 6 10.6876Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/globe.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 1013 B |
@@ -1,240 +0,0 @@
|
||||
<section>
|
||||
<header>
|
||||
<h2 class="text-lg font-medium text-gray-900">
|
||||
<?php echo e(__('Ubah kata sandi')); ?>
|
||||
|
||||
</h2>
|
||||
|
||||
<p class="mt-1 text-sm text-gray-600">
|
||||
<?php echo e(__('Ensure your account is using a long, random password to stay secure.')); ?>
|
||||
|
||||
</p>
|
||||
</header>
|
||||
|
||||
<form method="post" action="<?php echo e(route('password.update')); ?>" class="mt-6 space-y-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('put'); ?>
|
||||
|
||||
<div>
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'update_password_current_password','value' => __('Kata Sandi Saat Ini')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'update_password_current_password','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Kata Sandi Saat Ini'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'update_password_current_password','name' => 'current_password','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'current-password']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'update_password_current_password','name' => 'current_password','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'current-password']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->updatePassword->get('current_password'),'class' => 'mt-2']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->updatePassword->get('current_password')),'class' => 'mt-2']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'update_password_password','value' => __('Kata Sandi Baru')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'update_password_password','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Kata Sandi Baru'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'update_password_password','name' => 'password','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'new-password']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'update_password_password','name' => 'password','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'new-password']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->updatePassword->get('password'),'class' => 'mt-2']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->updatePassword->get('password')),'class' => 'mt-2']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'update_password_password_confirmation','value' => __('Konfirmasi Kata Sandi')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'update_password_password_confirmation','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Konfirmasi Kata Sandi'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'update_password_password_confirmation','name' => 'password_confirmation','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'new-password']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'update_password_password_confirmation','name' => 'password_confirmation','type' => 'password','class' => 'mt-1 block w-full','autocomplete' => 'new-password']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['messages' => $errors->updatePassword->get('password_confirmation'),'class' => 'mt-2']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->updatePassword->get('password_confirmation')),'class' => 'mt-2']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<?php if (isset($component)) { $__componentOriginald411d1792bd6cc877d687758b753742c = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginald411d1792bd6cc877d687758b753742c = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.primary-button','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('primary-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?><?php echo e(__('Save')); ?> <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginald411d1792bd6cc877d687758b753742c)): ?>
|
||||
<?php $attributes = $__attributesOriginald411d1792bd6cc877d687758b753742c; ?>
|
||||
<?php unset($__attributesOriginald411d1792bd6cc877d687758b753742c); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginald411d1792bd6cc877d687758b753742c)): ?>
|
||||
<?php $component = $__componentOriginald411d1792bd6cc877d687758b753742c; ?>
|
||||
<?php unset($__componentOriginald411d1792bd6cc877d687758b753742c); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(session('status') === 'password-updated'): ?>
|
||||
<p
|
||||
x-data="{ show: true }"
|
||||
x-show="show"
|
||||
x-transition
|
||||
x-init="setTimeout(() => show = false, 2000)"
|
||||
class="text-sm text-gray-600"
|
||||
><?php echo e(__('Saved.')); ?></p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/profile/partials/update-password-form.blade.php ENDPATH**/ ?>
|
||||
@@ -1,258 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-5xl mx-auto space-y-6 pb-12" x-data="treatmentForm()">
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="<?php echo e(route('treatments.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight">Edit Rekam Medis</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic uppercase tracking-tighter">Memperbarui Catatan & Penyesuaian Multi-Obat</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="p-4 bg-amber-50 border border-amber-100 rounded-2xl flex items-start gap-3">
|
||||
<i class="fas fa-sync-alt text-amber-500 mt-1 animate-spin-slow"></i>
|
||||
<div>
|
||||
<p class="text-xs font-black text-amber-700 uppercase tracking-widest">Sinkronisasi Inventori Otomatis</p>
|
||||
<p class="text-[11px] text-amber-600 font-medium leading-relaxed">Sistem akan otomatis mengembalikan stok lama yang tercatat dan memotong stok baru berdasarkan perubahan yang Anda simpan di bawah ini.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if($errors->any()): ?>
|
||||
<div class="bg-rose-50 border border-rose-200 rounded-2xl p-6 flex items-start gap-4">
|
||||
<div class="w-10 h-10 bg-rose-100 text-rose-500 rounded-xl flex items-center justify-center shrink-0">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="text-xs font-black text-rose-600 uppercase tracking-widest mb-1">Gagal Menyimpan Data</h4>
|
||||
<ul class="text-[11px] text-rose-500 font-bold list-disc list-inside space-y-1">
|
||||
<?php $__currentLoopData = $errors->all(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $error): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<li><?php echo e($error); ?></li>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo e(route('treatments.update', $treatment->id)); ?>" method="POST" enctype="multipart/form-data" class="space-y-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('PATCH'); ?>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
||||
|
||||
<div class="lg:col-span-1 space-y-6">
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-6 shadow-sm space-y-6">
|
||||
<h4 class="text-xs font-black text-indigo-600 uppercase tracking-widest border-b border-slate-100 pb-3">Data Pasien</h4>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Pasien</label>
|
||||
<select name="cat_id" required class="w-full px-4 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold text-slate-800 focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
<?php $__currentLoopData = $cats; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $cat): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($cat->id); ?>" <?php echo e(old('cat_id', $treatment->cat_id) == $cat->id ? 'selected' : ''); ?>>
|
||||
<?php echo e($cat->nama_kucing); ?> (<?php echo e($cat->ras); ?>)
|
||||
</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Tanggal Pemeriksaan</label>
|
||||
<input type="date" name="tanggal" value="<?php echo e(old('tanggal', $treatment->tanggal->format('Y-m-d'))); ?>" required class="w-full px-4 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold focus:ring-2 focus:ring-indigo-500 transition-all">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-6 shadow-sm space-y-4">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Lampiran Foto Bukti</label>
|
||||
<div class="relative group">
|
||||
<div class="w-full h-48 rounded-3xl bg-slate-50 border-2 border-dashed border-slate-200 overflow-hidden shadow-inner flex items-center justify-center">
|
||||
<img id="preview" src="<?php echo e($treatment->foto_bukti ? asset('storage/' . $treatment->foto_bukti) : 'https://ui-avatars.com/api/?name=No+Photo&background=f1f5f9&color=94a3b8'); ?>" class="w-full h-full object-cover">
|
||||
</div>
|
||||
<input type="file" name="foto_bukti" onchange="previewImage(event)" class="mt-3 w-full text-[10px] font-black text-slate-400 file:mr-3 file:py-2 file:px-4 file:rounded-full file:border-0 file:text-[9px] file:font-black file:bg-indigo-50 file:text-indigo-600 hover:file:bg-indigo-100 cursor-pointer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="lg:col-span-2 space-y-6">
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6">
|
||||
<h4 class="text-xs font-black text-rose-600 uppercase tracking-widest border-b border-slate-100 pb-3">Diagnosa Klinik</h4>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Keluhan Utama</label>
|
||||
<input type="text" name="keluhan" value="<?php echo e(old('keluhan', $treatment->keluhan)); ?>" required class="w-full px-4 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold focus:ring-2 focus:ring-rose-500 transition-all">
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-1">Hasil Diagnosa & Tindakan</label>
|
||||
<textarea name="diagnosa" rows="4" required class="w-full px-4 py-3 bg-slate-50 border border-slate-200 rounded-2xl text-sm font-bold focus:ring-2 focus:ring-rose-500 transition-all"><?php echo e(old('diagnosa', $treatment->diagnosa)); ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6">
|
||||
<div class="flex items-center justify-between border-b border-slate-100 pb-4">
|
||||
<h4 class="text-xs font-black text-emerald-600 uppercase tracking-widest">Penyesuaian Resep & Stok</h4>
|
||||
<button type="button" @click="addMedicine" class="px-4 py-2 bg-emerald-50 text-emerald-600 text-[10px] font-black rounded-xl hover:bg-emerald-600 hover:text-white transition-all flex items-center gap-2">
|
||||
<i class="fas fa-plus"></i> TAMBAH OBAT LAIN
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="space-y-4">
|
||||
|
||||
<div class="hidden md:grid grid-cols-12 gap-4 px-4 text-[9px] font-black text-slate-400 uppercase tracking-widest">
|
||||
<div class="col-span-4">Nama Obat</div>
|
||||
<div class="col-span-2 text-center">Jumlah</div>
|
||||
<div class="col-span-1"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<template x-for="(item, index) in items" :key="index">
|
||||
<div class="grid grid-cols-1 md:grid-cols-12 gap-3 bg-slate-50 p-4 md:p-2 rounded-2xl items-center border border-slate-100 transition-all">
|
||||
|
||||
<div class="col-span-1 md:col-span-4">
|
||||
<label class="md:hidden text-[9px] font-black text-slate-400 uppercase tracking-widest mb-1 block">Obat</label>
|
||||
<select :name="`items[${index}][medicine_id]`"
|
||||
x-model="item.medicine_id"
|
||||
@change="updateUnit(index)"
|
||||
required
|
||||
class="w-full px-3 py-2 bg-white border border-slate-200 rounded-xl text-xs font-bold focus:ring-emerald-500">
|
||||
<option value="">-- Pilih --</option>
|
||||
<?php $__currentLoopData = $medicines; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $med): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($med->id); ?>" data-unit="<?php echo e($med->unit); ?>">
|
||||
<?php echo e($med->nama_obat); ?> (Stok: <?php echo e((float)$med->qty); ?> <?php echo e($med->unit); ?>)
|
||||
</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-span-1 md:col-span-2">
|
||||
<label class="md:hidden text-[9px] font-black text-slate-400 uppercase tracking-widest mb-1 block">Qty Potong Stok</label>
|
||||
<div class="relative">
|
||||
<input type="number" :name="`items[${index}][qty_used]`" x-model="item.qty_used" step="0.01" required
|
||||
class="w-full pl-3 pr-8 py-2 bg-white border border-slate-200 rounded-xl text-xs font-black">
|
||||
<span class="absolute right-2 top-1/2 -translate-y-1/2 text-[8px] font-black text-slate-300" x-text="item.unit"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-span-1 md:col-span-1 text-center mt-2 md:mt-0">
|
||||
<button type="button" @click="removeItem(index)" x-show="items.length > 1" class="w-8 h-8 inline-flex items-center justify-center bg-rose-50 text-rose-500 rounded-lg hover:bg-rose-500 hover:text-white transition-all">
|
||||
<i class="fas fa-times text-xs"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="w-full py-5 bg-slate-900 text-white text-sm font-black rounded-3xl shadow-xl hover:bg-indigo-600 transition-all active:scale-[0.98] flex items-center justify-center gap-2">
|
||||
<i class="fas fa-save"></i> PERBARUI REKAM MEDIS & SINKRONISASI STOK
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
|
||||
|
||||
<?php
|
||||
// [FIX ERROR SYNTAX BLADE]
|
||||
$mappedItems = [];
|
||||
$oldItems = old('items');
|
||||
|
||||
if ($oldItems) {
|
||||
$mappedItems = $oldItems;
|
||||
} else {
|
||||
if (isset($treatment->details) && $treatment->details->count() > 0) {
|
||||
$mappedItems = $treatment->details->map(function($detail) {
|
||||
return [
|
||||
'medicine_id' => $detail->medicine_id,
|
||||
'qty_used' => (float) $detail->qty_used,
|
||||
'unit' => $detail->medicine->unit ?? 'UNIT',
|
||||
'dosis' => $detail->dosis ?? '',
|
||||
'keterangan' => $detail->keterangan ?? '',
|
||||
];
|
||||
})->toArray();
|
||||
} else {
|
||||
$mappedItems = [[
|
||||
'medicine_id' => $treatment->medicine_id,
|
||||
'qty_used' => (float) $treatment->qty_used,
|
||||
'unit' => $treatment->medicine->unit ?? 'UNIT',
|
||||
'dosis' => $treatment->dosis ?? '',
|
||||
'keterangan' => $treatment->keterangan ?? '',
|
||||
]];
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<script>
|
||||
function treatmentForm() {
|
||||
return {
|
||||
items: <?php echo json_encode($mappedItems, 15, 512) ?>,
|
||||
|
||||
addMedicine() {
|
||||
this.items.push({
|
||||
medicine_id: '',
|
||||
qty_used: 1,
|
||||
unit: 'UNIT',
|
||||
dosis: '',
|
||||
keterangan: ''
|
||||
});
|
||||
},
|
||||
|
||||
removeItem(index) {
|
||||
this.items.splice(index, 1);
|
||||
},
|
||||
|
||||
updateUnit(index) {
|
||||
setTimeout(() => {
|
||||
const select = document.querySelectorAll('select[name^="items"]')[index];
|
||||
if (select) {
|
||||
const selectedOption = select.options[select.selectedIndex];
|
||||
const unit = selectedOption.getAttribute('data-unit');
|
||||
this.items[index].unit = unit ? unit : 'UNIT';
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function previewImage(event) {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function() {
|
||||
const output = document.getElementById('preview');
|
||||
output.src = reader.result;
|
||||
}
|
||||
if(event.target.files[0]) {
|
||||
reader.readAsDataURL(event.target.files[0]);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/treatments/edit.blade.php ENDPATH**/ ?>
|
||||
@@ -1,247 +0,0 @@
|
||||
<section class="space-y-6">
|
||||
<header>
|
||||
<h2 class="text-lg font-medium text-gray-900">
|
||||
<?php echo e(__('Informasi profil')); ?>
|
||||
|
||||
</h2>
|
||||
<p class="mt-1 text-sm text-gray-600">
|
||||
<?php echo e(__("Update your account's profile information and email address.")); ?>
|
||||
|
||||
</p>
|
||||
</header>
|
||||
|
||||
|
||||
<form id="send-verification" method="post" action="<?php echo e(route('verification.send')); ?>">
|
||||
<?php echo csrf_field(); ?>
|
||||
</form>
|
||||
|
||||
<form method="post" action="<?php echo e(route('profile.update')); ?>" class="mt-6 space-y-6">
|
||||
<?php echo csrf_field(); ?>
|
||||
<?php echo method_field('patch'); ?>
|
||||
|
||||
<div>
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'name','value' => __('Name')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'name','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Name'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'name','name' => 'name','type' => 'text','class' => 'mt-1 block w-full','value' => old('name', $user->name),'required' => true,'autofocus' => true,'autocomplete' => 'name']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'name','name' => 'name','type' => 'text','class' => 'mt-1 block w-full','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(old('name', $user->name)),'required' => true,'autofocus' => true,'autocomplete' => 'name']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['class' => 'mt-2','messages' => $errors->get('name')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'mt-2','messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('name'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<?php if (isset($component)) { $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-label','data' => ['for' => 'email','value' => __('Email')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-label'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['for' => 'email','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(__('Email'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $attributes = $__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__attributesOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581)): ?>
|
||||
<?php $component = $__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581; ?>
|
||||
<?php unset($__componentOriginale3da9d84bb64e4bc2eeebaafabfb2581); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal18c21970322f9e5c938bc954620c12bb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal18c21970322f9e5c938bc954620c12bb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.text-input','data' => ['id' => 'email','name' => 'email','type' => 'email','class' => 'mt-1 block w-full','value' => old('email', $user->email),'required' => true,'autocomplete' => 'username']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('text-input'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['id' => 'email','name' => 'email','type' => 'email','class' => 'mt-1 block w-full','value' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(old('email', $user->email)),'required' => true,'autocomplete' => 'username']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $attributes = $__attributesOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__attributesOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal18c21970322f9e5c938bc954620c12bb)): ?>
|
||||
<?php $component = $__componentOriginal18c21970322f9e5c938bc954620c12bb; ?>
|
||||
<?php unset($__componentOriginal18c21970322f9e5c938bc954620c12bb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginalf94ed9c5393ef72725d159fe01139746 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalf94ed9c5393ef72725d159fe01139746 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.input-error','data' => ['class' => 'mt-2','messages' => $errors->get('email')]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('input-error'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'mt-2','messages' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($errors->get('email'))]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $attributes = $__attributesOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__attributesOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalf94ed9c5393ef72725d159fe01139746)): ?>
|
||||
<?php $component = $__componentOriginalf94ed9c5393ef72725d159fe01139746; ?>
|
||||
<?php unset($__componentOriginalf94ed9c5393ef72725d159fe01139746); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if($user instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! $user->hasVerifiedEmail()): ?>
|
||||
|
||||
<div class="mt-2">
|
||||
<p class="text-sm text-gray-800">
|
||||
<?php echo e(__('Your email address is unverified.')); ?>
|
||||
|
||||
<button form="send-verification" class="underline text-sm text-gray-600 hover:text-gray-900">
|
||||
<?php echo e(__('Click here to re-send the verification email.')); ?>
|
||||
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-4">
|
||||
<?php if (isset($component)) { $__componentOriginald411d1792bd6cc877d687758b753742c = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginald411d1792bd6cc877d687758b753742c = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.primary-button','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('primary-button'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?><?php echo e(__('Save')); ?> <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginald411d1792bd6cc877d687758b753742c)): ?>
|
||||
<?php $attributes = $__attributesOriginald411d1792bd6cc877d687758b753742c; ?>
|
||||
<?php unset($__attributesOriginald411d1792bd6cc877d687758b753742c); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginald411d1792bd6cc877d687758b753742c)): ?>
|
||||
<?php $component = $__componentOriginald411d1792bd6cc877d687758b753742c; ?>
|
||||
<?php unset($__componentOriginald411d1792bd6cc877d687758b753742c); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<hr class="border-slate-100 my-8">
|
||||
|
||||
|
||||
<div class="p-8 bg-indigo-600 rounded-[2.5rem] text-white shadow-xl shadow-indigo-100 relative overflow-hidden group">
|
||||
<div class="relative z-10">
|
||||
<div class="flex items-center gap-4 mb-6">
|
||||
<div class="w-12 h-12 bg-white/20 backdrop-blur-md rounded-2xl flex items-center justify-center border border-white/30">
|
||||
<i class="fas fa-fingerprint text-xl text-white"></i>
|
||||
</div>
|
||||
<div>
|
||||
<h4 class="text-sm font-black uppercase tracking-widest">Keamanan Biometrik</h4>
|
||||
<p class="text-[10px] text-indigo-100 font-bold uppercase tracking-tighter opacity-80">Passkeys • Face ID • Windows Hello</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-indigo-50 mb-6 leading-relaxed max-w-sm">
|
||||
Daftarkan wajah atau sidik jari Anda. Setelah terdaftar, Anda bisa masuk ke sistem tanpa perlu mengetik password lagi.
|
||||
</p>
|
||||
|
||||
<button type="button" id="register-passkey"
|
||||
class="inline-flex items-center px-6 py-3 bg-white text-indigo-600 rounded-xl font-black text-[10px] uppercase tracking-widest hover:bg-indigo-50 transition-all shadow-lg active:scale-95 disabled:opacity-50">
|
||||
<i class="fas fa-plus-circle mr-2"></i> DAFTARKAN WAJAH SEKARANG
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<i class="fas fa-shield-check absolute -bottom-6 -right-6 text-9xl text-white/10 -rotate-12"></i>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<script type="module">
|
||||
// 1. Ambil objek UTAMA (Default Export), bukan fungsi named-nya
|
||||
import WebAuthn from "<?php echo e(asset('vendor/webauthn/webauthn.js')); ?>";
|
||||
|
||||
const regBtn = document.getElementById('register-passkey');
|
||||
|
||||
if (regBtn) {
|
||||
regBtn.addEventListener('click', async () => {
|
||||
const btn = regBtn;
|
||||
const originalText = btn.innerHTML;
|
||||
|
||||
try {
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i> MENUNGGU SCAN...';
|
||||
|
||||
// 2. Panggil fungsi register melalui objek WebAuthn
|
||||
const response = await WebAuthn.register();
|
||||
|
||||
if (response.success) {
|
||||
alert("Berhasil! Wajah/Sidik Jari telah terdaftar.");
|
||||
window.location.reload();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
alert("Pendaftaran gagal. Pastikan perangkat mendukung biometrik.");
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = originalText;
|
||||
}
|
||||
});
|
||||
}
|
||||
</script><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/profile/partials/update-profile-information-form.blade.php ENDPATH**/ ?>
|
||||
@@ -1,170 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-3xl mx-auto py-12 px-4">
|
||||
|
||||
<div class="flex items-center gap-6 mb-10">
|
||||
<a href="<?php echo e(route('cats.show', $cat->id)); ?>" class="p-4 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 uppercase tracking-tight">Add Routine Ledger</h2>
|
||||
<p class="text-sm text-slate-400 font-bold uppercase tracking-widest">Logging for: <?php echo e($cat->nama_kucing); ?></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white rounded-[3rem] shadow-xl border border-slate-100 overflow-hidden">
|
||||
<div class="p-10">
|
||||
<form action="<?php echo e(route('medical-records.store')); ?>" method="POST" class="space-y-8">
|
||||
<?php echo csrf_field(); ?>
|
||||
<input type="hidden" name="cat_id" value="<?php echo e($cat->id); ?>">
|
||||
|
||||
|
||||
<div class="space-y-3">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-2">Jenis Tindakan</label>
|
||||
<select name="type" id="type_selector" onchange="adjustMedicalForm()" class="w-full px-6 py-5 bg-slate-50 border-none rounded-3xl text-sm font-black text-slate-800 focus:ring-4 focus:ring-indigo-500/10 transition-all cursor-pointer">
|
||||
<option value="Vaccine">Vaksinasi</option>
|
||||
<option value="Deworming">Obat Cacing</option>
|
||||
<option value="Flea Treatment">Obat Kutu</option>
|
||||
<option value="Grooming">Grooming</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="medicine_container" class="space-y-4">
|
||||
<div class="medicine-row p-6 bg-slate-50 rounded-[2.5rem] border border-slate-100 space-y-4">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 medicine-row-inner">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Produk/Obat</label>
|
||||
|
||||
<input type="text" name="medicines[0][name]" id="med_name_input" list="medicine-list" required
|
||||
oninput="autoFillMedicine(this)"
|
||||
onchange="autoFillMedicine(this)"
|
||||
class="medicine-name-input w-full px-5 py-4 border-none rounded-2xl text-xs font-black bg-white shadow-sm focus:ring-4 focus:ring-indigo-500/10" placeholder="Ketik atau pilih obat...">
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div class="space-y-2">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Dosis</label>
|
||||
<input type="text" name="medicines[0][dosage]" id="med_dosage_input" placeholder="e.g. 1/2 atau 1" required
|
||||
class="dosage-input w-full px-5 py-4 border-none rounded-2xl text-xs font-black bg-white shadow-sm focus:ring-4 focus:ring-indigo-500/10">
|
||||
</div>
|
||||
<div class="space-y-2">
|
||||
<label class="text-[9px] font-black text-slate-400 uppercase ml-2">Satuan</label>
|
||||
<input type="text" name="medicines[0][unit]" id="med_unit_input" readonly
|
||||
class="unit-display w-full px-5 py-4 bg-slate-100 border-none rounded-2xl text-[10px] font-black text-slate-400 cursor-not-allowed outline-none">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<div class="space-y-3">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-2">Tanggal Tindakan</label>
|
||||
<input type="date" name="date_given" value="<?php echo e(date('Y-m-d')); ?>" required class="w-full px-6 py-5 bg-slate-50 border-none rounded-3xl text-sm font-black focus:ring-4 focus:ring-indigo-500/10">
|
||||
</div>
|
||||
<div class="space-y-3">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-2">Jadwal Berikutnya</label>
|
||||
<input type="date" name="next_schedule" class="w-full px-6 py-5 bg-slate-50 border-none rounded-3xl text-sm font-black focus:ring-4 focus:ring-indigo-500/10">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="space-y-3">
|
||||
<label class="text-[10px] font-black text-slate-400 uppercase tracking-widest ml-2">Notes</label>
|
||||
<textarea name="notes" placeholder="Catatan opsional..." class="w-full px-6 py-5 bg-slate-50 border-none rounded-3xl text-sm font-bold h-32 focus:ring-4 focus:ring-indigo-500/10"></textarea>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="w-full py-6 bg-indigo-600 text-white rounded-[2rem] font-black uppercase text-xs tracking-[0.3em] shadow-2xl shadow-indigo-200 hover:bg-indigo-700 transition-all transform active:scale-95">
|
||||
Confirm & Log Routine Ledger
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<datalist id="medicine-list">
|
||||
<?php $__currentLoopData = $availableMedicines; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $med): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($med->nama_obat); ?>"></option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</datalist>
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script>
|
||||
// 1. Tarik Data Master Obat dari Database ke JavaScript
|
||||
const masterObatData = <?php echo json_encode($availableMedicines); ?>;
|
||||
|
||||
// 2. Tampilkan/Sembunyikan Form Obat berdasarkan "Jenis Tindakan"
|
||||
function adjustMedicalForm() {
|
||||
const type = document.getElementById('type_selector').value;
|
||||
const container = document.getElementById('medicine_container');
|
||||
const nameInput = document.getElementById('med_name_input');
|
||||
const dosageInput = document.getElementById('med_dosage_input');
|
||||
const unitInput = document.getElementById('med_unit_input');
|
||||
|
||||
if (type === 'Grooming') {
|
||||
// Grooming tidak butuh obat
|
||||
container.style.display = 'none';
|
||||
nameInput.required = false;
|
||||
dosageInput.required = false;
|
||||
} else {
|
||||
container.style.display = 'block';
|
||||
nameInput.required = true;
|
||||
dosageInput.required = true;
|
||||
|
||||
// Jika nama obat masih kosong, set satuan default berdasarkan jenis tindakan
|
||||
const fallbackUnit = { 'Vaccine': 'PCS', 'Deworming': 'TABLET', 'Flea Treatment': 'ML' };
|
||||
if (nameInput.value === '') {
|
||||
unitInput.value = fallbackUnit[type] || 'PCS';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Fungsi Cerdas: Auto-Fill Dosis dan Satuan
|
||||
function autoFillMedicine(inputElement) {
|
||||
const row = inputElement.closest('.medicine-row-inner');
|
||||
const unitInput = row.querySelector('.unit-display');
|
||||
const dosageInput = row.querySelector('.dosage-input');
|
||||
|
||||
// Cari kecocokan nama obat dengan data master (Tidak sensitif huruf besar/kecil)
|
||||
const selectedMedicine = masterObatData.find(med => med.nama_obat.toLowerCase() === inputElement.value.toLowerCase());
|
||||
|
||||
if (selectedMedicine) {
|
||||
// Jika obat terdaftar di database, ambil satuannya!
|
||||
unitInput.value = selectedMedicine.unit;
|
||||
|
||||
// Beri nilai otomatis "1" pada dosis jika masih kosong untuk mempercepat input
|
||||
if (!dosageInput.value) {
|
||||
dosageInput.value = '1';
|
||||
}
|
||||
} else {
|
||||
// Jika obat diketik manual (tidak ada di database), kembalikan ke satuan default
|
||||
const type = document.getElementById('type_selector').value;
|
||||
const fallbackUnit = { 'Vaccine': 'PCS', 'Deworming': 'TABLET', 'Flea Treatment': 'ML' };
|
||||
unitInput.value = fallbackUnit[type] || 'PCS';
|
||||
}
|
||||
}
|
||||
|
||||
// Jalankan saat halaman pertama kali dimuat
|
||||
document.addEventListener('DOMContentLoaded', adjustMedicalForm);
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/cats/medical-ledger-create.blade.php ENDPATH**/ ?>
|
||||
@@ -1,6 +0,0 @@
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg" <?php echo e($attributes); ?>>
|
||||
<path d="M2.75 2.75H5.614L5.316 2.114C5.069 1.587 4.54 1.25 3.958 1.25H2.25C1.422 1.25 0.75 1.922 0.75 2.75V4.75C0.75 3.645 1.645 2.75 2.75 2.75Z" />
|
||||
<path d="M0.75 4.75V2.75C0.75 1.922 1.422 1.25 2.25 1.25H3.958C4.54 1.25 5.069 1.587 5.316 2.114L5.614 2.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2.75 2.75H9.25C10.355 2.75 11.25 3.645 11.25 4.75V8.25C11.25 9.355 10.355 10.25 9.25 10.25H2.75C1.645 10.25 0.75 9.355 0.75 8.25V4.75C0.75 3.645 1.645 2.75 2.75 2.75Z" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/folder.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 927 B |
@@ -1,367 +0,0 @@
|
||||
<?php
|
||||
$appName = \App\Models\Setting::where('key', 'app_name')->value('value') ?? 'ILY Cattery';
|
||||
$appLogo = \App\Models\Setting::where('key', 'app_logo')->value('value');
|
||||
$lowMedicinesCount = \App\Models\Medicine::where('qty', '<', 5)->count();
|
||||
$lowMakananCount = \App\Models\Food::where('qty', '<', 5)->count();
|
||||
?>
|
||||
|
||||
<div x-show="sidebarOpen" x-cloak @click="sidebarOpen=false" class="fixed inset-0 z-30 bg-slate-900/30 lg:hidden"></div>
|
||||
<aside :class="sidebarOpen ? 'translate-x-0' : '-translate-x-full lg:translate-x-0'"
|
||||
class="fixed inset-y-0 left-0 z-40 flex w-64 shrink-0 flex-col border-r border-slate-200 bg-white transition-transform duration-200 lg:static lg:z-auto">
|
||||
<div class="flex h-16 items-center gap-3 border-b border-slate-200 px-5">
|
||||
<?php if($appLogo): ?>
|
||||
<img src="<?php echo e(Storage::url($appLogo)); ?>" alt="Logo <?php echo e($appName); ?>" class="h-9 w-9 rounded-lg object-contain">
|
||||
<?php else: ?>
|
||||
<div class="flex h-9 w-9 items-center justify-center rounded-lg bg-indigo-600 text-white"><i class="fas fa-cat"></i></div>
|
||||
<?php endif; ?>
|
||||
<div class="min-w-0">
|
||||
<div class="truncate text-sm font-bold text-slate-900"><?php echo e($appName); ?></div>
|
||||
<div class="text-xs text-slate-500">Manajemen cattery</div>
|
||||
</div>
|
||||
<button @click="sidebarOpen=false" class="ml-auto p-2 text-slate-400 lg:hidden" aria-label="Tutup menu"><i class="fas fa-times"></i></button>
|
||||
</div>
|
||||
|
||||
<nav class="flex-1 overflow-y-auto px-3 py-4">
|
||||
<div class="space-y-1">
|
||||
<?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('dashboard'),'active' => request()->routeIs('dashboard'),'icon' => 'fa-chart-column']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('dashboard')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('dashboard')),'icon' => 'fa-chart-column']); ?>Beranda <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if(Gate::allows('check-access', ['cats','read']) || Gate::allows('check-access', ['matting','read']) || Gate::allows('check-access', ['treatments','read'])): ?>
|
||||
<div class="mt-6">
|
||||
<p class="px-3 pb-2 text-xs font-semibold text-slate-400">Operasional</p>
|
||||
<div class="space-y-1">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['cats','read'])): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('cats.index'),'active' => request()->routeIs('cats.*'),'icon' => 'fa-cat']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('cats.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('cats.*')),'icon' => 'fa-cat']); ?>Data kucing <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['matting','read'])): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('matting.index'),'active' => request()->routeIs('matting.*'),'icon' => 'fa-venus-mars']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('matting.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('matting.*')),'icon' => 'fa-venus-mars']); ?>Perkawinan & pembiakan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['treatments','read'])): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('treatments.index'),'active' => request()->routeIs('treatments.*'),'icon' => 'fa-notes-medical']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('treatments.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('treatments.*')),'icon' => 'fa-notes-medical']); ?>Rekam medis <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['medical_insights','read'])): ?>
|
||||
<?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('medical.dashboard'),'active' => request()->routeIs('medical.dashboard'),'icon' => 'fa-heart-pulse']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('medical.dashboard')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('medical.dashboard')),'icon' => 'fa-heart-pulse']); ?>Ringkasan kesehatan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(Gate::allows('check-access', ['medicines','read']) || Gate::allows('check-access', ['foods','read']) || Gate::allows('check-access', ['supplies','read']) || Gate::allows('check-access', ['categories','read'])): ?>
|
||||
<div class="mt-6">
|
||||
<div class="flex items-center justify-between px-3 pb-2">
|
||||
<p class="text-xs font-semibold text-slate-400">Inventori</p>
|
||||
<?php if(($lowMedicinesCount+$lowMakananCount)>0): ?><span class="rounded bg-rose-50 px-1.5 py-0.5 text-xs font-semibold text-rose-600"><?php echo e($lowMedicinesCount+$lowMakananCount); ?></span><?php endif; ?>
|
||||
</div>
|
||||
<div class="space-y-1">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['medicines','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('inventory.medicines.index'),'active' => request()->routeIs('inventory.medicines.*'),'icon' => 'fa-pills']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('inventory.medicines.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('inventory.medicines.*')),'icon' => 'fa-pills']); ?>Medicine & vitamin <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['foods','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('inventory.foods.index'),'active' => request()->routeIs('inventory.foods.*'),'icon' => 'fa-bowl-food']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('inventory.foods.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('inventory.foods.*')),'icon' => 'fa-bowl-food']); ?>Makanan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['supplies','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('inventory.supplies.index'),'active' => request()->routeIs('inventory.supplies.*'),'icon' => 'fa-box']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('inventory.supplies.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('inventory.supplies.*')),'icon' => 'fa-box']); ?>Perlengkapan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['categories','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('categories.index'),'active' => request()->routeIs('categories.*'),'icon' => 'fa-tags']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('categories.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('categories.*')),'icon' => 'fa-tags']); ?>Kategori <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(Gate::allows('check-access', ['reports','read']) || Gate::allows('check-access', ['matting_reports','read'])): ?>
|
||||
<div class="mt-6">
|
||||
<p class="px-3 pb-2 text-xs font-semibold text-slate-400">Laporan</p>
|
||||
<div class="space-y-1">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['reports','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.reports.index'),'active' => request()->routeIs('admin.reports.index'),'icon' => 'fa-chart-line']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.reports.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.reports.index')),'icon' => 'fa-chart-line']); ?>Pusat laporan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['matting_reports','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.reports.matting.index'),'active' => request()->routeIs('admin.reports.matting.*'),'icon' => 'fa-file-lines']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.reports.matting.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.reports.matting.*')),'icon' => 'fa-file-lines']); ?>Laporan pembiakan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if(Gate::allows('check-access', ['users','read']) || Gate::allows('check-access', ['roles','read']) || Gate::allows('check-access', ['logs','read']) || Gate::allows('check-access', ['settings','read'])): ?>
|
||||
<div class="mt-6">
|
||||
<p class="px-3 pb-2 text-xs font-semibold text-slate-400">Administrasi</p>
|
||||
<div class="space-y-1">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['users','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.users.index'),'active' => request()->routeIs('admin.users.*'),'icon' => 'fa-users']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.users.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.users.*')),'icon' => 'fa-users']); ?>Pengguna <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['roles','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.roles.index'),'active' => request()->routeIs('admin.roles.*'),'icon' => 'fa-user-shield']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.roles.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.roles.*')),'icon' => 'fa-user-shield']); ?>Hak akses <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['logs','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.logs.index'),'active' => request()->routeIs('admin.logs.*'),'icon' => 'fa-clock-rotate-left']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.logs.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.logs.*')),'icon' => 'fa-clock-rotate-left']); ?>Jejak aktivitas <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['settings','read'])): ?><?php if (isset($component)) { $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'components.sidebar-link','data' => ['href' => route('admin.settings.index'),'active' => request()->routeIs('admin.settings.*'),'icon' => 'fa-gear']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('sidebar-link'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['href' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(route('admin.settings.index')),'active' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute(request()->routeIs('admin.settings.*')),'icon' => 'fa-gear']); ?>Pengaturan <?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $attributes = $__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__attributesOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300)): ?>
|
||||
<?php $component = $__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300; ?>
|
||||
<?php unset($__componentOriginal3d3185cbc95d2b4d3b41182ae7d7a300); ?>
|
||||
<?php endif; ?><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</nav>
|
||||
|
||||
<div class="border-t border-slate-200 p-4">
|
||||
<div class="mb-3 flex items-center gap-3 px-1">
|
||||
<div class="flex h-8 w-8 items-center justify-center rounded-full bg-slate-100 text-xs font-bold text-slate-700"><?php echo e(strtoupper(substr(auth()->user()->name,0,1))); ?></div>
|
||||
<div class="min-w-0"><p class="truncate text-sm font-semibold text-slate-800"><?php echo e(auth()->user()->name); ?></p><p class="truncate text-xs text-slate-500"><?php echo e(auth()->user()->roleModel?->name ?? auth()->user()->getRawOriginal('role') ?? 'Pengguna'); ?></p></div>
|
||||
</div>
|
||||
<form method="POST" action="<?php echo e(route('logout')); ?>"><?php echo csrf_field(); ?>
|
||||
<button class="flex w-full items-center gap-3 px-3 py-2 text-sm font-medium text-slate-600 hover:bg-slate-50 hover:text-rose-600"><i class="fas fa-right-from-bracket w-5"></i>Keluar</button>
|
||||
</form>
|
||||
</div>
|
||||
</aside>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/layouts/navigation-sidebar.blade.php ENDPATH**/ ?>
|
||||
@@ -1,393 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginalbbd4eeea836234825f7514ed20d2d52d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalbbd4eeea836234825f7514ed20d2d52d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.layout','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.section-container','data' => ['class' => 'px-6 py-0 sm:py-0']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::section-container'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'px-6 py-0 sm:py-0']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal6769184c81828596613858780a973bc6 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal6769184c81828596613858780a973bc6 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.topbar','data' => ['title' => $exception->title(),'markdown' => $exceptionAsMarkdown]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::topbar'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['title' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->title()),'markdown' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exceptionAsMarkdown)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal6769184c81828596613858780a973bc6)): ?>
|
||||
<?php $attributes = $__attributesOriginal6769184c81828596613858780a973bc6; ?>
|
||||
<?php unset($__attributesOriginal6769184c81828596613858780a973bc6); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal6769184c81828596613858780a973bc6)): ?>
|
||||
<?php $component = $__componentOriginal6769184c81828596613858780a973bc6; ?>
|
||||
<?php unset($__componentOriginal6769184c81828596613858780a973bc6); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $component = $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal40a3de7997c05e5562c4104d90e9b634 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal40a3de7997c05e5562c4104d90e9b634 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.separator','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::separator'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $attributes = $__attributesOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $component = $__componentOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__componentOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.section-container','data' => ['class' => 'flex flex-col gap-8 py-0 sm:py-0']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::section-container'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'flex flex-col gap-8 py-0 sm:py-0']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.header','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557; ?>
|
||||
<?php unset($__attributesOriginal1e817eb3c41fe3ea9eb0c15213c4b557); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557)): ?>
|
||||
<?php $component = $__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557; ?>
|
||||
<?php unset($__componentOriginal1e817eb3c41fe3ea9eb0c15213c4b557); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $component = $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal40a3de7997c05e5562c4104d90e9b634 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal40a3de7997c05e5562c4104d90e9b634 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.separator','data' => ['class' => '-mt-5 -z-10']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::separator'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => '-mt-5 -z-10']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $attributes = $__attributesOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $component = $__componentOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__componentOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.section-container','data' => ['class' => 'flex flex-col gap-8 pt-14']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::section-container'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'flex flex-col gap-8 pt-14']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.trace','data' => ['exception' => $exception]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::trace'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab)): ?>
|
||||
<?php $attributes = $__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab; ?>
|
||||
<?php unset($__attributesOriginal92c1a431b4816bac5d5a20d0fc1238ab); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab)): ?>
|
||||
<?php $component = $__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab; ?>
|
||||
<?php unset($__componentOriginal92c1a431b4816bac5d5a20d0fc1238ab); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalb73d2d8821ad40718c243f895ec0c546 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb73d2d8821ad40718c243f895ec0c546 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.query','data' => ['queries' => $exception->applicationQueries()]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::query'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['queries' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->applicationQueries())]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb73d2d8821ad40718c243f895ec0c546)): ?>
|
||||
<?php $attributes = $__attributesOriginalb73d2d8821ad40718c243f895ec0c546; ?>
|
||||
<?php unset($__attributesOriginalb73d2d8821ad40718c243f895ec0c546); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb73d2d8821ad40718c243f895ec0c546)): ?>
|
||||
<?php $component = $__componentOriginalb73d2d8821ad40718c243f895ec0c546; ?>
|
||||
<?php unset($__componentOriginalb73d2d8821ad40718c243f895ec0c546); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $component = $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal40a3de7997c05e5562c4104d90e9b634 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal40a3de7997c05e5562c4104d90e9b634 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.separator','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::separator'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $attributes = $__attributesOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $component = $__componentOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__componentOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.section-container','data' => ['class' => 'flex flex-col gap-12']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::section-container'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'flex flex-col gap-12']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalcc330c991c1b19cde28fea414de1b6cb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalcc330c991c1b19cde28fea414de1b6cb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.request-header','data' => ['headers' => $exception->requestHeaders()]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::request-header'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['headers' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->requestHeaders())]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalcc330c991c1b19cde28fea414de1b6cb)): ?>
|
||||
<?php $attributes = $__attributesOriginalcc330c991c1b19cde28fea414de1b6cb; ?>
|
||||
<?php unset($__attributesOriginalcc330c991c1b19cde28fea414de1b6cb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalcc330c991c1b19cde28fea414de1b6cb)): ?>
|
||||
<?php $component = $__componentOriginalcc330c991c1b19cde28fea414de1b6cb; ?>
|
||||
<?php unset($__componentOriginalcc330c991c1b19cde28fea414de1b6cb); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal3ce7d5064193f9b8bde76eb6792e715a = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal3ce7d5064193f9b8bde76eb6792e715a = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.request-body','data' => ['body' => $exception->requestBody()]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::request-body'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['body' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->requestBody())]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal3ce7d5064193f9b8bde76eb6792e715a)): ?>
|
||||
<?php $attributes = $__attributesOriginal3ce7d5064193f9b8bde76eb6792e715a; ?>
|
||||
<?php unset($__attributesOriginal3ce7d5064193f9b8bde76eb6792e715a); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal3ce7d5064193f9b8bde76eb6792e715a)): ?>
|
||||
<?php $component = $__componentOriginal3ce7d5064193f9b8bde76eb6792e715a; ?>
|
||||
<?php unset($__componentOriginal3ce7d5064193f9b8bde76eb6792e715a); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal40aab92597234e6686a03fbf91514afb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal40aab92597234e6686a03fbf91514afb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.routing','data' => ['routing' => $exception->applicationRouteContext()]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::routing'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['routing' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->applicationRouteContext())]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal40aab92597234e6686a03fbf91514afb)): ?>
|
||||
<?php $attributes = $__attributesOriginal40aab92597234e6686a03fbf91514afb; ?>
|
||||
<?php unset($__attributesOriginal40aab92597234e6686a03fbf91514afb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal40aab92597234e6686a03fbf91514afb)): ?>
|
||||
<?php $component = $__componentOriginal40aab92597234e6686a03fbf91514afb; ?>
|
||||
<?php unset($__componentOriginal40aab92597234e6686a03fbf91514afb); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal982e77712eb0069b2ae32176000f422d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal982e77712eb0069b2ae32176000f422d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.routing-parameter','data' => ['routeParameters' => $exception->applicationRouteParametersContext()]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::routing-parameter'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['routeParameters' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->applicationRouteParametersContext())]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal982e77712eb0069b2ae32176000f422d)): ?>
|
||||
<?php $attributes = $__attributesOriginal982e77712eb0069b2ae32176000f422d; ?>
|
||||
<?php unset($__attributesOriginal982e77712eb0069b2ae32176000f422d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal982e77712eb0069b2ae32176000f422d)): ?>
|
||||
<?php $component = $__componentOriginal982e77712eb0069b2ae32176000f422d; ?>
|
||||
<?php unset($__componentOriginal982e77712eb0069b2ae32176000f422d); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $component = $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal40a3de7997c05e5562c4104d90e9b634 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal40a3de7997c05e5562c4104d90e9b634 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.separator','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::separator'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $attributes = $__attributesOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__attributesOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal40a3de7997c05e5562c4104d90e9b634)): ?>
|
||||
<?php $component = $__componentOriginal40a3de7997c05e5562c4104d90e9b634; ?>
|
||||
<?php unset($__componentOriginal40a3de7997c05e5562c4104d90e9b634); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.section-container','data' => ['class' => 'pb-0 sm:pb-0']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::section-container'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'pb-0 sm:pb-0']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginal00da9961ee0aae6b56664f2b481f9f2e = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal00da9961ee0aae6b56664f2b481f9f2e = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.laravel-ascii-spotlight','data' => []] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::laravel-ascii-spotlight'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal00da9961ee0aae6b56664f2b481f9f2e)): ?>
|
||||
<?php $attributes = $__attributesOriginal00da9961ee0aae6b56664f2b481f9f2e; ?>
|
||||
<?php unset($__attributesOriginal00da9961ee0aae6b56664f2b481f9f2e); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal00da9961ee0aae6b56664f2b481f9f2e)): ?>
|
||||
<?php $component = $__componentOriginal00da9961ee0aae6b56664f2b481f9f2e; ?>
|
||||
<?php unset($__componentOriginal00da9961ee0aae6b56664f2b481f9f2e); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $attributes = $__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__attributesOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b)): ?>
|
||||
<?php $component = $__componentOriginal1e2fb8a385bff5b6574eeb687cee100b; ?>
|
||||
<?php unset($__componentOriginal1e2fb8a385bff5b6574eeb687cee100b); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalbbd4eeea836234825f7514ed20d2d52d)): ?>
|
||||
<?php $attributes = $__attributesOriginalbbd4eeea836234825f7514ed20d2d52d; ?>
|
||||
<?php unset($__attributesOriginalbbd4eeea836234825f7514ed20d2d52d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalbbd4eeea836234825f7514ed20d2d52d)): ?>
|
||||
<?php $component = $__componentOriginalbbd4eeea836234825f7514ed20d2d52d; ?>
|
||||
<?php unset($__componentOriginalbbd4eeea836234825f7514ed20d2d52d); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/show.blade.php ENDPATH**/ ?>
|
||||
@@ -1,157 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['exception']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['exception']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<div class="flex flex-col pt-8 sm:pt-16 overflow-x-auto">
|
||||
<div class="flex flex-col gap-5 mb-8">
|
||||
<h1 class="text-3xl font-semibold text-neutral-950 dark:text-white"><?php echo e($exception->class()); ?></h1>
|
||||
<?php if (isset($component)) { $__componentOriginalfe2bc8d0a6d110d41fdc8740012cee8d = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalfe2bc8d0a6d110d41fdc8740012cee8d = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.file-with-line','data' => ['frame' => $exception->frames()->first(),'class' => '-mt-3 text-xs']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::file-with-line'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['frame' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->frames()->first()),'class' => '-mt-3 text-xs']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalfe2bc8d0a6d110d41fdc8740012cee8d)): ?>
|
||||
<?php $attributes = $__attributesOriginalfe2bc8d0a6d110d41fdc8740012cee8d; ?>
|
||||
<?php unset($__attributesOriginalfe2bc8d0a6d110d41fdc8740012cee8d); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalfe2bc8d0a6d110d41fdc8740012cee8d)): ?>
|
||||
<?php $component = $__componentOriginalfe2bc8d0a6d110d41fdc8740012cee8d; ?>
|
||||
<?php unset($__componentOriginalfe2bc8d0a6d110d41fdc8740012cee8d); ?>
|
||||
<?php endif; ?>
|
||||
<p class="text-xl font-light text-neutral-800 dark:text-neutral-300">
|
||||
<?php echo e($exception->message()); ?>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-start gap-2 mb-8 sm:mb-16">
|
||||
<div class="bg-white dark:bg-white/[3%] border border-neutral-200 dark:border-white/10 divide-x divide-neutral-200 dark:divide-white/10 rounded-md shadow-xs flex items-center gap-0.5">
|
||||
<div class="flex items-center gap-1.5 h-6 px-[6px] font-mono text-[13px]">
|
||||
<span class="text-neutral-400 dark:text-neutral-500">LARAVEL</span>
|
||||
<span class="text-neutral-500 dark:text-neutral-300"><?php echo e(app()->version()); ?></span>
|
||||
</div>
|
||||
<div class="flex items-center gap-1.5 h-6 px-[6px] font-mono text-[13px]">
|
||||
<span class="text-neutral-400 dark:text-neutral-500">PHP</span>
|
||||
<span class="text-neutral-500 dark:text-neutral-300"><?php echo e(PHP_VERSION); ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php if (isset($component)) { $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.badge','data' => ['type' => 'error']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::badge'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['type' => 'error']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalebc8ec9a834a8051f56913d6745a7050 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalebc8ec9a834a8051f56913d6745a7050 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.alert','data' => ['class' => 'w-2.5 h-2.5']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.alert'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-2.5 h-2.5']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalebc8ec9a834a8051f56913d6745a7050)): ?>
|
||||
<?php $attributes = $__attributesOriginalebc8ec9a834a8051f56913d6745a7050; ?>
|
||||
<?php unset($__attributesOriginalebc8ec9a834a8051f56913d6745a7050); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalebc8ec9a834a8051f56913d6745a7050)): ?>
|
||||
<?php $component = $__componentOriginalebc8ec9a834a8051f56913d6745a7050; ?>
|
||||
<?php unset($__componentOriginalebc8ec9a834a8051f56913d6745a7050); ?>
|
||||
<?php endif; ?>
|
||||
UNHANDLED
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $attributes = $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $component = $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.badge','data' => ['type' => 'error','variant' => 'solid']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::badge'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['type' => 'error','variant' => 'solid']); ?>
|
||||
CODE <?php echo e($exception->code()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $attributes = $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $component = $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginalb581a7e3a55d371fae986833ecafa668 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalb581a7e3a55d371fae986833ecafa668 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.request-url','data' => ['exception' => $exception,'request' => $exception->request(),'class' => 'relative z-50']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::request-url'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['exception' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception),'request' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($exception->request()),'class' => 'relative z-50']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalb581a7e3a55d371fae986833ecafa668)): ?>
|
||||
<?php $attributes = $__attributesOriginalb581a7e3a55d371fae986833ecafa668; ?>
|
||||
<?php unset($__attributesOriginalb581a7e3a55d371fae986833ecafa668); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalb581a7e3a55d371fae986833ecafa668)): ?>
|
||||
<?php $component = $__componentOriginalb581a7e3a55d371fae986833ecafa668; ?>
|
||||
<?php unset($__componentOriginalb581a7e3a55d371fae986833ecafa668); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/header.blade.php ENDPATH**/ ?>
|
||||
@@ -1,98 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames(([
|
||||
'code',
|
||||
'language',
|
||||
'editor' => false,
|
||||
'startingLine' => 1,
|
||||
'highlightedLine' => null,
|
||||
'truncate' => false,
|
||||
]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter(([
|
||||
'code',
|
||||
'language',
|
||||
'editor' => false,
|
||||
'startingLine' => 1,
|
||||
'highlightedLine' => null,
|
||||
'truncate' => false,
|
||||
]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$fallback = $truncate ? '<pre class="truncate"><code>' : '<pre><code>';
|
||||
|
||||
if ($editor) {
|
||||
$lines = explode("\n", $code);
|
||||
|
||||
foreach ($lines as $index => $line) {
|
||||
$lineNumber = $startingLine + $index;
|
||||
$highlight = $highlightedLine === $index;
|
||||
$lineClass = implode(' ', [
|
||||
'block px-4 py-1 h-7 even:bg-white odd:bg-white/2 even:dark:bg-white/2 odd:dark:bg-white/4',
|
||||
$highlight ? 'bg-rose-200! dark:bg-rose-900!' : '',
|
||||
]);
|
||||
$lineNumberClass = implode(' ', [
|
||||
'mr-6 text-neutral-500! dark:text-neutral-600!',
|
||||
$highlight ? 'dark:text-white!' : '',
|
||||
]);
|
||||
|
||||
$fallback .= '<span class="' . $lineClass . '">';
|
||||
$fallback .= '<span class="' . $lineNumberClass . '">' . $lineNumber . '</span>';
|
||||
$fallback .= htmlspecialchars($line);
|
||||
$fallback .= '</span>';
|
||||
}
|
||||
|
||||
} else {
|
||||
$fallback .= htmlspecialchars($code);
|
||||
}
|
||||
|
||||
$fallback .= '</code></pre>';
|
||||
?>
|
||||
|
||||
<div
|
||||
x-data="{ highlightedCode: null }"
|
||||
x-init="
|
||||
highlightedCode = window.highlight(
|
||||
<?php echo e(Illuminate\Support\Js::from($code)); ?>,
|
||||
<?php echo e(Illuminate\Support\Js::from($language)); ?>,
|
||||
<?php echo e(Illuminate\Support\Js::from($truncate)); ?>,
|
||||
<?php echo e(Illuminate\Support\Js::from($editor)); ?>,
|
||||
<?php echo e(Illuminate\Support\Js::from($startingLine)); ?>,
|
||||
<?php echo e(Illuminate\Support\Js::from($highlightedLine)); ?>
|
||||
|
||||
);
|
||||
"
|
||||
<?php echo e($attributes); ?>
|
||||
|
||||
>
|
||||
<div
|
||||
x-cloak
|
||||
x-html="highlightedCode"
|
||||
></div>
|
||||
<div x-show="!highlightedCode"><?php echo $fallback; ?></div>
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/syntax-highlight.blade.php ENDPATH**/ ?>
|
||||
@@ -1,167 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['exception', 'request']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['exception', 'request']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<div
|
||||
x-data="{
|
||||
copied: false,
|
||||
async copyToClipboard() {
|
||||
try {
|
||||
await window.copyToClipboard('<?php echo e($request->fullUrl()); ?>');
|
||||
this.copied = true;
|
||||
setTimeout(() => { this.copied = false }, 3000);
|
||||
} catch (err) {
|
||||
console.error('Failed to copy the requestURL: ', err);
|
||||
}
|
||||
}
|
||||
}"
|
||||
<?php echo e($attributes->merge(['class' => "bg-white dark:bg-[#1a1a1a] border border-neutral-200 dark:border-white/10 rounded-lg flex items-center justify-between h-10 px-2 shadow-xs"])); ?>
|
||||
|
||||
>
|
||||
<div class="flex items-center gap-3 w-full">
|
||||
<?php if (isset($component)) { $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.badge','data' => ['type' => 'error','variant' => 'solid']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::badge'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['type' => 'error','variant' => 'solid']); ?>
|
||||
<?php if (isset($component)) { $__componentOriginalebc8ec9a834a8051f56913d6745a7050 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginalebc8ec9a834a8051f56913d6745a7050 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.alert','data' => ['class' => 'w-2.5 h-2.5']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.alert'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-2.5 h-2.5']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginalebc8ec9a834a8051f56913d6745a7050)): ?>
|
||||
<?php $attributes = $__attributesOriginalebc8ec9a834a8051f56913d6745a7050; ?>
|
||||
<?php unset($__attributesOriginalebc8ec9a834a8051f56913d6745a7050); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginalebc8ec9a834a8051f56913d6745a7050)): ?>
|
||||
<?php $component = $__componentOriginalebc8ec9a834a8051f56913d6745a7050; ?>
|
||||
<?php unset($__componentOriginalebc8ec9a834a8051f56913d6745a7050); ?>
|
||||
<?php endif; ?>
|
||||
<?php echo e($exception->httpStatusCode()); ?>
|
||||
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $attributes = $__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__attributesOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb)): ?>
|
||||
<?php $component = $__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb; ?>
|
||||
<?php unset($__componentOriginal0bc865510ef3ecddbe48edc4e8cc9ddb); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal5131cdd8ffd44ce9fe7ed2c3030dd413 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal5131cdd8ffd44ce9fe7ed2c3030dd413 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.http-method','data' => ['method' => ''.e($request->method()).'']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::http-method'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['method' => ''.e($request->method()).'']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal5131cdd8ffd44ce9fe7ed2c3030dd413)): ?>
|
||||
<?php $attributes = $__attributesOriginal5131cdd8ffd44ce9fe7ed2c3030dd413; ?>
|
||||
<?php unset($__attributesOriginal5131cdd8ffd44ce9fe7ed2c3030dd413); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal5131cdd8ffd44ce9fe7ed2c3030dd413)): ?>
|
||||
<?php $component = $__componentOriginal5131cdd8ffd44ce9fe7ed2c3030dd413; ?>
|
||||
<?php unset($__componentOriginal5131cdd8ffd44ce9fe7ed2c3030dd413); ?>
|
||||
<?php endif; ?>
|
||||
<div class="flex-1 text-sm font-light truncate text-neutral-950 dark:text-white">
|
||||
<span data-tippy-content="<?php echo e($request->fullUrl()); ?>">
|
||||
<?php echo e($request->fullUrl()); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
<button
|
||||
x-cloak
|
||||
@click="copyToClipboard()"
|
||||
class="<?php echo \Illuminate\Support\Arr::toCssClasses([
|
||||
"rounded-md w-6 h-6 flex flex-shrink-0 items-center justify-center cursor-pointer border transition-colors duration-200 ease-in-out",
|
||||
"bg-white/5 border-neutral-200 hover:bg-neutral-100 dark:bg-white/5 dark:border-white/10 dark:hover:bg-white/10",
|
||||
]); ?>"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginal8894ff2e6e6bd543865d608162806b35 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal8894ff2e6e6bd543865d608162806b35 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.copy','data' => ['class' => 'w-3 h-3 text-neutral-400','xShow' => '!copied']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.copy'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-3 h-3 text-neutral-400','x-show' => '!copied']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal8894ff2e6e6bd543865d608162806b35)): ?>
|
||||
<?php $attributes = $__attributesOriginal8894ff2e6e6bd543865d608162806b35; ?>
|
||||
<?php unset($__attributesOriginal8894ff2e6e6bd543865d608162806b35); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal8894ff2e6e6bd543865d608162806b35)): ?>
|
||||
<?php $component = $__componentOriginal8894ff2e6e6bd543865d608162806b35; ?>
|
||||
<?php unset($__componentOriginal8894ff2e6e6bd543865d608162806b35); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal394a4f59b8774713925fcf456ba90b57 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal394a4f59b8774713925fcf456ba90b57 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.check','data' => ['class' => 'w-3 h-3 text-emerald-500','xShow' => 'copied']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.check'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-3 h-3 text-emerald-500','x-show' => 'copied']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal394a4f59b8774713925fcf456ba90b57)): ?>
|
||||
<?php $attributes = $__attributesOriginal394a4f59b8774713925fcf456ba90b57; ?>
|
||||
<?php unset($__attributesOriginal394a4f59b8774713925fcf456ba90b57); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal394a4f59b8774713925fcf456ba90b57)): ?>
|
||||
<?php $component = $__componentOriginal394a4f59b8774713925fcf456ba90b57; ?>
|
||||
<?php unset($__componentOriginal394a4f59b8774713925fcf456ba90b57); ?>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/request-url.blade.php ENDPATH**/ ?>
|
||||
@@ -1,163 +0,0 @@
|
||||
|
||||
<div style="font-family: Helvetica, Arial, sans-serif; color: #334155;">
|
||||
|
||||
<div style="text-align: center; border-bottom: 2px solid #4f46e5; padding-bottom: 15px; margin-bottom: 20px;">
|
||||
<h1 style="margin:0; font-size: 24px; color: #0f172a; letter-spacing: 1px;">MEDICAL REPORT: <?php echo e(strtoupper($cat->nama_kucing)); ?></h1>
|
||||
<p style="margin:5px 0; font-size: 10px; color: #64748b; letter-spacing: 2px;">ILY AREGAU CATTERY MANAGEMENT SYSTEM</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="background-color: #f8fafc; border: 1px solid #e2e8f0; padding: 15px; margin-bottom: 30px; border-radius: 8px; font-size: 11px;">
|
||||
<table style="width: 100%; border-collapse: collapse;">
|
||||
<tr>
|
||||
<td style="width: 50%; vertical-align: top;">
|
||||
<p style="margin: 4px 0;"><strong style="color: #4f46e5;">Cat Name:</strong> <?php echo e($cat->nama_kucing); ?></p>
|
||||
<p style="margin: 4px 0;"><strong style="color: #4f46e5;">Breed / Gender:</strong> <?php echo e($cat->ras); ?> / <?php echo e($cat->jenis_kelamin); ?></p>
|
||||
<p style="margin: 4px 0;"><strong style="color: #4f46e5;">Microchip:</strong> <?php echo e($cat->microchip ?? 'Unchipped'); ?></p>
|
||||
</td>
|
||||
<td style="width: 50%; vertical-align: top; text-align: right;">
|
||||
<p style="margin: 4px 0;"><strong style="color: #4f46e5;">Downloaded By:</strong> <?php echo e(auth()->user()->name ?? 'System Administrator'); ?></p>
|
||||
<p style="margin: 4px 0;"><strong style="color: #4f46e5;">Timestamp:</strong> <?php echo e(\Carbon\Carbon::now()->translatedFormat('d F Y, H:i')); ?> WIB</p>
|
||||
|
||||
<p style="margin: 4px 0;">
|
||||
<strong style="color: #4f46e5;">Summary Records:</strong> <br>
|
||||
<?php echo e($cat->medicalRecords->count()); ?> Routine Log •
|
||||
<span style="color: #e11d48; font-weight: bold;"><?php echo e($cat->treatments->count()); ?> Clinical Log</span> •
|
||||
<?php echo e($cat->weightHistories->count()); ?> Weight Log
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<?php $__currentLoopData = ['Vaccine', 'Deworming', 'Flea Treatment', 'Grooming']; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $type): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php $records = $cat->medicalRecords->where('type', $type)->sortByDesc('date_given'); ?>
|
||||
|
||||
<div style="margin-top: 25px;">
|
||||
<div style="background: #e0e7ff; padding: 8px 12px; border-left: 4px solid #4f46e5; font-weight: bold; font-size: 11px; margin-bottom: 8px; color: #3730a3;">
|
||||
<?php echo e(strtoupper($type)); ?> HISTORY (<?php echo e($records->count()); ?> Data)
|
||||
</div>
|
||||
<table style="width: 100%; border-collapse: collapse; font-size: 10px;">
|
||||
<thead>
|
||||
<tr style="background: #4f46e5; color: white;">
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #4f46e5; width: 15%;">DATE GIVEN</th>
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #4f46e5; width: 30%;">PRODUCT / TREATMENT</th>
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #4f46e5; width: 40%;">NOTES</th>
|
||||
<th style="padding: 8px; text-align: center; border: 1px solid #4f46e5; width: 15%;">NEXT SCHEDULE</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $__empty_1 = true; $__currentLoopData = $records; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $r): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<tr style="background: <?php echo e($loop->even ? '#f8fafc' : '#ffffff'); ?>;">
|
||||
<td style="padding: 8px; border: 1px solid #e2e8f0;"><?php echo e($r->date_given->format('d/m/Y')); ?></td>
|
||||
<td style="padding: 8px; border: 1px solid #e2e8f0; font-weight: bold;">
|
||||
<?php echo e($r->treatment_name); ?>
|
||||
|
||||
<?php if($r->dosage): ?> <br><span style="font-size: 8px; color: #059669; font-weight: normal;">Dose: <?php echo e($r->dosage); ?> <?php echo e($r->unit); ?></span> <?php endif; ?>
|
||||
</td>
|
||||
<td style="padding: 8px; border: 1px solid #e2e8f0; font-style: italic;"><?php echo e($r->notes ?? '-'); ?></td>
|
||||
<td style="padding: 8px; border: 1px solid #e2e8f0; text-align: center;"><?php echo e($r->next_schedule?->format('d/m/Y') ?? '-'); ?></td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr><td colspan="4" style="padding: 10px; text-align: center; color: #94a3b8; border: 1px solid #e2e8f0;">No routine records.</td></tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
|
||||
|
||||
<div style="margin-top: 35px;">
|
||||
<div style="background: #fff1f2; padding: 8px 12px; border-left: 4px solid #e11d48; font-weight: bold; font-size: 11px; margin-bottom: 8px; color: #9f1239;">
|
||||
CLINICAL CASE & TREATMENT HISTORY (<?php echo e($cat->treatments->count()); ?> Data)
|
||||
</div>
|
||||
<table style="width: 100%; border-collapse: collapse; font-size: 10px;">
|
||||
<thead>
|
||||
<tr style="background: #e11d48; color: white;">
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #e11d48; width: 15%;">DATE</th>
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #e11d48; width: 25%;">DIAGNOSIS / COMPLAINT</th>
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #e11d48; width: 25%;">THERAPY (MEDICINE)</th>
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #e11d48; width: 35%;">STATUS & RESOLUTION</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $__empty_1 = true; $__currentLoopData = $cat->treatments->sortByDesc('tanggal'); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $t): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<tr style="background: <?php echo e($loop->even ? '#fff1f2' : '#ffffff'); ?>; vertical-align: top;">
|
||||
<td style="padding: 8px; border: 1px solid #fecdd3;"><?php echo e($t->tanggal->format('d/m/Y')); ?></td>
|
||||
<td style="padding: 8px; border: 1px solid #fecdd3;">
|
||||
<strong style="color: #be123c;"><?php echo e($t->keluhan); ?></strong><br>
|
||||
<span style="font-size: 9px; color: #64748b;"><?php echo e($t->diagnosa); ?></span>
|
||||
</td>
|
||||
<td style="padding: 8px; border: 1px solid #fecdd3;">
|
||||
|
||||
<strong><?php echo e($t->nama_obat ?? ($t->medicine ? $t->medicine->nama_obat : '-')); ?></strong><br>
|
||||
<span style="font-size: 9px;">Dosis/Qty: <?php echo e($t->dosis ?? $t->qty_used); ?></span>
|
||||
</td>
|
||||
<td style="padding: 8px; border: 1px solid #fecdd3;">
|
||||
|
||||
<?php if($t->status_perawatan == 2): ?>
|
||||
<div style="color: #059669; font-weight: bold; margin-bottom: 4px;">✓ RESOLVED (SEMBUH)</div>
|
||||
<?php if($t->remark_pasca_sakit): ?>
|
||||
<div style="font-style: italic; font-size: 9px; color: #475569;">
|
||||
"<?php echo e($t->remark_pasca_sakit); ?>"
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else: ?>
|
||||
<div style="color: #e11d48; font-weight: bold; margin-bottom: 4px;">⚠ ONGOING TREATMENT</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if($t->keterangan): ?>
|
||||
<div style="margin-top: 6px; font-size: 9px; border-top: 1px dashed #fecdd3; padding-top: 4px;">
|
||||
<strong style="color: #94a3b8;">Initial Notes:</strong> <?php echo e($t->keterangan); ?>
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr><td colspan="4" style="padding: 10px; text-align: center; color: #94a3b8; border: 1px solid #fecdd3;">No clinical cases found.</td></tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if($cat->weightHistories->count() > 0): ?>
|
||||
<div style="page-break-before: auto; margin-top: 35px;">
|
||||
<div style="background: #ecfdf5; padding: 8px 12px; border-left: 4px solid #10b981; font-weight: bold; font-size: 11px; margin-bottom: 8px; color: #065f46;">
|
||||
GROWTH & WEIGHT MONITORING (<?php echo e($cat->weightHistories->count()); ?> Data)
|
||||
</div>
|
||||
<table style="width: 100%; border-collapse: collapse; font-size: 10px;">
|
||||
<thead>
|
||||
<tr style="background: #10b981; color: white;">
|
||||
<th style="padding: 8px; text-align: left; border: 1px solid #10b981;">DATE RECORDED</th>
|
||||
<th style="padding: 8px; text-align: center; border: 1px solid #10b981;">WEIGHT (KG)</th>
|
||||
<th style="padding: 8px; text-align: center; border: 1px solid #10b981;">PROGRESSION</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $wLogs = $cat->weightHistories->sortByDesc('created_at')->values(); ?>
|
||||
<?php $__currentLoopData = $wLogs; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $index => $weight): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<?php
|
||||
$trend = '-';
|
||||
$trendColor = '#64748b';
|
||||
if (isset($wLogs[$index + 1])) {
|
||||
$prev = (float)$wLogs[$index + 1]->berat;
|
||||
$curr = (float)$weight->berat;
|
||||
if ($curr > $prev) { $trend = 'Gain ( + )'; $trendColor = '#059669'; }
|
||||
elseif ($curr < $prev) { $trend = 'Loss ( - )'; $trendColor = '#e11d48'; }
|
||||
else { $trend = 'Stable'; }
|
||||
}
|
||||
?>
|
||||
<tr style="background: <?php echo e($loop->even ? '#ecfdf5' : '#ffffff'); ?>;">
|
||||
<td style="padding: 8px; border: 1px solid #d1fae5;"><?php echo e($weight->created_at->format('d M Y, H:i')); ?></td>
|
||||
<td style="padding: 8px; border: 1px solid #d1fae5; text-align: center; font-weight: bold;"><?php echo e($weight->berat); ?> Kg</td>
|
||||
<td style="padding: 8px; border: 1px solid #d1fae5; text-align: center; font-weight: bold; color: <?php echo e($trendColor); ?>;"><?php echo e($trend); ?></td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/reports/medical_history.blade.php ENDPATH**/ ?>
|
||||
@@ -1,170 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['frames']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['frames']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php use \Illuminate\Support\Str; ?>
|
||||
|
||||
<div
|
||||
x-data="{ expanded: false }"
|
||||
class="group rounded-lg border border-neutral-200 dark:border-white/5"
|
||||
:class="{
|
||||
'bg-white dark:bg-white/5 shadow-xs': expanded,
|
||||
'border-dashed border-neutral-300 bg-neutral-50 opacity-90 dark:border-white/10 dark:bg-white/1': !expanded,
|
||||
}"
|
||||
>
|
||||
<div
|
||||
class="flex h-11 cursor-pointer items-center gap-3 rounded-lg pr-2.5 pl-4 hover:bg-white/50 dark:hover:bg-white/2"
|
||||
@click="expanded = !expanded"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginal6936650fa23142238a13a0689c4bfe24 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal6936650fa23142238a13a0689c4bfe24 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.folder','data' => ['class' => 'w-3 h-3 text-neutral-400','xShow' => '!expanded','xCloak' => true]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.folder'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-3 h-3 text-neutral-400','x-show' => '!expanded','x-cloak' => true]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal6936650fa23142238a13a0689c4bfe24)): ?>
|
||||
<?php $attributes = $__attributesOriginal6936650fa23142238a13a0689c4bfe24; ?>
|
||||
<?php unset($__attributesOriginal6936650fa23142238a13a0689c4bfe24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal6936650fa23142238a13a0689c4bfe24)): ?>
|
||||
<?php $component = $__componentOriginal6936650fa23142238a13a0689c4bfe24; ?>
|
||||
<?php unset($__componentOriginal6936650fa23142238a13a0689c4bfe24); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal94e6c9aa0eb2b7a85f88307a3371880e = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal94e6c9aa0eb2b7a85f88307a3371880e = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.folder-open','data' => ['class' => 'w-3 h-3 text-blue-500 dark:text-emerald-500','xShow' => 'expanded']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.folder-open'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['class' => 'w-3 h-3 text-blue-500 dark:text-emerald-500','x-show' => 'expanded']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal94e6c9aa0eb2b7a85f88307a3371880e)): ?>
|
||||
<?php $attributes = $__attributesOriginal94e6c9aa0eb2b7a85f88307a3371880e; ?>
|
||||
<?php unset($__attributesOriginal94e6c9aa0eb2b7a85f88307a3371880e); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal94e6c9aa0eb2b7a85f88307a3371880e)): ?>
|
||||
<?php $component = $__componentOriginal94e6c9aa0eb2b7a85f88307a3371880e; ?>
|
||||
<?php unset($__componentOriginal94e6c9aa0eb2b7a85f88307a3371880e); ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="flex-1 font-mono text-xs leading-3 text-neutral-900 dark:text-neutral-400">
|
||||
<?php echo e(count($frames)); ?> vendor <?php echo e(Str::plural('frame', count($frames))); ?>
|
||||
|
||||
</div>
|
||||
|
||||
<button
|
||||
x-cloak
|
||||
type="button"
|
||||
class="flex h-6 w-6 cursor-pointer items-center justify-center rounded-md dark:border dark:border-white/8 group-hover:text-blue-500 group-hover:dark:text-emerald-500"
|
||||
:class="{
|
||||
'text-blue-500 dark:text-emerald-500 dark:bg-white/5': expanded,
|
||||
'text-neutral-500 dark:text-neutral-500 dark:bg-white/3': !expanded,
|
||||
}"
|
||||
>
|
||||
<?php if (isset($component)) { $__componentOriginal4400c4a71d3ea90a0e0b846e7d689a28 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal4400c4a71d3ea90a0e0b846e7d689a28 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevrons-down-up','data' => ['xShow' => 'expanded']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevrons-down-up'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['x-show' => 'expanded']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal4400c4a71d3ea90a0e0b846e7d689a28)): ?>
|
||||
<?php $attributes = $__attributesOriginal4400c4a71d3ea90a0e0b846e7d689a28; ?>
|
||||
<?php unset($__attributesOriginal4400c4a71d3ea90a0e0b846e7d689a28); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal4400c4a71d3ea90a0e0b846e7d689a28)): ?>
|
||||
<?php $component = $__componentOriginal4400c4a71d3ea90a0e0b846e7d689a28; ?>
|
||||
<?php unset($__componentOriginal4400c4a71d3ea90a0e0b846e7d689a28); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($component)) { $__componentOriginal7348bb70f498d75e0a91acc6a707f136 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal7348bb70f498d75e0a91acc6a707f136 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.icons.chevrons-up-down','data' => ['xShow' => '!expanded']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::icons.chevrons-up-down'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['x-show' => '!expanded']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal7348bb70f498d75e0a91acc6a707f136)): ?>
|
||||
<?php $attributes = $__attributesOriginal7348bb70f498d75e0a91acc6a707f136; ?>
|
||||
<?php unset($__attributesOriginal7348bb70f498d75e0a91acc6a707f136); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal7348bb70f498d75e0a91acc6a707f136)): ?>
|
||||
<?php $component = $__componentOriginal7348bb70f498d75e0a91acc6a707f136; ?>
|
||||
<?php unset($__componentOriginal7348bb70f498d75e0a91acc6a707f136); ?>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div x-cloak class="flex flex-col rounded-b-lg divide-y divide-neutral-200 border-t border-neutral-200 dark:divide-white/5 dark:border-white/5" x-show="expanded">
|
||||
<?php $__currentLoopData = $frames; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $frame): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<div class="flex flex-col divide-y divide-neutral-200 dark:divide-white/5">
|
||||
<?php if (isset($component)) { $__componentOriginal96f0b6f4219e16dc62468d91b0335b32 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal96f0b6f4219e16dc62468d91b0335b32 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.vendor-frame','data' => ['frame' => $frame]] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::vendor-frame'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['frame' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($frame)]); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal96f0b6f4219e16dc62468d91b0335b32)): ?>
|
||||
<?php $attributes = $__attributesOriginal96f0b6f4219e16dc62468d91b0335b32; ?>
|
||||
<?php unset($__attributesOriginal96f0b6f4219e16dc62468d91b0335b32); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal96f0b6f4219e16dc62468d91b0335b32)): ?>
|
||||
<?php $component = $__componentOriginal96f0b6f4219e16dc62468d91b0335b32; ?>
|
||||
<?php unset($__componentOriginal96f0b6f4219e16dc62468d91b0335b32); ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/vendor-frames.blade.php ENDPATH**/ ?>
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg" <?php echo e($attributes); ?>>
|
||||
<path d="M0.875 9.25L5.125 5L0.875 0.75" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/chevron-right.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 457 B |
@@ -1,105 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="space-y-6 pb-8">
|
||||
|
||||
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight">Manajemen User</h2>
|
||||
<p class="text-sm text-slate-500 font-medium italic">Kelola otoritas akses staf cattery.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['users', 'create'])): ?>
|
||||
<a href="<?php echo e(route('admin.users.create')); ?>" class="inline-flex items-center px-5 py-3 bg-indigo-600 text-white text-[10px] font-black rounded-xl shadow-lg shadow-indigo-100 hover:bg-indigo-700 transition-all active:scale-95">
|
||||
<i class="fas fa-plus mr-2"></i> TAMBAH USER
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] overflow-hidden shadow-sm">
|
||||
<table class="w-full text-left">
|
||||
<thead class="bg-slate-50 text-[10px] font-black text-slate-400 uppercase tracking-widest border-b">
|
||||
<tr>
|
||||
<th class="px-6 py-4">Nama & Email</th>
|
||||
<th class="px-6 py-4">WhatsApp</th>
|
||||
<th class="px-6 py-4 text-center">Role</th>
|
||||
<th class="px-6 py-4 text-right">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100 font-medium text-slate-700">
|
||||
<?php $__currentLoopData = $users; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $user): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<tr class="hover:bg-slate-50/50 transition-all">
|
||||
|
||||
<td class="px-6 py-4">
|
||||
<div class="font-black text-slate-800"><?php echo e($user->name); ?></div>
|
||||
<div class="text-[10px] text-slate-400 font-bold uppercase"><?php echo e($user->email); ?></div>
|
||||
</td>
|
||||
|
||||
|
||||
<td class="px-6 py-4">
|
||||
<span class="text-xs font-bold text-slate-500"><?php echo e($user->phone ?? '-'); ?></span>
|
||||
</td>
|
||||
|
||||
|
||||
<td class="px-6 py-4 text-center">
|
||||
<span class="px-3 py-1 rounded-xl text-[10px] font-black uppercase <?php echo e($user->role == 'admin' ? 'bg-indigo-50 text-indigo-600 border border-indigo-100' : 'bg-slate-50 text-slate-500 border border-slate-200'); ?>">
|
||||
<?php echo e($user->roleModel?->name ?? $user->role ?? '-'); ?>
|
||||
|
||||
</span>
|
||||
</td>
|
||||
|
||||
|
||||
<td class="px-6 py-4 text-right">
|
||||
<div class="flex justify-end gap-2">
|
||||
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['users', 'update'])): ?>
|
||||
<a href="<?php echo e(route('admin.users.edit', $user->id)); ?>" class="p-2 text-slate-400 hover:text-amber-600 hover:bg-amber-50 rounded-xl transition-all" title="Edit Profile">
|
||||
<i class="fas fa-edit text-xs"></i>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['users', 'delete'])): ?>
|
||||
<form action="<?php echo e(route('admin.users.destroy', $user->id)); ?>" method="POST" onsubmit="return confirm('Hapus user ini? Staf ini tidak akan bisa login lagi.')" class="inline">
|
||||
<?php echo csrf_field(); ?> <?php echo method_field('DELETE'); ?>
|
||||
<button type="submit" class="p-2 text-slate-400 hover:text-rose-600 hover:bg-rose-50 rounded-xl transition-all" title="Hapus User">
|
||||
<i class="fas fa-trash-alt text-xs"></i>
|
||||
</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mt-4">
|
||||
<?php echo e($users->links()); ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/users/index.blade.php ENDPATH**/ ?>
|
||||
@@ -1,149 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<?php
|
||||
$currentSort = request('sort', 'nama_makanan');
|
||||
$currentDir = request('direction', 'asc');
|
||||
$nextDir = $currentDir === 'asc' ? 'desc' : 'asc';
|
||||
|
||||
$getSortIcon = function($field) use ($currentSort, $currentDir) {
|
||||
if ($currentSort !== $field) return 'fa-sort opacity-20';
|
||||
return $currentDir === 'asc' ? 'fa-sort-up text-indigo-600' : 'fa-sort-down text-indigo-600';
|
||||
};
|
||||
?>
|
||||
|
||||
<div class="max-w-7xl mx-auto space-y-6 pb-12">
|
||||
|
||||
<div class="flex flex-col md:flex-row md:items-center justify-between gap-4 px-2">
|
||||
<div>
|
||||
<h2 class="text-2xl font-black text-slate-800 tracking-tight leading-none mb-1 uppercase">Stok Makanan & Nutrisi</h2>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-[0.2em]">Persediaan Makanan • ILY Cattery</p>
|
||||
</div>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['foods', 'create'])): ?>
|
||||
<a href="<?php echo e(route('inventory.foods.create')); ?>" class="inline-flex items-center px-6 py-3 bg-indigo-600 hover:bg-indigo-700 text-white text-[10px] font-black rounded-2xl shadow-lg active:scale-95 transition-all">
|
||||
<i class="fas fa-plus-circle mr-2"></i> TAMBAH PAKAN
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4 px-2">
|
||||
<div class="bg-white border border-slate-200 p-6 rounded-[2rem] shadow-sm">
|
||||
<p class="text-[9px] font-black text-slate-400 uppercase tracking-widest">Total Volume Stok</p>
|
||||
<h3 class="text-2xl font-black text-slate-800 mt-1"><?php echo e(number_format($totalStock, 1)); ?> <span class="text-xs text-slate-400">UNIT</span></h3>
|
||||
</div>
|
||||
<div class="bg-white border border-slate-200 p-6 rounded-[2rem] shadow-sm border-l-4 border-l-rose-500">
|
||||
<p class="text-[9px] font-black text-rose-600 uppercase tracking-widest">Stok Menipis (<= 5)</p>
|
||||
<h3 class="text-2xl font-black text-slate-800 mt-1"><?php echo e($lowStockCount); ?> <span class="text-xs text-slate-400">PRODUK</span></h3>
|
||||
</div>
|
||||
<div class="bg-indigo-50 border border-indigo-100 p-6 rounded-[2rem] shadow-sm">
|
||||
<p class="text-[9px] font-black text-indigo-600 uppercase tracking-widest">Varian Produk</p>
|
||||
<h3 class="text-2xl font-black text-indigo-900 mt-1"><?php echo e($totalItems); ?> <span class="text-xs text-indigo-400">JENIS</span></h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="px-2">
|
||||
<form action="<?php echo e(route('inventory.foods.index')); ?>" method="GET" class="relative max-w-md">
|
||||
<input type="hidden" name="sort" value="<?php echo e(request('sort')); ?>">
|
||||
<input type="hidden" name="direction" value="<?php echo e(request('direction')); ?>">
|
||||
<i class="fas fa-search absolute left-4 top-1/2 -translate-y-1/2 text-slate-400 text-xs"></i>
|
||||
<input type="text" name="search" value="<?php echo e(request('search')); ?>" placeholder="Cari merk pakan atau kategori..." class="w-full pl-12 pr-4 py-3.5 bg-white border border-slate-200 rounded-2xl text-xs font-bold focus:ring-4 focus:ring-indigo-500/10 transition-all shadow-sm">
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] overflow-hidden shadow-sm mx-2">
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-left">
|
||||
<thead class="bg-slate-50 text-[10px] font-black text-slate-400 uppercase tracking-widest border-b border-slate-100">
|
||||
<tr>
|
||||
<th class="px-6 py-5">
|
||||
<a href="<?php echo e(request()->fullUrlWithQuery(['sort' => 'nama_makanan', 'direction' => $nextDir])); ?>" class="hover:text-indigo-600 transition-colors flex items-center gap-2">
|
||||
Informasi Pakan <i class="fas <?php echo e($getSortIcon('nama_makanan')); ?>"></i>
|
||||
</a>
|
||||
</th>
|
||||
<th class="px-6 py-5 text-center">
|
||||
<a href="<?php echo e(request()->fullUrlWithQuery(['sort' => 'qty', 'direction' => $nextDir])); ?>" class="hover:text-indigo-600 transition-colors flex items-center justify-center gap-2">
|
||||
Stok Tersedia <i class="fas <?php echo e($getSortIcon('qty')); ?>"></i>
|
||||
</a>
|
||||
</th>
|
||||
<th class="px-6 py-5 text-center">Ditambahkan Pada</th>
|
||||
<th class="px-6 py-5 text-right">Aksi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
<?php $__empty_1 = true; $__currentLoopData = $foods; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $f): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); $__empty_1 = false; ?>
|
||||
<tr class="hover:bg-slate-50/50 transition-all">
|
||||
<td class="px-6 py-4">
|
||||
<div class="flex items-center gap-4">
|
||||
<div class="w-12 h-12 rounded-2xl bg-slate-50 border border-slate-100 overflow-hidden shrink-0 flex items-center justify-center">
|
||||
<?php if($f->foto_produk): ?>
|
||||
<img src="<?php echo e(asset('storage/' . $f->foto_produk)); ?>" class="w-full h-full object-cover">
|
||||
<?php else: ?>
|
||||
<i class="fas fa-bowl-food text-slate-200 text-lg"></i>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div>
|
||||
<div class="text-sm font-black text-slate-800 uppercase tracking-tight"><?php echo e($f->nama_makanan); ?></div>
|
||||
<span class="text-[8px] font-black text-indigo-600 bg-indigo-50 px-2 py-0.5 rounded border border-indigo-100 uppercase italic mt-1 inline-block">
|
||||
<?php echo e($f->kategori ?? ($f->category->name ?? 'Umum')); ?>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-6 py-4 text-center">
|
||||
<div class="flex flex-col items-center">
|
||||
<div class="flex items-baseline gap-1 <?php echo e($f->qty <= 5 ? 'text-rose-600' : 'text-emerald-600'); ?>">
|
||||
<span class="text-sm font-black"><?php echo e((float)$f->qty); ?></span>
|
||||
<span class="text-[9px] font-bold uppercase"><?php echo e($f->unit ?? 'UNIT'); ?></span>
|
||||
</div>
|
||||
<?php if($f->qty <= 5): ?>
|
||||
<span class="text-[7px] font-black text-rose-400 uppercase tracking-widest animate-pulse mt-1">Low!</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="px-6 py-4 text-center text-[10px] font-bold text-slate-400">
|
||||
<?php echo e($f->created_at->format('d/m/Y')); ?>
|
||||
|
||||
</td>
|
||||
<td class="px-6 py-4 text-right">
|
||||
<div class="flex justify-end gap-2">
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['foods', 'update'])): ?>
|
||||
<a href="<?php echo e(route('inventory.foods.edit', $f->id)); ?>" class="w-9 h-9 flex items-center justify-center bg-amber-50 text-amber-600 hover:bg-amber-600 hover:text-white rounded-xl transition-all"><i class="fas fa-edit text-xs"></i></a>
|
||||
<?php endif; ?>
|
||||
<?php if (app(\Illuminate\Contracts\Auth\Access\Gate::class)->check('check-access', ['foods', 'delete'])): ?>
|
||||
<button onclick="confirmDelete(<?php echo e($f->id); ?>, '<?php echo e(addslashes($f->nama_makanan)); ?>')" class="w-9 h-9 flex items-center justify-center bg-rose-50 text-rose-600 hover:bg-rose-600 hover:text-white rounded-xl transition-all"><i class="fas fa-trash-alt text-xs"></i></button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); if ($__empty_1): ?>
|
||||
<tr><td colspan="4" class="px-6 py-20 text-center text-slate-300 text-xs italic font-bold uppercase tracking-widest">Pakan tidak ditemukan.</td></tr>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<?php if($foods->hasPages()): ?>
|
||||
<div class="p-6 bg-slate-50/50 border-t border-slate-100"><?php echo e($foods->links()); ?></div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/inventory/foods/index.blade.php ENDPATH**/ ?>
|
||||
@@ -1,70 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="py-12 bg-slate-50">
|
||||
<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
|
||||
<div class="bg-white overflow-hidden shadow-sm rounded-[2rem] p-8 md:p-12">
|
||||
<form action="<?php echo e(route('inventory.supplies.store')); ?>" method="POST" enctype="multipart/form-data">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
<div class="mb-10">
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-4">FOTO PERLENGKAPAN</label>
|
||||
<div class="flex flex-col md:flex-row items-center gap-6">
|
||||
<div class="w-32 h-32 flex-shrink-0 bg-slate-50 border-2 border-dashed border-slate-200 rounded-[1.5rem] flex items-center justify-center">
|
||||
<svg class="w-10 h-10 text-slate-300" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4"></path></svg>
|
||||
</div>
|
||||
<div class="flex-grow w-full">
|
||||
<input type="file" name="foto_produk" class="block w-full text-sm text-slate-500 file:mr-4 file:py-2 file:px-6 file:rounded-full file:border-0 file:text-xs file:font-bold file:bg-slate-100 file:text-slate-700 hover:file:bg-slate-200 border border-slate-100 rounded-full bg-slate-50 p-1 focus:outline-none">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-8">
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2">NAMA PERLENGKAPAN</label>
|
||||
<input type="text" name="nama_perlengkapan" placeholder="Contoh: Pasir Kucing 10kg" class="w-full bg-slate-50 border-none rounded-full px-8 py-4 text-slate-700 placeholder-slate-300 focus:ring-2 focus:ring-indigo-100 shadow-sm">
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 mb-10">
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2">JUMLAH STOK AWAL</label>
|
||||
<input type="number" name="qty" placeholder="0" class="w-full bg-slate-50 border-none rounded-full px-8 py-4 text-slate-700 placeholder-slate-300 focus:ring-2 focus:ring-indigo-100 shadow-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-[10px] font-bold text-slate-400 uppercase tracking-widest mb-2">SATUAN (UNIT)</label>
|
||||
<input type="text" name="unit" placeholder="Pcs" class="w-full bg-slate-50 border-none rounded-full px-8 py-4 text-slate-700 placeholder-slate-300 focus:ring-2 focus:ring-indigo-100 shadow-sm">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex justify-end items-center gap-4 pt-6 mt-8 border-t border-slate-100">
|
||||
<button type="reset" class="text-[11px] font-bold text-slate-400 hover:text-slate-600 uppercase tracking-widest transition-colors">
|
||||
Reset Form
|
||||
</button>
|
||||
|
||||
<button type="submit" class="inline-flex items-center bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-2.5 px-8 rounded-full text-[11px] uppercase tracking-widest shadow-md shadow-indigo-100 transition-all transform active:scale-95">
|
||||
<svg class="w-3.5 h-3.5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M5 13l4 4L19 7"></path>
|
||||
</svg>
|
||||
Simpan Data
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/inventory/supplies/create.blade.php ENDPATH**/ ?>
|
||||
@@ -1,311 +0,0 @@
|
||||
<?php if (isset($component)) { $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54 = $attributes; } ?>
|
||||
<?php $component = App\View\Components\AppLayout::resolve([] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('app-layout'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\App\View\Components\AppLayout::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes([]); ?>
|
||||
<div class="max-w-7xl mx-auto pb-12">
|
||||
|
||||
<?php if($errors->any()): ?>
|
||||
<div class="mb-8 p-6 bg-rose-50 border-2 border-rose-100 rounded-[2.5rem] animate-fade-in shadow-sm">
|
||||
<div class="flex items-center gap-3 mb-3">
|
||||
<i class="fas fa-exclamation-circle text-rose-500 text-xl"></i>
|
||||
<h3 class="text-sm font-black text-rose-700 uppercase tracking-widest">Terdapat Kesalahan Input:</h3>
|
||||
</div>
|
||||
<ul class="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-1 border-t border-rose-100 pt-4">
|
||||
<?php $__currentLoopData = $errors->all(); $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $error): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<li class="text-[11px] text-rose-600 font-bold italic">• <?php echo e($error); ?></li>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo e(route('matting.store')); ?>" method="POST" enctype="multipart/form-data" x-data="kittenManager()">
|
||||
<?php echo csrf_field(); ?>
|
||||
|
||||
|
||||
<div class="flex items-center justify-between mb-8">
|
||||
<div class="flex items-center gap-4">
|
||||
<a href="<?php echo e(route('matting.index')); ?>" class="p-3 bg-white border border-slate-200 rounded-2xl text-slate-400 hover:text-indigo-600 transition-all shadow-sm active:scale-90">
|
||||
<i class="fas fa-arrow-left"></i>
|
||||
</a>
|
||||
<div>
|
||||
<h2 class="text-3xl font-black text-slate-800 tracking-tighter leading-none mb-1 uppercase">Pencatatan Pembiakan</h2>
|
||||
<p class="text-[10px] text-slate-500 font-bold uppercase tracking-[0.2em] italic">Program Pembiakan ILYCats</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6 relative overflow-hidden group">
|
||||
<div class="absolute top-0 right-0 p-6 opacity-10 group-hover:opacity-20 transition-opacity">
|
||||
<i class="fas fa-mars text-6xl text-blue-600"></i>
|
||||
</div>
|
||||
<h4 class="text-xs font-black text-blue-600 uppercase tracking-widest border-b border-blue-50 pb-3 italic">Informasi Sire (Induk Jantan)</h4>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Pilih Sire Internal</label>
|
||||
<select name="sire_id" id="sire_select" class="w-full mt-1 rounded-2xl border-slate-100 bg-slate-50 font-bold text-sm focus:ring-blue-500 <?php $__errorArgs = ['sire_id'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-rose-500 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?>">
|
||||
<option value="">-- Pilih Kucing Jantan --</option>
|
||||
<?php $__currentLoopData = $sires; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $sire): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($sire->id); ?>" <?php echo e(old('sire_id') == $sire->id ? 'selected' : ''); ?>><?php echo e($sire->nama_kucing); ?> (<?php echo e($sire->ras); ?>)</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Tgl Lahir Sire</label>
|
||||
<input type="date" name="tgl_lahir_sire" id="sire_birth" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50">
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">No. Pedigree Sire</label>
|
||||
<input type="text" name="no_pedigree_bapak" id="sire_pedigree" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50" placeholder="Otomatis...">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">No. Microchip Sire</label>
|
||||
<input type="text" name="no_microchip_bapak" id="sire_microchip" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50" placeholder="9000xxxxxx">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-[2.5rem] p-8 shadow-sm space-y-6 relative overflow-hidden group">
|
||||
<div class="absolute top-0 right-0 p-6 opacity-10 group-hover:opacity-20 transition-opacity">
|
||||
<i class="fas fa-venus text-6xl text-pink-600"></i>
|
||||
</div>
|
||||
<h4 class="text-xs font-black text-pink-600 uppercase tracking-widest border-b border-pink-50 pb-3 italic">Informasi Dam (Induk Betina)</h4>
|
||||
|
||||
<div class="space-y-4">
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Pilih Dam Internal</label>
|
||||
<select name="dam_id" id="dam_select" class="w-full mt-1 rounded-2xl border-slate-100 bg-slate-50 font-bold text-sm focus:ring-pink-500 <?php $__errorArgs = ['dam_id'];
|
||||
$__bag = $errors->getBag($__errorArgs[1] ?? 'default');
|
||||
if ($__bag->has($__errorArgs[0])) :
|
||||
if (isset($message)) { $__messageOriginal = $message; }
|
||||
$message = $__bag->first($__errorArgs[0]); ?> border-rose-500 <?php unset($message);
|
||||
if (isset($__messageOriginal)) { $message = $__messageOriginal; }
|
||||
endif;
|
||||
unset($__errorArgs, $__bag); ?>">
|
||||
<option value="">-- Pilih Kucing Betina --</option>
|
||||
<?php $__currentLoopData = $dams; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $dam): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
|
||||
<option value="<?php echo e($dam->id); ?>" <?php echo e(old('dam_id') == $dam->id ? 'selected' : ''); ?>><?php echo e($dam->nama_kucing); ?> (<?php echo e($dam->ras); ?>)</option>
|
||||
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
|
||||
</select>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Tgl Lahir Dam</label>
|
||||
<input type="date" name="tgl_lahir_dam" id="dam_birth" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50">
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">No. Pedigree Dam</label>
|
||||
<input type="text" name="no_pedigree_ibu" id="dam_pedigree" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50" placeholder="Otomatis...">
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">No. Microchip Dam</label>
|
||||
<input type="text" name="no_microchip_ibu" id="dam_microchip" class="w-full mt-1 rounded-xl border-slate-100 text-xs font-bold bg-slate-50" placeholder="9000xxxxxx">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="bg-slate-900 rounded-[2.5rem] p-8 text-white shadow-2xl mb-12 relative overflow-hidden">
|
||||
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 relative z-10">
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase tracking-widest text-slate-400">Status Pembiakan</label>
|
||||
<select name="status" class="w-full mt-2 bg-white/10 border-white/10 rounded-xl text-xs font-bold focus:ring-indigo-500 text-white" required>
|
||||
<option value="proses" class="text-slate-800">Dalam proses</option>
|
||||
<option value="berhasil" class="text-slate-800">Berhasil (Lahir)</option>
|
||||
<option value="gagal" class="text-slate-800">Gagal</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase tracking-widest text-slate-400">Tgl Kawin Awal</label>
|
||||
<input type="date" name="tgl_kawin_awal" class="w-full mt-2 bg-white/10 border-white/10 rounded-xl text-xs font-bold focus:ring-indigo-500" required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase tracking-widest text-slate-400">Tgl Kawin Akhir</label>
|
||||
<input type="date" name="tgl_kawin_akhir" class="w-full mt-2 bg-white/10 border-white/10 rounded-xl text-xs font-bold focus:ring-indigo-500">
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase tracking-widest text-slate-400">Anak Hidup</label>
|
||||
<input type="number" name="jumlah_anak_hidup" value="0" class="w-full mt-2 bg-white/10 border-white/10 rounded-xl text-xs font-bold focus:ring-indigo-500" min="0">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="space-y-6">
|
||||
<div class="flex items-center justify-between border-b border-slate-100 pb-4">
|
||||
<div>
|
||||
<h3 class="text-2xl font-black text-slate-800 tracking-tighter uppercase leading-none">Daftar Anak (Kittens)</h3>
|
||||
<p class="text-[10px] text-slate-400 font-bold uppercase tracking-widest mt-1 italic">Profil otomatis masuk ke Manajemen Pasien</p>
|
||||
</div>
|
||||
<button type="button" @click="addKitten" class="inline-flex items-center px-6 py-3 bg-indigo-600 text-white text-[10px] font-black rounded-2xl shadow-lg hover:bg-indigo-700 transition-all active:scale-95">
|
||||
<i class="fas fa-plus-circle mr-2 text-sm"></i> TAMBAH ANAK
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<template x-for="(kitten, index) in kittens" :key="index">
|
||||
<div class="bg-white border-2 border-dashed border-slate-200 p-8 rounded-[3rem] relative space-y-8 animate-fade-in shadow-sm hover:border-indigo-200 transition-all">
|
||||
<button type="button" @click="removeKitten(index)" class="absolute top-6 right-6 w-10 h-10 bg-rose-50 text-rose-500 rounded-full flex items-center justify-center hover:bg-rose-500 hover:text-white transition-all shadow-sm">
|
||||
<i class="fas fa-times text-sm"></i>
|
||||
</button>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
|
||||
<div class="md:col-span-2">
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Nama Anak</label>
|
||||
<input type="text" :name="`kittens[${index}][nama]`" x-model="kitten.nama" class="w-full mt-1 rounded-xl border-slate-100 bg-slate-50 text-xs font-bold" placeholder="Masukkan nama..." required>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Jenis Kelamin</label>
|
||||
<select :name="`kittens[${index}][jenis_kelamin]`" x-model="kitten.jenis_kelamin" class="w-full mt-1 rounded-xl border-slate-100 bg-slate-50 text-xs font-bold">
|
||||
<option value="Jantan">Jantan</option>
|
||||
<option value="Betina">Betina</option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Tanggal Lahir</label>
|
||||
<input type="date" :name="`kittens[${index}][tgl_lahir]`" x-model="kitten.tgl_lahir" class="w-full mt-1 rounded-xl border-slate-100 bg-slate-50 text-xs font-bold" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-4 gap-6 items-start border-t border-slate-50 pt-6">
|
||||
<div class="md:col-span-2 space-y-2">
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-1">Registry / Federasi (Pilihan Ganda)</label>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-2">
|
||||
<template x-for="regOption in ['ICA', 'CFA', 'WCF', 'FFF']" :key="regOption">
|
||||
<label class="block cursor-pointer group">
|
||||
<input type="checkbox"
|
||||
:name="`kittens[${index}][registry][]`"
|
||||
:value="regOption"
|
||||
x-model="kitten.registry"
|
||||
class="sr-only peer">
|
||||
<div class="py-3 text-center border-2 border-slate-100 rounded-xl text-[9px] font-black text-slate-400
|
||||
peer-checked:bg-indigo-600 peer-checked:text-white peer-checked:border-indigo-600
|
||||
transition-all shadow-sm group-hover:border-slate-300 uppercase">
|
||||
<span x-text="regOption"></span>
|
||||
</div>
|
||||
</label>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2">Kode EMS</label>
|
||||
<input type="text" :name="`kittens[${index}][kode_ems]`" class="w-full mt-1 rounded-xl border-slate-100 bg-slate-50 text-xs font-bold" placeholder="PER d 62">
|
||||
</div>
|
||||
|
||||
<div class="flex items-center h-12 gap-3 px-4 bg-slate-50 rounded-xl border border-slate-100 mt-6">
|
||||
<input type="checkbox" :name="`kittens[${index}][is_pedigree]`" value="1" class="rounded text-indigo-600 focus:ring-indigo-500">
|
||||
<label class="text-[10px] font-black uppercase text-slate-600">Sertifikat OK</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="pt-6 border-t border-slate-100">
|
||||
<label class="text-[10px] font-black uppercase text-slate-400 ml-2 mb-3 block italic">Dokumen Pedigree (Slot 1-4)</label>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||||
<template x-for="n in 4" :key="n">
|
||||
<div class="p-3 bg-slate-50/50 rounded-2xl border border-slate-100 text-center">
|
||||
<input type="file" :name="`kittens[${index}][foto_ped_${n}]`" class="text-[9px] w-full file:mr-2 file:py-1 file:px-2 file:rounded-lg file:border-0 file:text-[9px] file:font-black file:bg-indigo-50 file:text-indigo-600">
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div x-show="kittens.length === 0" class="text-center py-20 bg-slate-50/50 rounded-[3rem] border-2 border-dashed border-slate-200">
|
||||
<i class="fas fa-paw text-slate-200 text-6xl mb-4"></i>
|
||||
<p class="text-slate-400 italic text-sm font-black uppercase tracking-widest">Belum ada data kelahiran ditambahkan</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-12 flex justify-end">
|
||||
<button type="submit" class="w-full md:w-auto px-12 py-5 bg-indigo-600 text-white rounded-[2rem] font-black text-sm shadow-2xl hover:bg-indigo-700 transition-all active:scale-95 uppercase tracking-widest">
|
||||
<i class="fas fa-save mr-2"></i> Finalisasi & Simpan Data
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<?php $__env->startPush('scripts'); ?>
|
||||
<script>
|
||||
function kittenManager() {
|
||||
return {
|
||||
kittens: [],
|
||||
addKitten() {
|
||||
this.kittens.push({
|
||||
nama: '',
|
||||
jenis_kelamin: 'Jantan',
|
||||
tgl_lahir: '',
|
||||
registry: [], // HARUS ARRAY agar checkbox bekerja
|
||||
});
|
||||
},
|
||||
removeKitten(index) {
|
||||
this.kittens.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
function setupAutocomplete(selectId, birthId, pedigreeId, microchipId) {
|
||||
const selectEl = document.getElementById(selectId);
|
||||
const birthEl = document.getElementById(birthId);
|
||||
const pedEl = document.getElementById(pedigreeId);
|
||||
const chipEl = document.getElementById(microchipId);
|
||||
|
||||
if (!selectEl) return;
|
||||
|
||||
selectEl.addEventListener('change', function() {
|
||||
const catId = this.value;
|
||||
if (!catId) {
|
||||
if (birthEl) birthEl.value = '';
|
||||
if (pedEl) pedEl.value = '';
|
||||
if (chipEl) chipEl.value = '';
|
||||
return;
|
||||
}
|
||||
|
||||
fetch(`/api/cats/${catId}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (birthEl) birthEl.value = data.tgl_lahir || '';
|
||||
if (pedEl) pedEl.value = data.pedigree || '';
|
||||
if (chipEl) chipEl.value = data.microchip || '';
|
||||
})
|
||||
.catch(error => console.error('Fetch Error:', error));
|
||||
});
|
||||
}
|
||||
|
||||
setupAutocomplete('sire_select', 'sire_birth', 'sire_pedigree', 'sire_microchip');
|
||||
setupAutocomplete('dam_select', 'dam_birth', 'dam_pedigree', 'dam_microchip');
|
||||
});
|
||||
</script>
|
||||
<?php $__env->stopPush(); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $attributes = $__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__attributesOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54)): ?>
|
||||
<?php $component = $__componentOriginal9ac128a9029c0e4701924bd2d73d7f54; ?>
|
||||
<?php unset($__componentOriginal9ac128a9029c0e4701924bd2d73d7f54); ?>
|
||||
<?php endif; ?><?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/pages/matting/create.blade.php ENDPATH**/ ?>
|
||||
@@ -1,41 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['active']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['active']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
$classes = ($active ?? false)
|
||||
? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 text-start text-base font-medium text-indigo-700 bg-indigo-50 focus:outline-none focus:text-indigo-800 focus:bg-indigo-100 focus:border-indigo-700 transition duration-150 ease-in-out'
|
||||
: 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 hover:text-gray-800 hover:bg-gray-50 hover:border-gray-300 focus:outline-none focus:text-gray-800 focus:bg-gray-50 focus:border-gray-300 transition duration-150 ease-in-out';
|
||||
?>
|
||||
|
||||
<a <?php echo e($attributes->merge(['class' => $classes])); ?>>
|
||||
<?php echo e($slot); ?>
|
||||
|
||||
</a>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/responsive-nav-link.blade.php ENDPATH**/ ?>
|
||||
@@ -1,12 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none" <?php echo e($attributes); ?>>
|
||||
<g clip-path="url(#clip0_14550_6155)">
|
||||
<path d="M8.75 8.25012L6 11.0001L3.25 8.25012" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M8.75 3.75012L6 1.00012L3.25 3.75012" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_14550_6155">
|
||||
<rect width="12" height="12" fill="white" style="fill:white;fill-opacity:1;"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/chevrons-up-down.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 795 B |
@@ -1,35 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['message']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['message']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<div class="bg-white/[2%] border border-neutral-200 dark:border-neutral-800 rounded-md w-full p-5 uppercase text-sm text-center font-mono shadow-xs text-neutral-600 dark:text-neutral-400">
|
||||
<span class="text-neutral-400 dark:text-neutral-600">// </span><?php echo e($message); ?>
|
||||
|
||||
</div>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/empty-state.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 474 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg width="6" height="10" viewBox="0 0 6 10" fill="none" xmlns="http://www.w3.org/2000/svg" <?php echo e($attributes); ?>>
|
||||
<path d="M5.125 0.75L0.875 5L5.125 9.25" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/icons/chevron-left.blade.php ENDPATH**/ ?>
|
||||
|
Before Width: | Height: | Size: 456 B |
@@ -1,65 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['frame']));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['frame']), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
|
||||
<?php
|
||||
if ($class = $frame->class()) {
|
||||
$source = $class;
|
||||
|
||||
if ($previous = $frame->previous()) {
|
||||
$source .= $previous->operator();
|
||||
$source .= $previous->callable();
|
||||
$source .= '('.implode(', ', $previous->args()).')';
|
||||
}
|
||||
} else {
|
||||
$source = $frame->source();
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if (isset($component)) { $__componentOriginal12cb286571f553eebcbe98210b217f94 = $component; } ?>
|
||||
<?php if (isset($attributes)) { $__attributesOriginal12cb286571f553eebcbe98210b217f94 = $attributes; } ?>
|
||||
<?php $component = Illuminate\View\AnonymousComponent::resolve(['view' => 'laravel-exceptions-renderer::components.syntax-highlight','data' => ['code' => $source,'language' => 'php','truncate' => true,'class' => 'text-xs min-w-0','dataTippyContent' => ''.e($source).'']] + (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag ? $attributes->all() : [])); ?>
|
||||
<?php $component->withName('laravel-exceptions-renderer::syntax-highlight'); ?>
|
||||
<?php if ($component->shouldRender()): ?>
|
||||
<?php $__env->startComponent($component->resolveView(), $component->data()); ?>
|
||||
<?php if (isset($attributes) && $attributes instanceof Illuminate\View\ComponentAttributeBag): ?>
|
||||
<?php $attributes = $attributes->except(\Illuminate\View\AnonymousComponent::ignoredParameterNames()); ?>
|
||||
<?php endif; ?>
|
||||
<?php $component->withAttributes(['code' => \Illuminate\View\Compilers\BladeCompiler::sanitizeComponentAttribute($source),'language' => 'php','truncate' => true,'class' => 'text-xs min-w-0','data-tippy-content' => ''.e($source).'']); ?>
|
||||
<?php echo $__env->renderComponent(); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__attributesOriginal12cb286571f553eebcbe98210b217f94)): ?>
|
||||
<?php $attributes = $__attributesOriginal12cb286571f553eebcbe98210b217f94; ?>
|
||||
<?php unset($__attributesOriginal12cb286571f553eebcbe98210b217f94); ?>
|
||||
<?php endif; ?>
|
||||
<?php if (isset($__componentOriginal12cb286571f553eebcbe98210b217f94)): ?>
|
||||
<?php $component = $__componentOriginal12cb286571f553eebcbe98210b217f94; ?>
|
||||
<?php unset($__componentOriginal12cb286571f553eebcbe98210b217f94); ?>
|
||||
<?php endif; ?>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/vendor/laravel/framework/src/Illuminate/Foundation/Providers/../resources/exceptions/renderer/components/formatted-source.blade.php ENDPATH**/ ?>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?php $attributes ??= new \Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
$__newAttributes = [];
|
||||
$__propNames = \Illuminate\View\ComponentAttributeBag::extractPropNames((['active' => false, 'icon' => null]));
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (in_array($__key, $__propNames)) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
} else {
|
||||
$__newAttributes[$__key] = $__value;
|
||||
}
|
||||
}
|
||||
|
||||
$attributes = new \Illuminate\View\ComponentAttributeBag($__newAttributes);
|
||||
|
||||
unset($__propNames);
|
||||
unset($__newAttributes);
|
||||
|
||||
foreach (array_filter((['active' => false, 'icon' => null]), 'is_string', ARRAY_FILTER_USE_KEY) as $__key => $__value) {
|
||||
$$__key = $$__key ?? $__value;
|
||||
}
|
||||
|
||||
$__defined_vars = get_defined_vars();
|
||||
|
||||
foreach ($attributes->all() as $__key => $__value) {
|
||||
if (array_key_exists($__key, $__defined_vars)) unset($$__key);
|
||||
}
|
||||
|
||||
unset($__defined_vars, $__key, $__value); ?>
|
||||
<?php
|
||||
$classes = $active
|
||||
? 'group flex items-center gap-3 px-3 py-2.5 text-sm font-semibold text-indigo-700 bg-indigo-50 border-l-2 border-indigo-600'
|
||||
: 'group flex items-center gap-3 px-3 py-2.5 text-sm font-medium text-slate-600 border-l-2 border-transparent hover:bg-slate-50 hover:text-slate-900';
|
||||
?>
|
||||
<a <?php echo e($attributes->merge(['class' => $classes])); ?>>
|
||||
<?php if($icon): ?><i class="fas <?php echo e($icon); ?> w-5 text-center <?php echo e($active ? 'text-indigo-600' : 'text-slate-400 group-hover:text-slate-600'); ?>"></i><?php endif; ?>
|
||||
<span class="truncate"><?php echo e($slot); ?></span>
|
||||
</a>
|
||||
<?php /**PATH /home/u806112658/domains/earrinasia.com/ilycats/resources/views/components/sidebar-link.blade.php ENDPATH**/ ?>
|
||||