first change

This commit is contained in:
2025-07-27 17:40:56 +05:45
commit f8b9a6725b
3152 changed files with 229528 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<x-dashboard.breadcumb />
{{ html()->form('POST')->route('client.store')->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data'])->open() }}
@include('client::client.partials.form')
{{ html()->form()->close() }}
</div>
@endsection

View File

@@ -0,0 +1,12 @@
<div class="hstack flex-wrap gap-3">
<a href="{{ route('client.edit', $id) }}" data-bs-toggle="tooltip"
data-bs-placement="bottom" data-bs-title="Edit" class="link-success fs-15 edit-item-btn"><i
class=" ri-edit-2-line"></i></a>
<a data-link="{{ route('client.toggle', $id) }}" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Toggle" data-status="{{ $status == 1 ? 'Draft' : 'Published' }}"
class="link-info fs-15 toggle-item"><i class="{{ $status == 1 ? 'ri-toggle-line' : 'ri-toggle-fill' }}"></i></a>
<a href="javascript:void(0);" data-link="{{ route('client.destroy', $id) }}" class="link-danger fs-15 remove-item"
data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Delete"><i class="ri-delete-bin-6-line"></i>
</a>
</div>

View File

@@ -0,0 +1,15 @@
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<x-dashboard.breadcumb />
{{ html()->modelForm($client, 'PUT')->route('client.update', $client->id)->class(['needs-validation'])->attributes(['novalidate', 'enctype' => 'multipart/form-data'])->open() }}
@include('client::client.partials.form')
{{ html()->closeModelForm() }}
</div>
@endsection

View File

@@ -0,0 +1,47 @@
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<x-dashboard.breadcumb :title="$title" />
@if ($errors->any())
<x-flash-message type="danger" :messages="$errors->all()" />
@endif
<div class="row">
<div class="col-xl-12">
<div class="card">
<div class="card-header d-flex align-items-center justify-content-between">
<h5 class="card-title mb-0">{{ $title }}</h5>
<a href="{{ route('client.create') }}" class="btn btn-primary waves-effect waves-light text-white"><i class="ri-add-line align-middle"></i> Create</a>
</div>
<div class="card-body">
@php
$columns = [
[
'title' => 'S.N',
'data' => 'DT_RowIndex',
'name' => 'DT_RowIndex',
'orderable' => false,
'searchable' => false,
'sortable' => false,
],
['title' => 'Logo', 'data' => 'logo', 'name' => 'logo'],
['title' => 'Name', 'data' => 'name', 'name' => 'name'],
['title' => 'Contact', 'data' => 'contact', 'name' => 'contact'],
['title' => 'Manager', 'data' => 'manager_name', 'name' => 'manager_name'],
['title' => 'Status', 'data' => 'status', 'name' => 'status'],
[
'title' => 'Action',
'data' => 'action',
'orderable' => false,
'searchable' => false,
],
];
@endphp
<x-data-table-script :route="route('client.index')" :reorder="route('client.reorder')" :columns="$columns" />
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,106 @@
<div class="row">
<div class="col-md-8 col-xl-9">
<div class="card shadow-sm">
<div class="card-body">
<h6 class="card-title text-primary mb-4">Client Information</h6>
<div class="row g-3">
<div class="col-md-6">
{{ html()->label('Name')->class('form-label')->for('name') }}
{{ html()->span('*')->class('text-danger') }}
{{ html()->text('name')->class('form-control')->placeholder('Client Name')->required() }}
</div>
<div class="col-md-6">
{{ html()->label('Contact')->class('form-label')->for('contact') }}
{{ html()->span('*')->class('text-danger') }}
{{ html()->text('contact')->class('form-control')->placeholder('Contact Number')->required() }}
</div>
</div>
<div class="border border-1 border-dashed my-3"></div>
<h6 class="card-title text-primary mb-4">Manager Information</h6>
<div class="row g-3">
<div class="col-md-6">
{{ html()->label('Name')->class('form-label')->for('manager_name') }}
{{ html()->text('manager_name')->class('form-control')->placeholder('Manager Name') }}
</div>
<div class="col-md-6">
{{ html()->label('Contact')->class('form-label')->for('manager_contact') }}
{{ html()->text('manager_contact')->class('form-control')->placeholder('Manager Contact') }}
</div>
</div>
<div class="border border-1 border-dashed my-3"></div>
<h6 class="card-title text-primary mb-4">Point of Contact Information</h6>
<div class="row g-3">
<div class="col-md-6">
{{ html()->label('Name')->class('form-label')->for('poc_name') }}
{{ html()->text('poc_name')->class('form-control')->placeholder('Point of Contact Name') }}
</div>
<div class="col-md-6">
{{ html()->label('Number')->class('form-label')->for('poc_contact') }}
{{ html()->text('poc_contact')->class('form-control')->placeholder('Point of Contact Number') }}
</div>
</div>
<div class="border border-1 border-dashed my-3"></div>
<h6 class="card-title text-primary mb-4">Additional Information</h6>
<div class="row g-3">
<div class="col-md-12">
{{ html()->label('Description')->class('form-label')->for('description') }}
{{ html()->textarea('description')->class('form-control ckeditor-classic') }}
</div>
</div>
</div>
</div>
</div>
<div class="col-md-4 col-xl-3">
<div class="card">
<div class="card-header">
<h6 class="card-title mb-0 fs-14">
Published
</h6>
</div>
<div class="card-body">
{{ html()->label('Status')->class('form-label visually-hidden')->for('status') }}
{{ html()->select('status', config('constants.page_status_options'))->class('form-select choices-select') }}
</div>
<x-form-buttons :href="route('client.index')" :label="isset($client) ? 'Update' : 'Create'" />
</div>
<div class="card mb-3">
<div class="card-header">
<h5 class="card-title mb-0">Logo</h5>
</div>
<div class="card-body">
<div class="mb-3">
{{ html()->label('Logo')->class('form-label visually-hidden')->for('logo') }}
<x-image-input :data="$editable ? $client->getRawOriginal('logo') : null" id="logo" name="logo" :editable="$editable" :multiple=false />
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h5 class="card-title mb-0">Document</h5>
</div>
<div class="card-body">
<div class="mb-3">
{{ html()->label('Promised')->class('form-label')->for('promised_document') }}
<x-image-input :data="$editable ? $client->getRawOriginal('promised_document') : null" id="promised_document" name="promised_document" :editable="$editable"
:multiple=false />
</div>
<div class="mb-3">
{{ html()->label('POC')->class('form-label')->for('poc_document') }}
<x-image-input :data="$editable ? $client->getRawOriginal('poc_document') : null" id="poc_document" name="poc_document" :editable="$editable"
:multiple=false />
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,392 @@
@extends('layouts.app')
@section('content')
<div class="container-fluid">
<x-dashboard.breadcumb :title="$title" />
<div class="row">
<div class="col-lg-4 col-xxl-3">
<div class="card" id="contact-view-detail">
<div class="card-body text-center">
@if ($client->logo)
<div class="position-relative d-inline-block">
<img src="{{ $client->logo }}" alt="" class="avatar-lg rounded-circle img-thumbnail">
<span class="contact-active position-absolute rounded-circle bg-success"><span
class="visually-hidden"></span>
</span>
</div>
@endif
<h5 class="mt-4 mb-2">{{ $client->name }}</h5>
<ul class="list-inline mb-0">
<li class="list-inline-item avatar-xs">
<a href="tel:{{ $client->contact }}"
class="avatar-title bg-success-subtle text-success fs-15 rounded">
<i class="ri-phone-line"></i>
</a>
</li>
<li class="list-inline-item avatar-xs">
<a href="https://wa.me/{{ $client->whatsapp ?? $client->contact }}" target="_blank"
class="avatar-title bg-danger-subtle text-danger fs-15 rounded">
<i class="ri-whatsapp-line"></i>
</a>
</li>
</ul>
</div>
<div class="card-body">
<h6 class="text-muted text-uppercase fw-semibold mb-3">Client Information</h6>
<p class="text-muted mb-4">{!! strip_tags($client->description) !!}</p>
<div class="table-responsive table-card">
<table class="table table-borderless mb-0">
<tbody>
<tr>
<td class="fw-medium" scope="row">Contact</td>
<td>{{ $client->contact }}</td>
</tr>
<tr>
<td class="fw-medium" scope="row">Manager</td>
<td>{{ $client->manager_name ?? 'Not Provided' }}</td>
</tr>
<tr>
<td class="fw-medium" scope="row">Manager Contact</td>
<td>{{ $client->manager_contact ?? 'Not Provided' }}</td>
</tr>
<tr>
<td class="fw-medium" scope="row">POC Name</td>
<td>{{ $client->poc_name ?? 'Not Provided' }}</td>
</tr>
<tr>
<td class="fw-medium" scope="row">POC Contact</td>
<td>{{ $client->poc_contact ?? 'Not Provided' }}</td>
</tr>
@php
$status = $client->status ? 'Published' : 'Draft';
$color = $client->status ? 'success' : 'danger';
@endphp
<tr>
<td class="fw-medium" scope="row">Status</td>
<td>
<span
class="badge bg-{{ $color }}-subtle text-{{ $color }}">{{ $status }}</span>
</td>
</tr>
<tr>
<td class="fw-medium" scope="row">Created At</td>
<td>{{ getFormatted(date: $client->created_at) }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
{{-- <div class="card mb-3">
<div class="card-body">
<div class="d-flex mb-3">
<h6 class="card-title mb-0 flex-grow-1">Assigned To</h6>
<div class="flex-shrink-0">
<button type="button" class="btn btn-soft-danger btn-sm" data-bs-toggle="modal"
data-bs-target="#inviteMembersModal"><i class="ri-share-line me-1 align-bottom"></i>
Assigned Member</button>
</div>
</div>
<ul class="list-unstyled vstack gap-3 mb-0">
<li>
<div class="d-flex align-items-center">
<div class="flex-shrink-0">
<img src="assets/images/users/avatar-10.jpg" alt=""
class="avatar-xs rounded-circle">
</div>
<div class="flex-grow-1 ms-2">
<h6 class="mb-1"><a href="pages-profile.html">Tonya Noble</a></h6>
<p class="text-muted mb-0">Full Stack Developer</p>
</div>
<div class="flex-shrink-0">
<div class="dropdown">
<button class="btn btn-icon btn-sm fs-16 text-muted dropdown" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="ri-more-fill"></i>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-eye-fill text-muted me-2 align-bottom"></i>View</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-star-fill text-muted me-2 align-bottom"></i>Favorite</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-delete-bin-5-fill text-muted me-2 align-bottom"></i>Delete</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="d-flex align-items-center">
<div class="flex-shrink-0">
<img src="assets/images/users/avatar-8.jpg" alt=""
class="avatar-xs rounded-circle">
</div>
<div class="flex-grow-1 ms-2">
<h6 class="mb-1"><a href="pages-profile.html">Thomas Taylor</a></h6>
<p class="text-muted mb-0">UI/UX Designer</p>
</div>
<div class="flex-shrink-0">
<div class="dropdown">
<button class="btn btn-icon btn-sm fs-16 text-muted dropdown" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="ri-more-fill"></i>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-eye-fill text-muted me-2 align-bottom"></i>View</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-star-fill text-muted me-2 align-bottom"></i>Favorite</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-delete-bin-5-fill text-muted me-2 align-bottom"></i>Delete</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li>
<div class="d-flex align-items-center">
<div class="flex-shrink-0">
<img src="assets/images/users/avatar-2.jpg" alt=""
class="avatar-xs rounded-circle">
</div>
<div class="flex-grow-1 ms-2">
<h6 class="mb-1"><a href="pages-profile.html">Nancy Martino</a></h6>
<p class="text-muted mb-0">Web Designer</p>
</div>
<div class="flex-shrink-0">
<div class="dropdown">
<button class="btn btn-icon btn-sm fs-16 text-muted dropdown" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
<i class="ri-more-fill"></i>
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-eye-fill text-muted me-2 align-bottom"></i>View</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-star-fill text-muted me-2 align-bottom"></i>Favorite</a>
</li>
<li><a class="dropdown-item" href="javascript:void(0);"><i
class="ri-delete-bin-5-fill text-muted me-2 align-bottom"></i>Delete</a>
</li>
</ul>
</div>
</div>
</div>
</li>
</ul>
</div>
</div> --}}
</div>
<div class="col-lg-8 col-xxl-9">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-lg-3">
<div class="card">
<div class="card-body d-flex gap-3 align-items-center">
<div class="avatar-sm">
<div
class="avatar-title border bg-success-subtle border-success border-opacity-25 rounded-2 fs-17">
<i class="ri-product-hunt-line text-success fs-24"></i>
</div>
</div>
<div class="flex-grow-1">
<h5 class="fs-15">{{ $client->products->count() }}</h5>
<p class="mb-0 text-muted">Products</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="text-muted">
<h6 class="mb-3 fw-semibold text-uppercase">Activity Log</h6>
<div class="tab-content text-muted">
<div class="tab-pane active" id="today" role="tabpanel">
<div data-simplebar style="max-height: 400px;">
<div class="profile-timeline">
<div class="accordion accordion-flush" id="todayExample">
@forelse ($client->activityLogs as $index => $log)
<div class="accordion-item border-0">
<div class="accordion-header" id="heading{{ $index }}">
<a class="accordion-button p-2 shadow-none"
data-bs-toggle="collapse"
href="#collapse{{ $index }}"
aria-expanded="false">
<div class="d-flex">
<div class="avatar-xs flex-shrink-0">
<div
class="avatar-title bg-light text-primary rounded-circle">
<i class="ri-history-line"></i>
</div>
</div>
<div class="flex-grow-1 ms-3">
<h6 class="fs-14 mb-1">
{{ $log->title }}
</h6>
<small class="text-muted">{!! $log->data !!} -
<span
style="color: #C71585;">{{ \Carbon\Carbon::parse($log->created_at)->format('d M, Y H:i A') }}</span></small>
</div>
</div>
</a>
</div>
<div id="collapse{{ $index }}"
class="accordion-collapse show collapse"
aria-labelledby="heading{{ $index }}"
data-bs-parent="#accordionExample">
<div class="accordion-body ms-2 ps-5">
<div class="row g-2">
<div class="col-auto"></div>
</div>
</div>
</div>
</div>
@empty
@endforelse
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--end card-->
<div class="card">
<div class="card-header">
<div>
<ul class="nav nav-tabs-custom rounded card-header-tabs border-bottom-0" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-bs-toggle="tab" href="#products" role="tab">
Products ({{ $client?->products?->count() }})
</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#documents" role="tab">
Documents (3)
</a>
</li>
</ul>
<!--end nav-->
</div>
</div>
<div class="card-body">
<div class="tab-content">
<div class="tab-pane active" id="products" role="tabpanel">
<div class="table-responsive table-card">
<table class="table align-middle mb-0">
<thead class="table-light text-muted">
<tr>
<th scope="col">Title</th>
<th scope="col">Created At</th>
<th scope="col">Status</th>
</tr>
</thead>
<tbody>
@foreach ($client->products as $product)
<tr>
<th scope="row">
<div class="flex-grow-1 ms-2">
<a href="#" class="fw-medium">{{ $product->name }}</a>
</div>
</th>
<td>{{ getFormatted(date: $product->created_at) }}</td>
@php
$status = $client->status ? 'Published' : 'Draft';
$color = $client->status ? 'success' : 'danger';
@endphp
<td><span
class="badge bg-{{ $color }}-subtle text-{{ $color }}">{{ $status }}</span>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@php
$documents = array_filter([
'logo' => $client->log,
'promised-document' => $client->promised_document,
'poc-document' => $client->poc_document,
]);
@endphp
<div class="tab-pane" id="documents" role="tabpanel">
<div class="table-responsive table-card">
<table class="table table-borderless align-middle mb-0">
<thead class="table-light text-muted">
<tr>
<th scope="col">File Name</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
@foreach ($documents as $key => $url)
<tr>
<td>
<div class="d-flex align-items-center">
<div class="avatar-sm">
<div
class="avatar-title bg-primary-subtle text-primary rounded fs-20">
<i class="ri-file-zip-fill"></i>
</div>
</div>
<div class="ms-3 flex-grow-1">
<h6 class="fs-15 mb-0"><a href="{{ asset($url) }}">{{ $key }}</a></h6>
</div>
</div>
</td>
<td>
<div class="dropdown">
<a href="javascript:void(0);" class="btn btn-light btn-icon"
id="dropdownMenuLink1" data-bs-toggle="dropdown"
aria-expanded="true">
<i class="ri-equalizer-fill"></i>
</a>
<ul class="dropdown-menu dropdown-menu-end"
aria-labelledby="dropdownMenuLink1"
data-popper-placement="bottom-end"
style="position: absolute; inset: 0px 0px auto auto; margin: 0px; transform: translate(0px, 23px);">
<li><a class="dropdown-item" href="{{ asset($url) }}"><i
class="ri-eye-fill me-2 align-middle text-muted"></i>View</a>
</li>
<li><a class="dropdown-item" href="{{ asset($url) }}" download><i
class="ri-download-2-fill me-2 align-middle text-muted"></i>Download</a>
</li>
</ul>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection