first commit

This commit is contained in:
benjibennn
2023-12-22 12:35:55 +08:00
commit 9f89a732d6
872 changed files with 156291 additions and 0 deletions

View File

@@ -0,0 +1,397 @@
@extends('theme::layouts.app')
@section('content')
<style type="text/css">
.dashboard-title{
font-size: 32px;
color: #364257;
margin-right: 80px;
}
.dashboard-btn{
margin-right: 20px;
font-weight: bold;
width: 250px;
padding: 12px !important;
text-align: center;
display: flex;
align-items: center;
line-height: 30px;
justify-content: center;
border-radius: 3px;
}
.back-btn {
background-color: #9B0025;
color: #FFF;
padding: 20px 105px;
width: 250px;
}
</style>
<div class="dashboard-title-flex">
<h2 class="dashboard-title">{{ __("Bookkeeping") }}</h2>
<div class="dashboard-button-title">
<a href="#" class="btn primary-button" data-bs-toggle="modal" data-bs-target="#newCategoryModal">{{ __("New Category") }}</a>
<a href="{{ route('cms.bookkeepings') }}" class="btn btn-error">{{ __("Back") }}</a>
</div>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd no-box-shadow">
<table id="categoriesTable">
<thead>
<tr>
<td>{{ __("Category Name") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
{{-- Modals --}}
{{-- Add Category Modal --}}
<div class="modal fade custom-modal" id="newCategoryModal" tabindex="-1" aria-labelledby="newCategoryModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("Category detail") }}</p>
<form action="{{ route('cms.bookkeepings.categories.store') }}" class="theme-form" id="addCategoryFrm">
<div class="row">
<div class="col-md-12">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="name" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Edit Category Modal --}}
<div class="modal fade custom-modal" id="editCategoryModal" tabindex="-1" aria-labelledby="editCategoryModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("Category detail") }}</p>
<form action="#" class="theme-form" id="editCategoryFrm">
<div class="row">
<div class="col-md-12">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="name" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Saved Success Modal --}}
<div class="modal fade validation-modal style2" id="validationModal" tabindex="-1" aria-labelledby="validationModal1Label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="text-center error-message">{{ __("All changes have been saved!") }}</p>
<button type="button" class="btn br-0" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var categoriesTable = $("#categoriesTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.bookkeepings.categories.table") }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'name', name: 'name'},
{data: 'status', name: 'status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$('#addCategoryFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
$('#newCategoryModal').modal('hide');
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
$('#addUserFrm').trigger("reset");
categoriesTable.ajax.reload();
}
else {
$('#validationModal .error-message').html(data.message);
$('#validationModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '.remove-category', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
categoriesTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.view-edit-category', function(e) {
var actionType = $(this).attr('data-action-type');
var actionShow = $(this).attr('data-action-show');
var actionUpdate = $(this).attr('data-action-update');
if (actionShow && actionUpdate) {
$.ajax({
url: actionShow,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#editCategoryFrm').attr('action', actionUpdate);
$('#editCategoryFrm input[name="name"]').val(data.category.name);
$('#editCategoryFrm select[name="status"]').val(data.category.status);
if (actionType == 'edit') {
$('#editCategoryFrm input[name="name"]').removeAttr('disabled');
$('#editCategoryFrm select[name="status"]').removeAttr('disabled');
}
else {
$('#editCategoryFrm input[name="name"]').attr('disabled', 'disabled');
$('#editCategoryFrm select[name="status"]').attr('disabled', 'disabled');
}
$('#editCategoryModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
$('#editCategoryFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
$('#editCategoryModal').modal('hide');
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
$('#editCategoryFrm').trigger("reset");
categoriesTable.ajax.reload();
}
else {
$('#validationModal .error-message').html(data.message);
$('#validationModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
});
</script>
@endsection

View File

@@ -0,0 +1,356 @@
@extends('theme::layouts.app')
@section('style')
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/css/bootstrap-datepicker.min.css" />
<style type="text/css">
.dashboard-title{
font-size: 32px;
color: #364257;
margin-right: 80px;
}
.dashboard-btn{
margin-right: 20px;
font-weight: bold;
width: 250px;
padding: 12px !important;
text-align: center;
display: flex;
align-items: center;
line-height: 30px;
justify-content: center;
border-radius: 3px;
}
.back-btn {
background-color: #9B0025;
color: #FFF;
padding: 20px 105px;
width: 250px;
}
</style>
@endsection
@section('content')
<button type="button" class="d-none reload-main-table"></button>
<div class="dashboard-title-flex">
<h2 class="dashboard-title">{{ __("Document Library") }}</h2>
<div class="dashboard-button-title">
<a href="#" class="btn primary-button" data-bs-toggle="modal" data-bs-target="#uploadDocumentModal">{{ __("Upload Document") }}</a>
<a href="{{ route('cms.bookkeepings') }}" class="btn btn-error">{{ __("Back") }}</a>
</div>
</div>
<form class="search-bar flex mb-5" id="searchFilterFrm">
<span class="search-bar__label">{{ __("Document/Record search") }}</span>
<div class="search-bar__field">
<button type="button" data-bs-toggle="modal" data-bs-target="#searchFilterModal"><img src="{{ asset('themes/tailwind/images/setting-4.svg') }}"></button>
<input type="text" name="main_search_file_name" class="w-100" style="box-shadow: none;">
</div>
<button type="submit" class="btn primary-button search-bar__button">{{ __("Search") }}</button>
</form>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd no-box-shadow">
<table id="documentLibrariesTable">
<thead>
<tr>
{{-- <td style="width: fit-content;"><input type="checkbox"></td> --}}
<td>{{ __("Document Name") }}</td>
<td>{{ __("Company") }}</td>
<td>{{ __("Document Category") }}</td>
<td>{{ __("Upload User") }}</td>
<td>{{ __("Document Size") }}</td>
<td>{{ __("Date Uploaded") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>ABC Consultant Ltd.</td>
<td>Report</td>
<td>Admin</td>
<td class="primary-text">234KB</td>
<td>20230515-14:43</td>
<td>
<a href="#" class="primary-text">View</a> |
<a href="#" class="primary-text">Properties</a> |
<a href="#" class="primary-text">Download</a>
</td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>ABC Consultant Ltd.</td>
<td>Report</td>
<td>Admin</td>
<td class="primary-text">234KB</td>
<td>20230515-14:43</td>
<td>
<a href="#" class="primary-text">View</a> |
<a href="#" class="primary-text">Properties</a> |
<a href="#" class="primary-text">Download</a>
</td>
</tr> --}}
</tbody>
</table>
<div class="d-flex align-items-center justify-content-center">
<a href="{{ route('cms.bookkeepings.document-libraries.export') }}" class="btn primary-button w-fit-content mb-3" style="min-width: 300px;">{{ __("Download") }}</a>
</div>
</div>
</div>
{{-- Modals --}}
{{-- Upload Document Modal --}}
@include('theme::cms.bookkeepings.document-libraries.upload-document-modal')
<div class="modal fade custom-modal" id="searchFilterModal" tabindex="-1" aria-labelledby="searchFilterModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("Search") }}</p>
<form action="#" class="theme-form" id="searchFilterModalFrm">
<div class="row mb-5 align-items-center">
<div class="col-4">
<label class="col-form-label">{{ __("Document category") }}</label>
</div>
<div class="col">
<select class="w-100" name="search_bookkeeping_document_category_id">
@foreach ($categories as $category)
<option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
</select>
</div>
</div>
<div class="row mb-5 align-items-center">
<div class="col-4">
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="search_status">
<option value="uploaded">{{ __("Uploaded") }}</option>
<option value="in_progress">{{ __("In Progress") }}</option>
<option value="ocr_complete">{{ __("OCR Complete") }}</option>
<option value="failed">{{ __("Failed") }}</option>
<option value="completed">{{ __("Completed") }}</option>
</select>
</div>
</div>
<div class="row mb-5 align-items-center">
<div class="col-4">
<label class="col-form-label">Keyword</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="search_file_name">
</div>
</div>
<div class="mb-5">
<div class="row align-items-center">
<div class="col-4">
<label class="col-form-label">Date uploaded</label>
</div>
<div class="col">
<select class="w-100" name="search_date_uploaded">
<option value="">Any time</option>
<option value="today">{{ __("Today") }}</option>
<option value="yesterday">{{ __("Yesterday") }}</option>
<option value="last_7_days">{{ __("Last 7 days") }}</option>
<option value="last_30_days">{{ __("Last 30 days") }}</option>
<option value="last_90_days">{{ __("Last 90 days") }}</option>
<option value="custom">{{ __("Custom") }}</option>
</select>
</div>
</div>
<div class="row" style="display:none;" id="customDateWrapper">
<div class="col-md-12">
<label class="col-form-label">Between</label>
</div>
<div class="row align-items-center">
<div class="col">
<input type="text" class="form-control" value="" name="search_date_from">
</div>
<div class="col">
<input type="text" class="form-control" value="" name="search_date_to">
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Search") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.10.0/js/bootstrap-datepicker.min.js"></script>
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/bookkeepings/document-libraries/upload-document-modal.js') }}"></script>
<script>
$(document).ready(function(){
var mainSearchBtnClicked = false;
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('#searchFilterModalFrm [name="search_date_from"]').datepicker().on('changeDate', function (selected) {
var minDate = new Date(selected.date.valueOf());
$('#searchFilterModalFrm [name="search_date_to"]').datepicker('setStartDate', minDate);
$('#searchFilterModalFrm [name="search_date_to"]').val('');
});
$('#searchFilterModalFrm [name="search_date_to"]').datepicker();
var documentLibrariesTable = $("#documentLibrariesTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.bookkeepings.document-libraries.table") }}',
type: 'post',
"data": function ( d ) {
if (mainSearchBtnClicked == false && $('#searchFilterModal').is(':visible')) {
return $.extend( {}, d, {
"bookkeeping_document_category_id": $('#searchFilterModalFrm [name="search_bookkeeping_document_category_id"]').val(),
"status": $('#searchFilterModalFrm [name="search_status"]').val(),
"file_name": $('#searchFilterModalFrm [name="search_file_name"]').val(),
"date_uploaded": $('#searchFilterModalFrm [name="search_date_uploaded"]').val(),
"date_uploaded_from": $('#searchFilterModalFrm [name="search_date_from"]').val(),
"date_uploaded_to": $('#searchFilterModalFrm [name="search_date_to"]').val(),
} );
}
else if (mainSearchBtnClicked) {
return $.extend( {}, d, {
"file_name": $('#searchFilterFrm [name="main_search_file_name"]').val(),
} );
}
else {
return $.extend( {}, d, {} );
}
},
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
},
complete: function (data) {
if (mainSearchBtnClicked == false && $('#searchFilterModal').is(':visible')) {
$('#searchFilterFrm')[0].reset();
}
else if (mainSearchBtnClicked) {
$('#searchFilterModalFrm')[0].reset();
}
$('#searchFilterModal').modal('hide');
$('#searchFilterModalFrm button[type="submit"]').removeAttr('disabled');
$('#searchFilterModalFrm button[type="submit"]').html('{{ __("Search") }}');
$('#searchFilterFrm button[type="submit"]').removeAttr('disabled');
$('#searchFilterFrm button[type="submit"]').html('{{ __("Search") }}');
mainSearchBtnClicked = false;
}
},
columns: [
// {data: 'checkbox', name: 'checkbox', searchable: false, sortable: false},
{data: 'file_name', name: 'bookkeeping_documents.file_name'},
('{{ strtolower(app()->getLocale()) }}' == 'zh_hk' ? {data: 'name_chinese', name: 'companies.name_chinese'} : {data: 'name_english', name: 'companies.name_english'}),
{data: 'category_name', name: 'bookkeeping_document_categories.name'},
{data: 'user_name', name: 'users.name'},
{data: 'document_size', name: 'document_size', searchable: false, sortable: false},
{data: 'created_at', name: 'bookkeeping_documents.created_at'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[5, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(document).on('change', '#searchFilterModalFrm [name="search_date_uploaded"]', function (e) {
if ($(this).val() == 'custom') {
$('#searchFilterModalFrm #customDateWrapper').show();
}
else {
$('#searchFilterModalFrm #customDateWrapper').hide();
}
});
$(document).on('click', '.reload-main-table', function (e) {
documentLibrariesTable.ajax.reload();
});
$(document).on('submit', '#searchFilterModalFrm', function (e) {
e.preventDefault();
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled')) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
documentLibrariesTable.ajax.reload();
}
});
$(document).on('submit', '#searchFilterFrm', function (e) {
e.preventDefault();
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled')) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
mainSearchBtnClicked = true;
documentLibrariesTable.ajax.reload();
}
});
$(document).on('click', '.download-file', function (e) {
var id = $(this).attr('data-id');
var url = '{{ route("cms.bookkeepings.document-libraries.download", ["document" => ":id"]) }}';
if (id) {
$.ajax({
url: url.replace(':id', id),
type: "get",
data: {},
dataType: 'json',
success:function(data) {
},
error: function(data) {
}
});
}
});
});
</script>
@endsection

View File

@@ -0,0 +1,176 @@
<style type="text/css">
.pop-up-btn-confirm {
background-image: linear-gradient(to right, #62C5BD , #C8E1A4) !important;
width: 200px;
}
.pop-up-btn-deny {
width: 200px;
}
.align-left {
text-align: left;
}
select {
background-color: #EBEBE4;
}
.select-width {
width: 250px;
}
.fix-text{
white-space: pre;
text-overflow: ellipsis;
width: 130px;
overflow: hidden;
}
.d-none{
display: none;
}
.dragDropContainer{
border: 2px dashed #000;
border-radius: 10px;
padding: 20px;
cursor: pointer;
}
.btn-upload{
background-color: #58C2B1;
padding: 10px 50px;
color: #000;
box-shadow: 0px 4px 8px #15785440;
}
.uploadingContainer{
background-color: #F4F7FA;
padding: 15px;
}
.group-input-cont{
width: 100%;
align-items: center;
overflow: hidden;
}
.group-input-label{
float: left;
padding: 10px 0;
}
.group-input{
width: 100%;
}
.group-input-span {
display: block;
overflow: hidden;
padding-right:10px;
}
.uploaded-file-container {
background-color: #F4F7FA;
padding: 15px 10px;
height: calc(100vh - 630px);
overflow-y: auto;
overflow-x: hidden;
margin-bottom: 30px;
}
.uploaded-file-container .file-row {
border-bottom: 1px solid;
border-image-source: linear-gradient(90deg, rgba(87, 87, 87, 0.2) 0%, #010101 48.44%, rgba(74, 74, 74, 0.2) 100%);
}
.uploaded-file-container .file-row .file-details {
display: flex;
align-items: center;
justify-content: space-between;
}
.uploaded-file-container .file-row .file-details .file-title {
font-size: 18px;
font-weight: 600;
line-height: 25px;
letter-spacing: 0em;
color: #000000;
}
.uploaded-file-container .file-row .file-details .file-progress-wrapper {
background-color: #EBEBE4;
width: 250px;
height: 39px;
}
.uploaded-file-container .file-row .file-details .file-progress-wrapper .file-progress {
height: 100%;
background-color: #2C21FE;
}
.uploaded-file-container .file-row .file-details .file-progress-wrapper .file-progress.green {
background-color: #06AE25;
}
.uploaded-file-container .file-row .file-details .file-progress-remove {
cursor: pointer;
}
.uploaded-file-container .file-row .file-details select {
padding: 8px 12px;
padding-right: 40px;
}
.uploaded-file-container .file-row-separator {
background: linear-gradient(90deg, rgba(87, 87, 87, 0.2) 0%, #010101 48.44%, rgba(74, 74, 74, 0.2) 100%);
margin-bottom: 10px;
}
.uploaded-file-count {
font-size: 20px;
font-weight: 600;
line-height: 27px;
letter-spacing: 0em;
color: #06AE25;
margin-bottom: 30px;
text-align: right;
}
</style>
<div class="modal fade custom-modal" id="uploadDocumentModal" tabindex="-1" aria-labelledby="uploadDocumentModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("Upload Document") }}</p>
<form action="{{ route('cms.bookkeepings.document-libraries.store') }}" class="theme-form" id="uploadDocumentFrm">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Company Name") }}</label>
</div>
<div class="col">
<select class="w-100" name="company_id">
<option value="" selected>{{ __("Select a company") }}</option>
</select>
</div>
</div>
<input type="file" name="uploaded_files" id="updloadedFiles" class="d-none" accept="image/png, image/jpeg, application/pdf, application/msword" multiple>
<div class="dragDropContainer flex justify-between mb-5">
<div class="flex">
<img src="/themes/tailwind/images/cloudUpload.png" alt="Cloud Upload" class="mr-5">
<span style="color:#58C2B1;">
{{ __("Drag and drop files here or choose file.") }}
<br>
{{ __("Accepted file types: Doc / PDF / JPG / PNG") }}
</span>
</div>
<button type="button" class="btn-upload">{{ __("Choose File") }}</button>
</div>
<div class="uploaded-file-container" id="uploadedFileList"></div>
<div class="uploaded-file-count" id="uploadedFileCount">
<span id="totalDone">0</span> {{ __("of") }} <span id="totalFile">0</span> {{ __("files uploaded") }}
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Submit in queue") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,718 @@
@extends('theme::layouts.app')
@section('content')
<button type="button" class="d-none reload-main-table"></button>
<style type="text/css">
.dashboard-title{
font-size: 32px;
color: #364257;
margin-right: 80px;
}
.pop-up-btn-confirm {
background-image: linear-gradient(to right, #62C5BD , #C8E1A4) !important;
width: 200px;
}
.pop-up-btn-deny {
width: 200px;
}
select {
background-color: #EBEBE4;
}
.fix-text{
white-space: pre;
text-overflow: ellipsis;
width: 130px;
overflow: hidden;
}
.tabs-navigation.blue-tabs li{
background-image: linear-gradient(to right, #575757 , #010101) !important;
width: 100%;
}
.tabs-navigation.blue-tabs li.active a {
background: white;
}
.tabs-navigation.blue-tabs li a{
width: 100%;
padding: 10px;
}
.tabs-navigation.blue-tabs li.active .tab-number {
background: #EBEBE4;
color: #364257;
}
.blue-text{
color: #2C21FE;
}
.max-25{
width: 100%;
max-width: 25px;
}
#bookkeepingLogTable {
border-collapse: collapse;
width: 100%;
}
#bookkeepingLogTable td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
#bookkeepingActionLogsListTable_wrapper {
border: 2px solid #D6DEE9 !important;
box-shadow: none !important;
margin-bottom: 30px;
}
#bookkeepingActionLogsListTable_wrapper tbody tr {
background-color: #D6DEE9;
color: #364257;
}
</style>
<div class="dashboard-title-flex nowrap">
<h2 class="dashboard-title">Bookkeeping</h2>
<div class="dashboard-button-title">
<a href="#" class="btn primary-button" data-bs-toggle="modal" data-bs-target="#uploadDocumentModal">{{ __("Upload Document") }}</a>
<a href="{{ route('cms.bookkeepings.document-libraries') }}" class="btn primary-button">{{ __("Document Library") }}</a>
<a href="#" class="btn primary-button view-bookkeeping-action-logs">{{ __("Bookkeeping Action Log") }}</a>
<a href="{{ route('cms.bookkeepings.categories') }}" class="btn primary-button">{{ __("Category List") }}</a>
</div>
</div>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}"> {{ __("In Queue List") }} <span class="tab-number" id="queueTotal" style="display:none;">0</span></a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}"> {{ __("Completed List") }} <span class="tab-number" id="completedTotal" style="display:none;">0</span></a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd" id="in-queue">
<div class="sidebyside paddingy-10 paddingx-10">
<p class="blue-text">{{ __("Number of file in process") }}: <span id="process_count">0</span></p>
<p class="blue-text">{{ __("Total item(s) in Queue") }}: <span id="queue_count">0</span></p>
</div>
<table id="bookkeepingInQueueTable" class="">
<thead>
<tr>
<td>{{ __("Original Name") }}</td>
<td>{{ __("Company") }}</td>
<td>{{ __("Category") }}</td>
<td>{{ __("Vendor") }}</td>
<td>{{ __("Batch Name") }}</td>
<td>{{ __("Remark") }}</td>
<td>{{ __("Upload date&time") }}</td>
<td>{{ __("Status") }}</td>
<td style="width: 70px; max-width: 100%;">{{ __("Xero Status") }}</td>
<td style="width: 70px; max-width: 100%;">{{ __("Xero Amount") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/success.svg') }}"></td>
<td>$4000</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/success.svg') }}"></td>
<td>$4000</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/error.svg') }}"></td>
<td>$4000</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr> --}}
</tbody>
</table>
</div>
<div class="tabs-content-item white-bg no-padd" id="completed" style="display: none;">
<table id="bookkeepingCompletedTable" class="">
<thead>
<tr>
<td>{{ __("Original Name") }}</td>
<td>{{ __("Company") }}</td>
<td>{{ __("Category") }}</td>
<td>{{ __("Vendor") }}</td>
<td>{{ __("Batch Name") }}</td>
<td>{{ __("Remark") }}</td>
<td>{{ __("Upload date&time") }}</td>
<td>{{ __("Status") }}</td>
<td style="width: 70px; max-width: 100%;">{{ __("Xero Status") }}</td>
<td style="width: 70px; max-width: 100%;">{{ __("Xero Amount") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/success.svg') }}"></td>
<td>$4000</td>
</tr>
<tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/success.svg') }}"></td>
<td>$4000</td>
</tr>
<tr>
<td>DCE Consultant Ltd.</td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><img class="max-25" src="{{ asset('themes/tailwind/images/error.svg') }}"></td>
<td>$4000</td>
</tr> --}}
</tbody>
</table>
</div>
</div>
{{-- Modals --}}
{{-- Upload Document Modal --}}
@include('theme::cms.bookkeepings.document-libraries.upload-document-modal')
<div class="modal fade custom-modal" id="updateXeroInformationModal" tabindex="-1" aria-labelledby="updateXeroInformationModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("Update Xero information") }}</p>
<form action="#" class="theme-form" id="updateXeroInformationModalFrm">
<input type="hidden" name="id">
<div class="mx-auto text-center" style="max-width: 300px;">
<div class="row mb-4 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Xero Status") }}</label>
</div>
<div class="col">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="xero_status" id="xeroStatus0" value="0" required>
<label class="form-check-label" for="xeroStatus0">{{ __("N/A") }}</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="xero_status" id="xeroStatus1" value="1" required>
<label class="form-check-label" for="xeroStatus1">{{ __("Checked") }}</label>
</div>
</div>
</div>
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Xero Amount") }}</label>
</div>
<div class="col">
<input type="text" class="form-control number-only" value="" name="xero_amount" required>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Confirm") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Bookkeeping Action Logs Modal --}}
<div class="modal fade custom-modal" id="bookkeepingActionLogsModal" tabindex="-1" aria-labelledby="bookkeepingActionLogsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title mb-4">{{ __("User Log") }}</p>
<table id="bookkeepingActionLogsListTable" class="">
<thead>
<tr>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("By") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="d-flex align-items-center justify-content-center">
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
@endsection
@section('script')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/bookkeepings/document-libraries/upload-document-modal.js') }}"></script>
<script>
function confirmPopUp() {
Swal.fire({
title: 'Require Datamolino?',
confirmButtonText: 'Yes',
showConfirmButton: true,
showDenyButton: true,
customClass: {
confirmButton: 'pop-up-btn-confirm',
denyButton: 'pop-up-btn-deny',
},
})
}
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var bookkeepingInQueueTable = $("#bookkeepingInQueueTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.bookkeepings.table", ["isCompleted" => 0]) }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
},
complete: function (data) {
if (data['responseJSON'].recordsTotal > 0) {
$('#queueTotal').show();
$('#queueTotal').html(data['responseJSON'].recordsTotal);
$('#process_count').html(data['responseJSON'].processCount);
$('#queue_count').html(data['responseJSON'].queueCount);
}
else {
$('#queueTotal').hide();
}
},
},
columns: [
{data: 'file_name', name: 'bookkeeping_documents.file_name'},
('{{ strtolower(app()->getLocale()) }}' == 'zh_hk' ? {data: 'name_chinese', name: 'companies.name_chinese'} : {data: 'name_english', name: 'companies.name_english'}),
{data: 'category_name', name: 'bookkeeping_document_categories.name'},
{data: 'user_name', name: 'users.first_name'},
{data: 'batch_name', name: 'bookkeeping_documents.batch_name'},
{data: 'remark', name: 'bookkeeping_documents.remark'},
{data: 'created_at', name: 'bookkeeping_documents.created_at'},
{data: 'status_select', name: 'bookkeeping_documents.status'},
{data: 'xero_status', name: 'bookkeeping_documents.xero_status'},
{data: 'xero_amount', name: 'bookkeeping_documents.xero_amount'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[6, "desc"]],
searchDelay: 500,
rowCallback: function ( row, data ) {
if (data.status == 'ocr_complete') {
$(row).css('background-color', ' #FFEFBD');
}
else if (data.status == 'failed') {
$(row).css('background-color', ' #F5AE97');
}
},
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
var bookkeepingCompletedTable = $("#bookkeepingCompletedTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.bookkeepings.table", ["isCompleted" => 1]) }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
},
complete: function (data) {
if (data['responseJSON'].recordsTotal > 0) {
$('#completedTotal').show();
$('#completedTotal').html(data['responseJSON'].recordsTotal);
}
else {
$('#completedTotal').hide();
}
},
},
columns: [
('{{ strtolower(app()->getLocale()) }}' == 'zh_hk' ? {data: 'name_chinese', name: 'companies.name_chinese'} : {data: 'name_english', name: 'companies.name_english'}),
{data: 'file_name', name: 'bookkeeping_documents.file_name'},
{data: 'category_name', name: 'bookkeeping_document_categories.name'},
{data: 'user_name', name: 'users.name'},
{data: 'batch_name', name: 'bookkeeping_documents.batch_name'},
{data: 'remark', name: 'bookkeeping_documents.remark'},
{data: 'created_at', name: 'bookkeeping_documents.created_at'},
{data: 'status_select', name: 'bookkeeping_documents.status'},
{data: 'xero_status', name: 'bookkeeping_documents.xero_status'},
{data: 'xero_amount', name: 'bookkeeping_documents.xero_amount'},
],
order: [[6, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(document).on('click', '.reload-main-table', function (e) {
bookkeepingInQueueTable.ajax.reload();
bookkeepingCompletedTable.ajax.reload();
});
$(document).on('change', '.change-status', function (e) {
var _this = $(this);
var id = _this.attr('data-id');
var val = _this.val();
if (id) {
if (val == 'completed') {
$('#updateXeroInformationModal').modal('show');
$('#updateXeroInformationModal input[name="id"]').val(id);
}
else {
$.ajax({
url: '{{ route("cms.bookkeepings.update-status") }}',
type: "post",
data: {
'id': id,
'status': val,
},
dataType: 'json',
success:function(data) {
if (data.success) {
popToast('success', data.message);
bookkeepingInQueueTable.ajax.reload();
bookkeepingCompletedTable.ajax.reload();
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
}
});
}
}
});
$(document).on('submit', '#updateXeroInformationModalFrm', function (e) {
e.preventDefault();
var id = $(this).find('input[name="id"]').val();
var xeroStatus = $(this).find('input[name="xero_status"]:checked').val();
var xeroAmount = $(this).find('input[name="xero_amount"]').val();
var val = $(this).val();
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled')) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: '{{ route("cms.bookkeepings.update-status") }}',
type: "post",
data: {
'id': id,
'status': 'completed',
'xero_status': xeroStatus,
'xero_amount': xeroAmount,
},
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
$('#updateXeroInformationModal').modal('hide');
$('#updateXeroInformationModalFrm').reset();
bookkeepingInQueueTable.ajax.reload();
bookkeepingCompletedTable.ajax.reload();
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$("#updateXeroInformationModal").on('hide.bs.modal', function(){
bookkeepingInQueueTable.ajax.reload();
bookkeepingCompletedTable.ajax.reload();
});
$(document).on('click', '.view-bookkeeping-action-logs', function(e) {
e.preventDefault();
initializeBookkeepingActionLogsListTable();
$('#bookkeepingActionLogsModal').modal('show');
});
$(document).on('click', '.reupload-button', function (e) {
$(this).parent().find('.re-upload-file').click();
});
$(document).on('change', '.re-upload-file', function (e) {
var id = $(this).attr('data-id');
if (id) {
var formData = new FormData();
var file = $(this)[0].files[0];
formData.append('uploaded_file', file);
formData.append('id', id);
$.ajax({
url: '{{ route("cms.bookkeepings.re-upload-file") }}',
type: "post",
data: formData,
dataType: 'json',
processData: false,
contentType: false,
success:function(data) {
if (data.success) {
popToast('success', data.message);
bookkeepingInQueueTable.ajax.reload();
bookkeepingCompletedTable.ajax.reload();
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
}
});
}
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
var bookkeepingActionLogsListTable = null;
function initializeBookkeepingActionLogsListTable(url = '{{ route("cms.bookkeepings.action-logs-table") }}') {
if (bookkeepingActionLogsListTable) {
bookkeepingActionLogsListTable.destroy();
}
bookkeepingActionLogsListTable = $("#bookkeepingActionLogsListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: url,
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'date', name: 'document_action_logs.created_at'},
{data: 'time', name: 'document_action_logs.created_at'},
{data: 'event', name: 'document_action_logs.event'},
{data: 'description', name: 'document_action_logs.description'},
{data: 'status', name: 'document_action_logs.status'},
{data: 'name', name: 'users.name'},
],
order: [[1, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
}
});
</script>
@endsection

View File

@@ -0,0 +1,503 @@
@extends('theme::layouts.app')
@section('content')
<h2 class="dashboard-title">{{ __("Service Chat") }}</h2>
<div class="card-chat">
<div class="flex h-100">
<div class="chat-room-area">
<h3 class="h2-title text-left">{{ __("Chat Room") }}</h3>
<div class="accordion-lists">
<div class="accordion-box">
<div class="accordion-title">
<span class="text-uppercase">{{ __("Recent") }}</span>
<img src="{{ asset('themes/tailwind/images/arrow-down.svg') }}">
{{-- <button class="accordion-button"><img src="{{ asset('themes/tailwind/images/arrow-down.svg') }}"></button> --}}
</div>
<div class="accordion-items chat-lists">
{{-- <div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>Site Alpha</h4>
<span>Client: Company A</span>
</div>
<div class="accordion-notif">
<span class="number-item">4</span>
</div>
</div> --}}
</div>
</div>
</div>
</div>
<div class="chat-area" style="display:none;">
<div class="flex">
<div class="chat-topic">
<h3 class="topic-title text-uppercase">{{ __("Service Topic") }}</h3>
<div class="topic-lists">
{{-- <div class="topic-list">
<div class="topic-head">
<h4>Copmany Secretary Service</h4>
<time>21/04/2023</time>
</div>
<div class="topic-body">
<p>Client: Hi, I can't upload my documents successfully</p>
<span class="number-item">4</span>
</div>
</div>
<div class="topic-list">
<div class="topic-head">
<h4>Copmany Secretary Service</h4>
<time>21/04/2023</time>
</div>
<div class="topic-body">
<p>Client: Hi, I can't upload my documents successfully</p>
<span class="number-item">4</span>
</div>
</div>
<div class="topic-list">
<div class="topic-head">
<h4>Copmany Secretary Service</h4>
<time>21/04/2023</time>
</div>
<div class="topic-body">
<p>Client: Hi, I can't upload my documents successfully</p>
<span class="number-item">4</span>
</div>
</div>
<div class="topic-list">
<div class="topic-head">
<h4>Copmany Secretary Service</h4>
<time>21/04/2023</time>
</div>
<div class="topic-body">
<p>Client: Hi, I can't upload my documents successfully</p>
<span class="number-item">4</span>
</div>
</div>
<div class="topic-list">
<div class="topic-head">
<h4>Copmany Secretary Service</h4>
<time>21/04/2023</time>
</div>
<div class="topic-body">
<p>Client: Hi, I can't upload my documents successfully</p>
<span class="number-item">4</span>
</div>
</div> --}}
</div>
</div>
<div class="chat-inside-content" style="display:none;s">
<div class="chat-inside-head">
<h5 class="topic-title">-</h5>
<button class="more-item" type="button"><img src="{{ asset('themes/tailwind/images/more-plain.svg') }}"></button>
</div>
<div class="chat-inside-body">
{{-- <div class="chat-box chat-sender">
<div class="chat-label">LM</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box">
<div class="chat-label">CS</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box chat-sender">
<div class="chat-label">LM</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box">
<div class="chat-label">CS</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box chat-sender">
<div class="chat-label">LM</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box chat-sender">
<div class="chat-label">LM</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-box">
<div class="chat-label">CS</div>
<div class="chat-content"><time>1 day ago</time>Hi, I am logistics manager at Company A. My name is Ellen.</div>
</div>
<div class="chat-messages-date">
<span>Today</span>
</div> --}}
</div>
<div class="chat-inside-footer">
<div class="chat-message-box">
<form action="{{ route('cms.chat.send-message', ':id') }}" class="chat-message-box w-100" id="chatFrm">
<input type="file" name="chat_message_file" style="display:none;">
<button type="button" class="chat-file"><img src="{{ asset('themes/tailwind/images/Attachment.svg') }}"></button>
<button type="button" class="chat-smile"><img src="{{ asset('themes/tailwind/images/Smile.svg') }}"></button>
<textarea name="chat_message" placeholder="Type a message here..." rows="1"></textarea>
<button type="submit" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
</div>
</div>
</div>
<div class="chat-side-area" style="display:none;">
<div class="chat-side-head">
<img src="{{ asset('themes/tailwind/images/company.svg') }}">
<h3 class="text-uppercase">{{ __("Company Info") }}</h3>
</div>
<div class="company-info-wrapper">
<div class="chat-side-info">
<label class="text-uppercase">{{ __("User Email") }}</label>
<p class="user-email">-</p>
</div>
<div class="chat-side-info">
<label class="text-uppercase">{{ __("Phone") }}</label>
<p class="user-phone">-</p>
</div>
<div class="chat-side-info">
<label class="text-uppercase">{{ __("Location") }}</label>
<p class="company-address">-</p>
</div>
</div>
<div class="chat-side-scroll">
<div class="accordion-box">
<div class="accordion-title accordion-title__image">
<img src="{{ asset('themes/tailwind/images/simcard.svg') }}">
<span class="text-uppercase">{{ __("Form List") }}</span>
<img src="{{ asset('themes/tailwind/images/arrow-down.svg') }}">
{{-- <button class="accordion-button"><img src="http://127.0.0.1:8000/themes/tailwind/images/arrow-down.svg"></button> --}}
</div>
<div class="accordion-items">
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Incorporation of Hong Kong Limited") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Change Company Name") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Change Company Address") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Change of Company and Director (Appointment / Cessation)") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Change of Company Secretary (Appointment / Cessation)") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Change in Particulars of Company Secretary or Director") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
<div class="accordion-item">
<div class="accordion-content">
<h4>{{ __("Resignation of Reserve Director") }}</h4>
</div>
<div class="accordion-notif">
<button type="button" class="chat-send-message"><img src="{{ asset('themes/tailwind/images/send.svg') }}"></button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
window.Echo.channel(`chat-channel`).listen("ChatEvent", (e) => {
getChats();
if ($('.show-messages[data-id="' + e.chatId + '"]').hasClass('active') && e.toAdmin) {
var url = "{{ route('cms.chat.get-messages', [':id']) }}";
url = url.replace(":id", e.chatId);
showMessages(url);
}
});
$(document).on('click', '.show-topics', function(e) {
var userId = $(this).attr('data-user-id');
var companyId = $(this).attr('data-company-id');
var activeId = $('.show-messages.active').attr('data-id');
if (! $(this).hasClass('active')) {
$('.show-topics').removeClass('active');
$(this).addClass('active');
}
$.ajax({
url: "{{ route('cms.chat.get-topics') }}",
type: "post",
data: {
userId: userId,
companyId: companyId,
},
dataType: 'json',
success:function(data) {
var chats = data.chats;
var html = '';
chats.forEach(function(chat) {
html += `
<div class="topic-list show-messages ` + (activeId == chat.id ? 'active' : '') + `" data-id="` + chat.id + `" data-title="` + chat.topic + `">
<div class="topic-head">
<h4>` + chat.topic + `</h4>
<time>` + chat.date + `</time>
</div>
<div class="topic-body">
<p>Client: ` + chat.first_message + `</p>
` + (chat.unread_count > 0 ? `<span class="number-item">` + chat.unread_count + `</span>` : '') + `
</div>
</div>
`;
});
$('.topic-lists').html(html);
$('.company-info-wrapper .user-email').html(data.user.email ? data.user.email : '-');
$('.company-info-wrapper .user-phone').html(data.user.phone ? data.user.phone : '-');
$('.company-info-wrapper .company-address').html(data.company.address ? data.company.address : '-');
$('.chat-area').show();
$('.chat-side-area').show();
}
});
});
$(document).on('click', '.show-messages', function(e) {
var title = $(this).attr('data-title');
var id = $(this).attr('data-id');
var url = "{{ route('cms.chat.get-messages', [':id']) }}";
url = url.replace(":id", id);
$('.show-messages').removeClass('active');
$(this).addClass('active');
showMessages(url, title);
});
$(document).on('click', '#chatFrm .chat-file', function(e) {
$('#chatFrm input[name="chat_message_file"]').click();
});
$(document).on('change', '#chatFrm input[name="chat_message_file"]', function(e) {
if ($(this).val()) {
$('#chatFrm').submit();
}
});
$(document).on('submit', '#chatFrm', function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var data = new FormData(this);
var id = $('.show-messages.active').attr('data-id');
action = action.replace(":id", id);
if (!button.is(':disabled') && action && ($('#chatFrm [name="chat_message"]').val() != '' || $('#chatFrm [name="chat_message_file"]').val() != '')) {
button.attr('disabled', 'disabled');
$('#chatFrm [name="chat_message"]').val('');
$('#chatFrm [name="chat_message_file"]').val('');
$.ajax({
url: action,
type: "post",
data: data,
dataType: 'json',
processData: false,
contentType: false,
success:function(data) {
button.removeAttr('disabled');
$('.show-messages.active').click();
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
}
});
}
});
$(document).on( 'keyup', '#chatFrm textarea', function (){
$(this).height( 0 );
$(this).height( this.scrollHeight );
}).keypress(function (e) {
if(e.which === 13 && !e.shiftKey) {
e.preventDefault();
$('#chatFrm').submit();
}
});
getChats();
function getChats() {
var activeId = $('.show-topics.active').attr('data-id');
$.ajax({
url: "{{ route('cms.chat.get-chats') }}",
type: "get",
data: {},
dataType: 'json',
success:function(data) {
var chats = data.chats;
var html = '';
chats.forEach(function(chat) {
html += `
<div class="accordion-item cursor-pointer show-topics ` + (activeId == chat.id ? 'active' : '') + `" data-user-id="` + chat.user_id + `" data-company-id="` + chat.company_id + `" data-id="` + chat.id + `">
<div class="accordion-content">
<h4>` + chat.user_first_name + ` ` + chat.user_last_name + `</h4>
<span>Client: ` + chat.company_name + `</span>
</div>
`;
if (chat.unread_count > 0) {
html += `
<div class="accordion-notif">
<span class="number-item">` + chat.unread_count + `</span>
</div>
`;
}
html += '</div>';
});
$('.chat-lists').html(html);
if (activeId) {
$('.show-topics[data-id="' + activeId + '"]').click();
}
}
});
}
function showMessages(url, title = '') {
$.ajax({
url: url,
type: "get",
data: {},
dataType: 'json',
success:function(response) {
var data = response.data;
var html = '';
data.forEach(function(item) {
html += `
<div class="chat-messages-date">
<span>` + (item.is_today ? 'Today' : item.date) + `</span>
</div>
`;
item.messages.forEach(function(message) {
html += `
<div class="chat-box ` + (message.is_own_message ? 'chat-sender' : '') + `">
<div class="chat-label">` + message.initials + `</div>
<div class="chat-content"><time>` + message.elapsed_time + `</time>` + message.message + `</div>
</div>
`;
});
});
if (title) {
$('.chat-inside-content .topic-title').html(title);
}
$('.chat-inside-content .chat-inside-body').html(html);
$('.chat-inside-content').show();
$('.chat-inside-content .chat-inside-body').scrollTop($('.chat-inside-content .chat-inside-body')[0].scrollHeight);
}
});
}
} );
</script>
@endsection

View File

@@ -0,0 +1,157 @@
@extends('theme::layouts.app')
@section('content')
<h2 class="dashboard-title">{{ __("Company") }} </h2>
<form class="search-fields flex" action="#" id="searchFrm">
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("Company Name") }}
</label>
<input type="text" class="w-100" id="search_company_name">
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2">
{{ __("Bookkeeping Subscription") }}
</label>
<select class="w-100" id="search_bookkeeping_subscription_status">
<option value="" selected>{{ __("All") }}</option>
<option value="active">{{ __("Active") }}</option>
<option value="expired">{{ __("Expired") }}</option>
</select>
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2">
{{ __("ComSec Subscription") }}
</label>
<select class="w-100" id="search_com_sec_subscription_All">
<option value="" selected>{{ __("All") }}</option>
<option value="active">{{ __("Active") }}</option>
<option value="expired">{{ __("Expired") }}</option>
</select>
</div>
<div class="search-field width-auto">
<button type="submit" class="btn primary-button btn-normal">{{ __("Search") }}</button>
</div>
</form>
<table id="companyListTable" class="" data-ajax-url="{{ route("cms.companies.table") }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>{{ __("Company Name") }}</td>
<td>{{ __("Bookkeeping Subscription") }}</td>
<td>{{ __("Bookkeeping Request(s)") }}</td>
<td>{{ __("ComSec Subscription") }}</td>
<td>{{ __("ComSec Request(s)") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>ABC Ltd.</td>
<td>
<span class="success item-list-note d-block">Active</span>
<span class="item-list-note d-block">Expiration: 2024/05/16</span>
</td>
<td>0</td>
<td>
<span class="failed item-list-note d-block">Expired</span>
<span class="item-list-note d-block">Expiration: 2023/04/16</span>
</td>
<td>3</td>
<td><a href="{{ route('cms.companies.show', 1) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', 1) }}" class="primary-text">Edit</a></td>
</tr> --}}
</tbody>
</table>
@endsection
@section('script')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/index.js') }}"></script>
@endsection

View File

@@ -0,0 +1,74 @@
<div class="tabs-content-item">
<div class="list-dashboard">
<ul>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/receipt-check-black.svg') }}">
<span>0</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">{{ __("Active Subscription") }}</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/receipt-cross-black.svg') }}">
<span>0</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">{{ __("Expired Subscription") }}</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/business-black.svg') }}">
<span>0</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">{{ __("Bookkeeping pending request") }}</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/secretary-black.svg') }}">
<span>0</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">{{ __("ComSec pending request") }}</h3>
</div>
</li>
</ul>
</div>
<h3>{{ __("Company registration information") }}</h3>
<form class="form-tabs">
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Company name(English)") }}</span>
<input type="text" placeholder="" disabled value="{{ $company->name_english }}">
</label></div>
<div class="label-field"><label>
<span>{{ __("Company name(Chinese)") }}</span>
<input type="text" placeholder="" disabled value="{{ $company->name_chinese }}">
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Registered office address(English)") }}</span>
<input type="text" placeholder="" disabled value="{{ $company->registered_office_address_english }}">
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Registered office address(Chinese)") }}</span>
<input type="text" placeholder="" disabled value="{{ $company->registered_office_address_chinese }}">
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("BR number") }}</span>
<input type="text" placeholder="" disabled value="{{ $company->br_number }}">
</label></div>
</div>
</form>
</div>

View File

@@ -0,0 +1,17 @@
<div class="tabs-content-item">
<div class="main-comsec-library">
<table id="allUserAccessLogsListTable" class="" data-ajax-url="{{ route("cms.companies.show.access-logs-table", $company->id) }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>{{ __("User email") }}</td>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,28 @@
<div class="tabs-content-item">
<div class="main-comsec-library">
<table id="subscription-table" class="">
<thead>
<tr>
<td>Date</td>
<td>Service</td>
<td>Subscription Period</td>
<td>Package</td>
<td>Status</td>
<td>Invoice</td>
</tr>
</thead>
<tbody>
@foreach($company_subscription as $sub)
<tr>
<td>{{ $sub->created_at->format('Y-m-d') }}</td>
<td>{{ $sub->subscription->service_type }}</td>
<td>{{ explode(' ', $sub->expiration_at)[0] }}</td>
<td>{{ $sub->subscription->period }}</td>
<td><span class="success item-list-note">{{ $sub->status == 1 ? 'Active' : 'Deactivate' }}</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,16 @@
<div class="dashboard-edit-option">
<form class="form-tabs" id="sendInviteUserFrm" action="{{ route('cms.companies.show.send-user-invite', $company->id) }}">
<h2 class="dashboard-edit-option__title">{{ __("Invitation") }}</h2>
<div class="inner-form-tabs">
<div class="flex">
<div class="label-field white-input-field"><label>
<span>{{ __("Enter invited user email") }}</span>
<input type="text" placeholder="" value="" name="email" required>
</label></div>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn primary-button btn-initial">{{ __("Save") }}</button>
</div>
</form>
</div>

View File

@@ -0,0 +1,501 @@
<style>
#userAccessLogsListTable_wrapper {
border: 2px solid #D6DEE9 !important;
box-shadow: none !important;
margin-bottom: 30px;
}
#userAccessLogsListTable_wrapper tbody tr {
background-color: #D6DEE9;
color: #364257;
}
</style>
<div class="tabs-content-item">
<div class="flex-document-library flex">
<div class="side-document-library side-nav-tabs">
<ul class="navigation-document-library">
<li class="active"><button type="button" class="js-side-nav" data-id="#description">{{ __("Description") }}</button></li>
<li><button type="button" class="js-side-nav" data-id="#user-list">{{ __("User List") }}</button></li>
<li><button type="button" class="js-side-nav" data-id="#access-level">{{ __("Access level") }}</button></li>
</ul>
</div>
<div class="main-document-library side-content-tabs">
<div id="description" class="js-content-tab">
<div class="list-dashboard">
<ul>
<li class="card-shadow card-padd-30 dashboard-item single-dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/user-2.svg') }}">
<h3 class="dashboard-item-title">{{ __("Total User") }}</h3>
<span>{{ $company->users->count() }}</span>
</div>
</li>
<li><a href="#" class="btn primary-button" data-bs-toggle="modal" data-bs-target="#newUserModal">{{ __("Add User") }}</a></li>
<li><a href="?p=user-invite" class="btn primary-button">{{ __("Invitation") }}</a></li>
<li></li>
</ul>
</div>
<div class="list-details">
<div class="card-shadow card-padd-15">
<h3 class="list-details-title">{{ __("Owner") }}</h3>
<div class="list-details-content">
<h4 class="text-center list-details-subtitle">{{ __("Access Level") }}</h4>
<h4 class="font-bold">{{ __("Company Account") }}</h4>
<ul>
<li>{{ __("Create Company Account") }}</li>
<li>{{ __("Manage/Revoke/Transfer Administrator Access") }}</li>
<li>{{ __("Manage Company Detail") }}</li>
<li>{{ __("Manage Subscription") }}</li>
<li>{{ __("Manage Group Access") }}</li>
<li>{{ __("Manage User & Assign Group (All)") }}</li>
<li>{{ __("Manage User & Assign Group (Except Administrator)") }}</li>
<li>{{ __("View Access Log") }}</li>
</ul>
<br>
<h4 class="font-bold">{{ __("Bookkeeping") }}</h4>
<ul>
<li>{{ __("View / List Bookkeeping Record") }}</li>
<li>{{ __("Upload Bookkeeping Record") }}</li>
</ul>
</div>
</div>
<div class="card-shadow card-padd-15">
<h3 class="list-details-title">{{ __("Administrator") }}</h3>
<div class="list-details-content">
<h4 class="text-center list-details-subtitle">{{ __("Access Level") }}</h4>
<h4 class="font-bold">{{ __("Company Account") }}</h4>
<ul>
<li>{{ __("Create Company Account") }}</li>
<li>{{ __("Manage Company Detail") }}</li>
<li>{{ __("Manage Subscription") }}</li>
<li>{{ __("Manage Group Access") }}</li>
<li>{{ __("Manage User & Assign Group (Except Administrator)") }}</li>
<li>{{ __("View Access Log") }}</li>
</ul>
<br>
<h4 class="font-bold">{{ __("Bookkeeping") }}</h4>
<ul>
<li>{{ __("View / List Bookkeeping Record") }}</li>
<li>{{ __("Upload Bookkeeping Record") }}</li>
</ul>
<br>
<h4 class="font-bold">{{ __("Company Secretary") }}</h4>
<ul>
<li>{{ __("View / List Comp Sec Document") }}</li>
<li>{{ __("Upload Comp Sec Document") }}</li>
</ul>
</div>
</div>
<div class="card-shadow card-padd-15">
<h3 class="list-details-title">{{ __("Bookkeeper") }}</h3>
<div class="list-details-content">
<h4 class="text-center list-details-subtitle">{{ __("Access Level") }}</h4>
<h4 class="font-bold">{{ __("Bookkeeping") }}</h4>
<ul>
<li>{{ __("View / List Bookkeeping Record") }}</li>
<li>{{ __("Upload Bookkeeping Record") }}</li>
</ul>
</div>
</div>
<div class="card-shadow card-padd-15">
<h3 class="list-details-title">{{ __("Company Secretary") }}</h3>
<div class="list-details-content">
<h4 class="text-center list-details-subtitle">{{ __("Access Level") }}</h4>
<h4 class="font-bold">{{ __("Company Secretary") }}</h4>
<ul>
<li>{{ __("View / List Comp Sec Document") }}</li>
<li>{{ __("Upload Comp Sec Document") }}</li>
</ul>
</div>
</div>
</div>
</div>
<div id="user-list" class="js-content-tab" style="display: none">
<table id="userListTable" class="" data-ajax-url="{{ route("cms.companies.show.users-table", $company->id) }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Phone Number</td>
<td>Company</td>
<td>Access Level</td>
<td>Status</td>
<td>Action</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div id="access-level" class="js-content-tab" style="display: none">
<table id="access-level-table" class="">
<thead>
<tr>
<td>Access right</td>
<td>Owner</td>
<td>Administrator</td>
<td>Bookkeeper</td>
<td>Company Secretart</td>
</tr>
</thead>
<tbody>
<tr class="highlights">
<td>Company Account</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Create Company Account</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Manage / Revoke / Transfer Administrator Access</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Manage Company Detail</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr class="highlights">
<td>Bookkeeping</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Create Company Account</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Manage / Revoke / Transfer Administrator Access</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Manage Company Detail</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
{{-- Modals --}}
{{-- Add User Modal --}}
<div class="modal fade custom-modal" id="newUserModal" tabindex="-1" aria-labelledby="newUserModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("User Detail") }}</p>
<form action="{{ route('cms.users.store') }}" class="theme-form" id="addUserFrm">
<input type="hidden" value="{{ $company->id }}" name="company_id">
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("First name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="first_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password" required>
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Last name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="last_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Confirm Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password_confirmation" required>
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Phone") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="phone" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Email") }}</label>
</div>
<div class="col">
<input type="email" class="form-control" value="" name="email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Access Level") }}</label>
</div>
<div class="col">
<select class="w-100" name="role_id" required>
<option value="" disabled selected>{{ __("Select an option") }}</option>
@foreach ($roles as $role)
<option value="{{ $role->id }}">{{ $role->display_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Edit User Modal --}}
<div class="modal fade custom-modal" id="editUserModal" tabindex="-1" aria-labelledby="editUserModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("User Detail") }}</p>
<form action="#" class="theme-form" id="editUserFrm">
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("First name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="first_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Current Password") }}</label>
</div>
<div class="col">
<input type="password" class="form-control" value="" name="current_password">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Last name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="last_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Phone") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="phone" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Confirm Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password_confirmation">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Email") }}</label>
</div>
<div class="col">
<input type="email" class="form-control" value="" name="email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Access Level") }}</label>
</div>
<div class="col">
<select class="w-100" name="role_id" required>
<option value="" disabled selected>{{ __("Select an option") }}</option>
@foreach ($roles as $role)
<option value="{{ $role->id }}">{{ $role->display_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- User Action Logs Modal --}}
<div class="modal fade custom-modal" id="userActionLogsModal" tabindex="-1" aria-labelledby="userActionLogsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title mb-4">{{ __("User Log") }}</p>
<table id="userAccessLogsListTable" class="" data-ajax-url="{{ route("cms.users.accessLogsTable") }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="d-flex align-items-center justify-content-center">
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
</div>
<script>
var languageTexts = {
"Yes": '{{ __("Yes") }}',
"Cancel": '{{ __("Cancel") }}',
"Cancel": '{{ __("Cancel") }}',
"Are you sure?": '{{ __("Are you sure?") }}',
"You would not be able to revert this!": '{{ __("You would not be able to revert this!") }}',
}
</script>

View File

@@ -0,0 +1,16 @@
<div class="dashboard-edit-option">
<form class="form-tabs" id="updateXeroApiFrm" action="{{ route('cms.companies.show.update-xero-api', $company->id) }}">
<h2 class="dashboard-edit-option__title">{{ __("Xero API Key") }}</h2>
<div class="inner-form-tabs">
<div class="flex">
<div class="label-field white-input-field"><label>
<span>{{ __("Enter your Xero API Key") }}</span>
<input type="text" name="xero_api_key" placeholder="" value="{{ $company->xero_api_key }}" required>
</label></div>
</div>
</div>
<div class="text-center">
<button type="submit" class="btn primary-button btn-initial">{{ __("Save") }}</button>
</div>
</form>
</div>

View File

@@ -0,0 +1,768 @@
@extends('theme::layouts.app')
@section('content')
@php
if(!isset($_GET['p'])){
$page = 'detail';
}else{
$page = $_GET['p'];
}
@endphp
<div class="dashboard-title-flex">
<h2 class="dashboard-title">{{ $company->name }}</h2>
<div class="dashboard-button-title">
@if($page != 'xero-api' && $page != 'user-invite')
<a href="?p=xero-api" class="btn primary-button">{{ __("Xero API") }}</a>
@endif
<a href="javascript:history.back();" class="btn btn-error">{{ __("Back") }}</a>
</div>
</div>
<div class="tabs-area">
@if($page != 'xero-api' && $page != 'user-invite')
<div class="tabs-navigation">
<ul>
<li <?= ($page == 'detail' ? 'class="active"' : ''); ?>><a href="?p=detail">{{ __("Company Detail") }}</a></li>
<li <?= ($page == 'document' ? 'class="active"' : ''); ?>><a href="?p=document">{{ __("Document Library") }}</a></li>
@if (auth()->user()->userRole->hasAccess('manage-job-queue'))
@if (auth()->user()->userRole->hasAccess('manage-bookkeeping'))
<li <?= ($page == 'bookkeeping' ? 'class="active"' : ''); ?>><a href="?p=bookkeeping">{{ __("Bookkeeping Queue & Log") }} <span class="tab-number">3</span></a></li>
@endif
@if (auth()->user()->userRole->hasAccess('manage-comp-sec'))
<li <?= ($page == 'comsec' ? 'class="active"' : ''); ?>><a href="?p=comsec">{{ __("ComSec Queue & Log") }} <span class="tab-number">3</span></a></li>
@endif
@endif
@if (auth()->user()->userRole->hasAccess('manage-subscription'))
<li <?= ($page == 'subscription' ? 'class="active"' : ''); ?>><a href="?p=subscription">{{ __("Subscription & Billing") }}</a></li>
@endif
<li <?= ($page == 'user' ? 'class="active"' : ''); ?>><a href="?p=user">{{ __("User Management") }}</a></li>
<li <?= ($page == 'log' ? 'class="active"' : ''); ?>><a href="?p=log">{{ __("Access Log") }}</a></li>
</ul>
</div>
@endif
<div class="tabs-content">
@if($page == 'xero-api')
@include('theme::cms.companies.show-xero-api')
@endif
@if($page == 'detail')
@include('theme::cms.companies.show-detail')
@endif
@if($page == 'document')
<div class="tabs-content-item">
<div class="flex-document-library flex">
<div class="side-document-library">
<ul class="navigation-document-library">
<li class="active"><button type="button">Recent</button></li>
<li><button type="button">Bookkeeping</button></li>
<li><button type="button">ComSec</button></li>
</ul>
</div>
<div class="main-document-library">
<div class="search-bar flex">
<span class="search-bar__label">Document/Record search</span>
<div class="search-bar__field">
<button type="button"><img src="{{ asset('themes/tailwind/images/setting-4.svg') }}"></button>
<input type="text">
</div>
<button type="submit" class="btn primary-button search-bar__button">Search</button>
</div>
<div class="flex gap-10 marginx-15">
<button type="button" class="btn primary-button btn-normal">Upload Report</button>
<button type="button" class="btn primary-button btn-normal">Download</button>
</div>
<table id="document-table" class="">
<thead>
<tr>
<td><input type="checkbox"></td>
<td>Document Name</td>
<td>Document Category</td>
<td>Upload User</td>
<td>Size</td>
<td>Date Uploaded</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/pdf.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/pdf.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/pdf.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">ABC Ltd_202301Pro...</span>
</div>
</td>
<td>Report</td>
<td>Admin</td>
<td><span class="primary-text">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="{{ route('cms.companies.show', $company->id) }}" class="primary-text">Download</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
@endif
@if($page == 'bookkeeping')
<div class="tabs-content-item">
<div class="main-bookkeeping-library">
<div class="flex gap-10 marginx-15">
<button type="button" class="btn primary-button btn-normal">Upload Report</button>
<button type="button" class="btn primary-button btn-normal">Download</button>
</div>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}"> In Queue List <span class="tab-number">3</span></a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}"> Completed List <span class="tab-number">3</span></a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd" id="in-queue">
<div class="sidebyside paddingy-10 paddingx-10">
<span class="blue-text">Number of file in process: 5</span>
<span class="blue-text">Total item(s) in Queue: 7</span>
</div>
<table id="document-table__enqueue" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
<td>Xero Status</td>
<td>Xero Amount</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><span class="grey-text">processing...</span></td>
<td><span class="grey-text">processing...</span></td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><span class="grey-text">processing...</span></td>
<td><span class="grey-text">processing...</span></td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><span class="grey-text">processing...</span></td>
<td><span class="grey-text">processing...</span></td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><span class="grey-text">processing...</span></td>
<td><span class="grey-text">processing...</span></td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><span class="grey-text">processing...</span></td>
<td><span class="grey-text">processing...</span></td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
</tbody>
</table>
</div>
<div class="tabs-content-item white-bg no-padd" id="completed" style="display: none;">
<div class="sidebyside paddingx-10 paddingy-10">
<span class="blue-text">Number of file in process: 5</span>
<span class="blue-text">Total item(s) in Queue: 7</span>
</div>
<table id="document-table__completed" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
<td>Xero Status</td>
<td>Xero Amount</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Bank statement</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Ltd_202301Bank...</td>
<td>202301Bank statement</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Uploaded</option>
<option>Uploaded</option>
<option>Uploaded</option>
</select>
</td>
<td><img src="{{ asset('themes/tailwind/images/check-2.svg') }}" class="max-25"></td>
<td><span class="grey-text">processing...</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
@endif
@if($page == 'comsec')
<div class="tabs-content-item">
<div class="main-comsec-library">
<div class="flex gap-10 marginx-15">
<button type="button" class="btn primary-button btn-normal">Upload Report</button>
<button type="button" class="btn primary-button btn-normal">Download</button>
</div>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}"> In Queue List <span class="tab-number">3</span></a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}"> Completed List <span class="tab-number">3</span></a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd" id="in-queue">
<div class="sidebyside paddingy-10 paddingx-10">
<span class="blue-text">Number of file in process: 5</span>
<span class="blue-text">Total item(s) in Queue: 7</span>
</div>
<table id="comsec-table__enqueue" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Service</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td><button type="button"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button></td>
</tr>
</tbody>
</table>
</div>
<div class="tabs-content-item white-bg no-padd" id="completed" style="display: none;">
<div class="sidebyside paddingx-10 paddingy-10">
<span class="blue-text">Number of file in process: 5</span>
<span class="blue-text">Total item(s) in Queue: 7</span>
</div>
<table id="comsec-table__completed" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Service</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">202301Bank state...</span>
</div>
</td>
<td>Incorporation of Hong Kong...</td>
<td>CI</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>DCE Consultant Ltd.</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Filed</option>
<option>Filed</option>
<option>Filed</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
@endif
@if($page == 'subscription')
@include('theme::cms.companies.show-subscription')
@endif
@if($page == 'user')
@include('theme::cms.companies.show-user')
@endif
@if($page == 'log')
@include('theme::cms.companies.show-log')
@endif
@if($page == 'user-invite')
@include('theme::cms.companies.show-user-invite')
@endif
</div>
</div>
{{-- Modals --}}
{{-- Success Modal --}}
<div class="modal fade validation-modal style2" id="validationModal" tabindex="-1" aria-labelledby="validationModal1Label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="text-center error-message">{{ __("All changes have been saved!") }}</p>
<button type="button" class="btn br-0" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/show.js') }}"></script>
@if($page == 'user')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/show-user.js') }}"></script>
@endif
@if($page == 'log')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/show-log.js') }}"></script>
@endif
@if($page == 'xero-api')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/show-xero-api.js') }}"></script>
@endif
@if($page == 'user-invite')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/companies/show-user-invite.js') }}"></script>
@endif
@endsection

View File

@@ -0,0 +1,526 @@
@extends('theme::layouts.app')
@section('content')
@php
if(!isset($_GET['p'])){
$page = 'detail';
}else{
$page = $_GET['p'];
}
@endphp
@if($page == 'document')
<div class="dashboard-title-flex">
<h2 class="dashboard-title">Document Library</h2>
<div class="dashboard-button-title">
<a href="{{ route('cms.company-secretary') }}" class="btn btn-error">Back</a>
</div>
</div>
<div class="search-bar flex">
<span class="search-bar__label">Document/Record search</span>
<div class="search-bar__field">
<button type="button"><img src="{{ asset('themes/tailwind/images/setting-4.svg') }}"></button>
<input type="text">
</div>
<button type="submit" class="btn primary-button search-bar__button">Search</button>
</div>
<div class="paddingx-20">
<table id="document-table__enqueue" class="">
<thead>
<tr>
<td><input type="checkbox"></td>
<td>Document Name</td>
<td>Company</td>
<td>Document Category</td>
<td>Upload User</td>
<td>Document Size</td>
<td>Date Uploaded</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>CI</td>
<td>Mary Chan</td>
<td><span class="">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>CI</td>
<td>Mary Chan</td>
<td><span class="">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>CI</td>
<td>Mary Chan</td>
<td><span class="">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Download</a></td>
</tr>
<tr>
<td><input type="checkbox"></td>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>CI</td>
<td>Mary Chan</td>
<td><span class="">234KB</span></td>
<td>20230515-14:43</td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Properties</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Download</a></td>
</tr>
</tbody>
</table>
</div>
@elseif($page == 'category')
<div class="dashboard-title-flex">
<h2 class="dashboard-title">Document Library</h2>
<div class="dashboard-button-title">
<a href="{{ route('cms.company-secretary') }}" class="btn primary-button">New Category</a>
<a href="{{ route('cms.company-secretary') }}" class="btn btn-error">Back</a>
</div>
</div>
<div class="">
<table id="company-category" class="">
<thead>
<tr>
<td>Category Name</td>
<td>Status</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td>CI</td>
<td><span class="">Active</span></td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Edit</a> <span class="long-pipe">|</span> <a href="#" class="error-text">Archive</a></td>
</tr>
<tr>
<td>CI</td>
<td><span class="">Active</span></td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Edit</a> <span class="long-pipe">|</span> <a href="#" class="error-text">Archive</a></td>
</tr>
<tr>
<td>CI</td>
<td><span class="">Active</span></td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Edit</a> <span class="long-pipe">|</span> <a href="#" class="error-text">Archive</a></td>
</tr>
<tr>
<td>CI</td>
<td><span class="">Active</span></td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Edit</a> <span class="long-pipe">|</span> <a href="#" class="error-text">Archive</a></td>
</tr>
<tr>
<td>CI</td>
<td><span class="">Active</span></td>
<td><a href="#" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="#" class="primary-text">Edit</a> <span class="long-pipe">|</span> <a href="#" class="error-text">Archive</a></td>
</tr>
</tbody>
</table>
</div>
@else
<div class="dashboard-title-flex nowrap">
<h2 class="dashboard-title">Company Secretary service</h2>
<div class="dashboard-button-title">
<a href="?p=document" class="btn primary-button">Document Library</a>
<a href="?p=log" class="btn primary-button">ComSec Action Log</a>
<a href="?p=category" class="btn primary-button">Category List</a>
</div>
</div>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}"> In Queue List <span class="tab-number">3</span></a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}"> Completed List <span class="tab-number">3</span></a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd" id="in-queue">
<div class="sidebyside paddingy-10 paddingx-10">
<span class="blue-text">Number of file in process: 5</span>
<span class="blue-text">Total item(s) in Queue: 7</span>
</div>
<table id="document-table__enqueue" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Company</td>
<td>Service</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
<td>Action</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td>
<div class="dropdown non-custom">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Cancel Request</a>
<a class="dropdown-item" href="#">Message on file</a>
<a class="dropdown-item" href="#">Stop processing</a>
</div>
</div>
</td>
</tr>
<tr class="failed">
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
<button type="button" class="failed item-list-note flex btn-link reupload-button"><img class="max-25" src="{{ asset('themes/tailwind/images/flag-2.svg') }}"> Reupload</button>
</td>
<td>
<div class="dropdown non-custom">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Cancel Request</a>
<a class="dropdown-item" href="#">Message on file</a>
<a class="dropdown-item" href="#">Stop processing</a>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td>
<div class="dropdown non-custom">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Cancel Request</a>
<a class="dropdown-item" href="#">Message on file</a>
<a class="dropdown-item" href="#">Stop processing</a>
</div>
</div>
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td><span class="grey-text">processing...</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
</td>
<td>
<div class="dropdown non-custom">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false"><img class="max-25" src="{{ asset('themes/tailwind/images/more.svg') }}"></button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Cancel Request</a>
<a class="dropdown-item" href="#">Message on file</a>
<a class="dropdown-item" href="#">Stop processing</a>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="tabs-content-item white-bg no-padd" id="completed" style="display: none;">
<table id="document-table__completed" class="">
<thead>
<tr>
<td>Original Name</td>
<td>Company</td>
<td>Service</td>
<td>Category</td>
<td>Vendor</td>
<td>Batch Name</td>
<td>Remark</td>
<td>Upload date&time</td>
<td>Status</td>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td><span class="grey-text">Failed</span></td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
<button href="" class="failed item-list-note flex btn-link reupload-button">
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td>DCE Consultant Ltd</td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
<button href="" class="failed item-list-note flex btn-link reupload-button">
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td>DCE Consultant Ltd</td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
<button href="" class="failed item-list-note flex btn-link reupload-button">
</td>
</tr>
<tr>
<td>
<div class="flex justify-start">
<img class="max-25" src="{{ asset('themes/tailwind/images/jpg.svg') }}">
<span class="fix-text">DCE Ltd.CI</span>
</div>
</td>
<td>DCE Consultant Ltd.</td>
<td>Incorporation of Hong...</td>
<td>CI</td>
<td>DCE Consultant Ltd</td>
<td>ABC Copy of DCE Ltd.CI</td>
<td>DCE Ltd.CI</td>
<td>20230515-14:43</td>
<td>
<select>
<option>Submitted</option>
<option>Submitted</option>
<option>Submitted</option>
</select>
<button href="" class="failed item-list-note flex btn-link reupload-button">
</td>
</tr>
</tbody>
</table>
</div>
</div>
@endif
@endsection
@section('script')
<script>
$(document).ready( function () {
$('#document-table__enqueue, #document-table__completed, #document-table, #comsec-table__enqueue, #comsec-table__completed').DataTable({
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
// Add more text customizations if needed
},
columnDefs: [
{ targets: [0,1,2,3,4,5,6], orderable: false } // Change the index [1] if needed
]
});
$("#subscription-table").DataTable({
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
// Add more text customizations if needed
},
columnDefs: [
{ targets: [0,1,2,3,4,5], orderable: false } // Change the index [1] if needed
]
});
$("#access-level-table, #log-table").DataTable({
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
// Add more text customizations if needed
},
columnDefs: [
{ targets: [0,1,2,3,4], orderable: false } // Change the index [1] if needed
]
});
$("#company-category").DataTable({
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
// Add more text customizations if needed
},
columnDefs: [
{ targets: [0,1,2], orderable: false } // Change the index [1] if needed
]
});
$(".js-side-nav").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.side-nav-tabs').next().find('.js-content-tab').hide();
jQuery(id).show();
jQuery(this).closest('.side-nav-tabs').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
} );
</script>
@endsection

View File

@@ -0,0 +1,590 @@
@extends('theme::layouts.app')
@section('style')
<style>
#userAccessLogsListTable_wrapper {
border: 2px solid #D6DEE9 !important;
box-shadow: none !important;
margin-bottom: 30px;
}
#userAccessLogsListTable_wrapper tbody tr {
background-color: #D6DEE9;
color: #364257;
}
</style>
@endsection
@section('content')
<h2 class="dashboard-title">{{ __("CRM") }}</h2>
<form class="search-fields flex" action="#" id="searchFrm">
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("Company") }}
</label>
<input type="text" class="w-100" id="search_company_name">
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("First name") }}
</label>
<input type="text" class="w-100" id="search_first_name">
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("Last name") }}
</label>
<input type="text" class="w-100" id="search_last_name">
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("Phone number") }}
</label>
<input type="text" class="w-100" id="search_phone">
</div>
<div class="search-field width-auto">
<button type="submit" class="btn primary-button btn-normal">{{ __("Search") }}</button>
</div>
</form>
<table id="crmTable" class="">
<thead>
<tr>
<td>{{ __("Company") }}</td>
<td>{{ __("First name") }}</td>
<td>{{ __("Last name") }}</td>
<td>{{ __("Phone number") }}</td>
<td>{{ __("Access level") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
{{-- Modals --}}
{{-- Edit User Modal --}}
<div class="modal fade custom-modal" id="editUserModal" tabindex="-1" aria-labelledby="editUserModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("User Detail") }}</p>
<form action="#" class="theme-form" id="editUserFrm">
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("First name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="first_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Current Password") }}</label>
</div>
<div class="col">
<input type="password" class="form-control" value="" name="current_password">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Last name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="last_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Phone") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="phone" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Confirm Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password_confirmation">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Email") }}</label>
</div>
<div class="col">
<input type="email" class="form-control" value="" name="email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Access Level") }}</label>
</div>
<div class="col">
<select class="w-100" name="role_id" required>
<option value="" disabled selected>{{ __("Select an option") }}</option>
@foreach ($roles as $role)
<option value="{{ $role->id }}">{{ $role->display_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- User Action Logs Modal --}}
<div class="modal fade custom-modal" id="userActionLogsModal" tabindex="-1" aria-labelledby="userActionLogsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title mb-4">{{ __("User Log") }}</p>
<table id="userAccessLogsListTable" class="">
<thead>
<tr>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="d-flex align-items-center justify-content-center">
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
</div>
{{-- Saved Success Modal --}}
<div class="modal fade validation-modal style2" id="validationModal" tabindex="-1" aria-labelledby="validationModal1Label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="text-center error-message">{{ __("All changes have been saved!") }}</p>
<button type="button" class="btn br-0" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var userListTableColumns = [
('{{ strtolower(app()->getLocale()) }}' == 'zh_hk' ? {data: 'name_chinese', name: 'companies.name_chinese'} : {data: 'name_english', name: 'companies.name_english'}),
{data: 'first_name', name: 'users.first_name'},
{data: 'last_name', name: 'users.last_name'},
{data: 'phone', name: 'users.phone'},
{data: 'display_name', name: 'roles.display_name'},
{data: 'status', name: 'users.status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
];
var userListTable = $("#crmTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.crm.table") }}',
type: 'post',
"data": function ( d ) {
return $.extend( {}, d, {
"company_name": $('#searchFrm #search_company_name').val(),
"first_name": $('#searchFrm #search_first_name').val(),
"last_name": $('#searchFrm #search_last_name').val(),
"phone": $('#searchFrm #search_phone').val(),
} );
},
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: userListTableColumns,
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$('#searchFrm').submit(function(e) {
e.preventDefault();
userListTable.ajax.reload();
});
$('.password-hide-show').click(function() {
var type = $(this).parent().find('input').attr('type');
if (type == 'password') {
$(this).parent().find('input').attr('type', 'text');
}
else {
$(this).parent().find('input').attr('type', 'password');
}
});
$(document).on('click', '.suspend-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: `{{ __("You would not be able to revert this!") }}`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.activate-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: `{{ __("You would not be able to revert this!") }}`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.remove-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: `{{ __("You would not be able to revert this!") }}`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.edit-user', function(e) {
var actionShow = $(this).attr('data-action-show');
var actionUpdate = $(this).attr('data-action-update');
if (actionShow && actionUpdate) {
$.ajax({
url: actionShow,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#editUserFrm').attr('action', actionUpdate);
$('#editUserFrm input[name="first_name"]').val(data.user.first_name);
$('#editUserFrm input[name="last_name"]').val(data.user.last_name);
$('#editUserFrm input[name="phone"]').val(data.user.phone);
$('#editUserFrm input[name="email"]').val(data.user.email);
$('#editUserFrm select[name="role_id"]').val(data.user.role_id);
$('#editUserFrm input[name="status"]').val(data.user.status);
$('#editUserModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
$('#editUserFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
$('#editUserModal').modal('hide');
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
$('#editUserFrm').trigger("reset");
userListTable.ajax.reload();
}
else {
$('#validationModal .error-message').html(data.message);
$('#validationModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '.view-user-log', function(e) {
var action = $(this).attr('data-action');
if (action) {
initializeUserAccessLogsListTable(action);
$('#userActionLogsModal').modal('show');
}
});
var userAccessLogsListTable = null;
function initializeUserAccessLogsListTable(url = '{{ route("cms.users.accessLogsTable") }}') {
if (userAccessLogsListTable) {
userAccessLogsListTable.destroy();
}
userAccessLogsListTable = $("#userAccessLogsListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: url,
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'date', name: 'user_access_logs.created_at'},
{data: 'time', name: 'user_access_logs.created_at'},
{data: 'event', name: 'user_access_logs.event'},
{data: 'description', name: 'user_access_logs.description'},
{data: 'status', name: 'user_access_logs.status'},
],
order: [[1, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
}
} );
</script>
@endsection

View File

@@ -0,0 +1,211 @@
@extends('theme::layouts.app')
@section('content')
<div class="dashboard-title-flex space-between">
<h2 class="dashboard-title">{{ __("Enquiry box") }}</h2>
</div>
<div class="tabs-navigation blue-tabs tab-paddx-20">
<ul>
<li class="active"><a href="#" class="js-tab-navigate paddingx-20" data-id="#comsec-enquiry"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/user-2.svg') }}"> {{ __("Company Secretary Enquiry") }} </a></li>
<li><a href="#" class="js-tab-navigate " data-id="#general-enquiry"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/access-log.svg') }}"> {{ __("General Enquiry") }} </a></li>
</ul>
</div>
<div class="tabs-content enquiry-box">
<div class="tabs-content-item" id="comsec-enquiry">
@if ($companySecretaryEnquiries->count())
<div class="flex">
<div class="accordion-box">
<div class="accordion-title">
<span class="text-uppercase">{{ __("Recent") }}</span>
<button class="accordion-button">
{{-- <img src="http://127.0.0.1:8000/themes/tailwind/images/arrow-down.svg"> --}}
</button>
</div>
<div class="accordion-items list-items">
@foreach ($companySecretaryEnquiries as $enquiry)
<div class="topic-list" data-show-url="{{ route('cms.enquiries.show', $enquiry->id) }}" data-update-url="{{ route('cms.enquiries.update-reply', $enquiry->id) }}">
<div class="topic-head">
<h6>{{ __("Client") }}: {{ isset($enquiry->user->company->name) ? $enquiry->user->company->name : '-' }}</h6>
<time>{{ date('d/m/Y', strtotime($enquiry->created_at)) }}</time>
</div>
<div class="topic-head">
<h4>{{ $enquiry->title }}</h4>
</div>
<div class="topic-body">
<p>{!! $enquiry->message !!}</p>
{{-- <span class="number-item">4</span> --}}
</div>
</div>
@endforeach
</div>
</div>
<div class="enquiry-inside" style="display: none;">
<form class="update-reply-frm" action="#" method="POST">
<div class="flex other-service-request">
<h3 class="enquiry-title"></h3>
<h5>{{ __("Client") }}: <span class="enquiry-company-name"></span></h5>
<h5>{{ __("Submitted date") }} <span class="enquiry-submitted-date"></span></h5>
</div>
<div class="other-service-content enquiry-message"></div>
<div class="other-service-input">
<textarea class="enquiry-reply" name="reply" required></textarea>
<button type="submit" class="btn primary-button btn-normal">{{ __("Reply") }}</button>
</div>
</form>
</div>
</div>
@else
<div class="empty-state-wrapper">
<img class="img-fluid mx-auto" src="{{ asset('themes/tailwind/images/empty-state-white-img.png') }}">
<span class="empty-text d-block text-center w-100">{{ __("It's empty here...") }}</span>
</div>
@endif
</div>
<div class="tabs-content-item" id="general-enquiry" style="display: none;">
@if ($generalEnquiries->count())
<div class="flex">
<div class="accordion-box">
<div class="accordion-title">
<span>{{ __("RECENT") }}</span>
<button class="accordion-button">
{{-- <img src="http://127.0.0.1:8000/themes/tailwind/images/arrow-down.svg"> --}}
</button>
</div>
<div class="accordion-items list-items">
@foreach ($generalEnquiries as $enquiry)
<div class="topic-list" data-show-url="{{ route('cms.enquiries.show', $enquiry->id) }}" data-update-url="{{ route('cms.enquiries.update-reply', $enquiry->id) }}">
<div class="topic-head">
<h6>{{ __("Client") }}: {{ isset($enquiry->user->company->name) ? $enquiry->user->company->name : '-' }}</h6>
<time>{{ date('d/m/Y', strtotime($enquiry->created_at)) }}</time>
</div>
<div class="topic-head">
<h4>{{ $enquiry->title }}</h4>
</div>
<div class="topic-body">
<p>{!! $enquiry->message !!}</p>
{{-- <span class="number-item">4</span> --}}
</div>
</div>
@endforeach
</div>
</div>
<div class="enquiry-inside" style="display: none;">
<form class="update-reply-frm" action="#" method="POST">
<div class="flex other-service-request">
<h3 class="enquiry-title"></h3>
<h5>{{ __("Client") }}: <span class="enquiry-company-name"></span></h5>
<h5>{{ __("Submitted date") }} <span class="enquiry-submitted-date"></span></h5>
</div>
<div class="other-service-content enquiry-message"></div>
<div class="other-service-input">
<textarea class="enquiry-reply" name="reply" required></textarea>
<button type="submit" class="btn primary-button btn-normal">{{ __("Reply") }}</button>
</div>
</form>
</div>
</div>
@else
<div class="empty-state-wrapper">
<img class="img-fluid mx-auto" src="{{ asset('themes/tailwind/images/empty-state-white-img.png') }}">
<span class="empty-text d-block text-center w-100">{{ __("It's empty here...") }}</span>
</div>
@endif
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(".js-side-nav").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.side-nav-tabs').next().find('.js-content-tab').hide();
jQuery(id).show();
jQuery(this).closest('.side-nav-tabs').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(document).on('click', '.topic-list', function(e) {
var showUrl = $(this).attr('data-show-url');
var updateUrl = $(this).attr('data-update-url');
var mainWrapper = $(this).parents('.tabs-content-item').first();
if (showUrl && updateUrl) {
mainWrapper.find('.topic-list').removeClass('active');
$(this).addClass('active');
$.ajax({
url: showUrl,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
mainWrapper.find('.enquiry-inside').show();
mainWrapper.find('.enquiry-inside form').attr('action', updateUrl);
mainWrapper.find('.enquiry-inside .enquiry-title').html(data.enquiry.name);
mainWrapper.find('.enquiry-inside .enquiry-company-name').html(data.enquiry.company_name);
mainWrapper.find('.enquiry-inside .enquiry-submitted-date').html(data.enquiry.submitted_date);
mainWrapper.find('.enquiry-inside .enquiry-message').html(data.enquiry.message);
mainWrapper.find('.enquiry-inside .enquiry-reply').val(data.enquiry.reply);
}
}
});
}
});
$('#comsec-enquiry .topic-list:first').click();
$('#general-enquiry .topic-list:first').click();
$('.update-reply-frm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
}
});
}
});
} );
</script>
@endsection

View File

@@ -0,0 +1,92 @@
@extends('theme::layouts.app')
@section('content')
@if (auth()->user()->userRole->hasAccess('view-company-dashboard'))
<div class="list-dashboard">
<ul>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/receipt-check-black.svg') }}">
<span>6</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">Active<br>Subscription</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/receipt-cross-black.svg') }}">
<span>3</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">Expired<br>Subscription</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/business-black.svg') }}">
<span>10</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">Bookkeeping<br>pending request</h3>
</div>
</li>
<li class="card-shadow card-padd-30 dashboard-item">
<div class="dashboard-item-head">
<img src="{{ asset('themes/tailwind/images/secretary-black.svg') }}">
<span>3</span>
</div>
<div class="dashboard-item-footer">
<h3 class="dashboard-item-title">ComSec<br>pending request</h3>
</div>
</li>
</ul>
</div>
<div class="dasboard-list-details">
<div class="dasboard-details-title">
<img src="{{ asset('themes/tailwind/images/business-accounting.svg') }}">
<h2>Bookkeeping Queue</h2>
</div>
<div class="dasboard-details-content">
<div class="dashboard-detail-item">
<img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}">
<a href="" class="dashboard-detail-button" class="with-arrow">In Queue list <span>3</span></a>
</div>
<div class="dashboard-detail-item">
<img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}">
<a href="" class="dashboard-detail-button" class="with-arrow">Completed List <span>8</span></a>
</div>
</div>
</div>
<div class="dasboard-list-details">
<div class="dasboard-details-title">
<img src="{{ asset('themes/tailwind/images/secretary.svg') }}">
<h2>ComSec Queue</h2>
</div>
<div class="dasboard-details-content">
<div class="dashboard-detail-item">
<img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-timer.svg') }}">
<a href="" class="dashboard-detail-button" class="with-arrow">In Queue list <span>10</span></a>
</div>
<div class="dashboard-detail-item">
<img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/tick-circle.svg') }}">
<a href="" class="dashboard-detail-button" class="with-arrow">Completed List <span>4</span></a>
</div>
</div>
</div>
<div class="dasboard-list-details dasboard-list-details-direct">
<div class="dasboard-details-content">
<div class="dashboard-detail-item">
<img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/receipt.svg') }}">
<a href="" class="dashboard-detail-button" class="with-arrow">Expired Subscription List <span>10</span></a>
</div>
</div>
</div>
@endif
@endsection

View File

@@ -0,0 +1,36 @@
@extends('theme::layouts.app')
@section('content')
<form method="POST" action="{{ route('cms.privacy-policy.update') }}">
@csrf
<div class="dashboard-title-flex space-between">
<h2 class="dashboard-title">{{ __("Privacy Policy(English)") }}</h2>
</div>
<div class="terms-privacy-content">
<textarea class="tinymce" name="privacy_policy_english">{!! $siteSetting ? $siteSetting->privacy_policy_english : '' !!}</textarea>
</div>
<div class="dashboard-title-flex space-between mt-30">
<h2 class="dashboard-title">{{ __("Privacy Policy(Chinese)") }}</h2>
</div>
<div class="terms-privacy-content">
<textarea class="tinymce" name="privacy_policy_chinese">{!! $siteSetting ? $siteSetting->privacy_policy_chinese : '' !!}</textarea>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
<button type="reset" class="btn btn-error">{{ __("Reset") }}</button>
</div>
</div>
</form>
@endsection
@section('script')
@endsection

View File

@@ -0,0 +1,341 @@
@extends('theme::layouts.app')
@section('content')
<h2 class="dashboard-title">{{ __("Security Group") }}</h2>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#group-list"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/security-2.svg') }}"> {{ __("Group List") }} </a></li>
@if (auth()->user()->userRole->hasAccess('manage-security-group'))
<li><a href="#" class="js-tab-navigate" data-id="#group-access-right"><img class="dashboard-detail-image" src="{{ asset('themes/tailwind/images/security-safe.svg') }}"> {{ __("Group Access Right") }} </a></li>
@endif
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd" id="group-list">
<table id="groupListTable" class="">
<thead>
<tr>
<td>{{ __("Access level") }}</td>
<td>{{ __("Role") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
@if (auth()->user()->userRole->hasAccess('manage-security-group'))
<div class="tabs-content-item white-bg no-padd no-box-shadow cms-permissions-wrapper" id="group-access-right" style="display: none;">
<form id="permissionFrm" action="{{ route('cms.securities.updateRolePermission') }}" method="post">
<div class="main-header-row">
<div class="main-header-column">{{ __("Access right") }}</div>
@foreach ($roles as $role)
<div class="main-header-column">{{ $role->access_level }}</div>
@endforeach
</div>
<div class="main-header-row mb-0">
<div class="main-header-column"></div>
@foreach ($roles as $role)
<div class="main-header-column">{{ $role->display_name }}</div>
@endforeach
</div>
@foreach ($permissionGroups as $permissionGroup)
<div class="group-row">
<div class="group-column">{{ $permissionGroup->name }}</div>
</div>
@foreach ($permissionGroup->permissions as $permission)
<div class="permission-row">
<div class="permission-column">{{ $permission->display_name }}</div>
@foreach ($roles as $role)
<div class="permission-column">
<div class="custom-radio-checkbox">
<input type="checkbox" name="role_permissions[]" id="permission-{{ $role->id }}-{{ $permission->id }}" value="{{ $role->id }}-{{ $permission->id }}" {{ $role->rolePermissions->where('permission_id', $permission->id)->first() ? 'checked' : '' }}>
<label for="permission-{{ $role->id }}-{{ $permission->id }}">
</label>
</div>
</div>
@endforeach
</div>
@endforeach
@endforeach
{{-- <table id="security-group-table__list" class="">
<thead>
<tr>
<td>Access right</td>
<td>Administrator</td>
<td>Manager</td>
<td>User</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>IT Personnel</td>
<td>Numstation Manager</td>
<td>Numstation Staff</td>
</tr>
</thead>
<tbody>
<tr>
<td>CMS</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Manage Company Settings</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>View Company Dashboard</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Manage Client Company Subscription</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
<tr>
<td>Client Company</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Manage Company Settings</td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
<td><input type="checkbox"></td>
</tr>
</tbody>
</table> --}}
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
<button type="reset" class="btn btn-error">{{ __("Reset") }}</button>
</div>
</div>
</form>
</div>
@endif
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var groupListTable = $("#groupListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.securities.groupListTable") }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'access_level', name: 'access_level'},
{data: 'display_name', name: 'display_name'},
{data: 'status', name: 'status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(document).on('click', '.suspend-role', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
groupListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.activate-role', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
groupListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$('#permissionFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '.view-edit-action', function(e) {
var type = $(this).attr('data-type');
if (type == 'view') {
$('#permissionFrm input[name="role_permissions[]"]').attr('disabled', 'disabled');
}
else {
$('#permissionFrm input[name="role_permissions[]"]').removeAttr('disabled');
}
$('.js-tab-navigate[data-id="#group-access-right"]').click();
});
$(".js-side-nav").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.side-nav-tabs').next().find('.js-content-tab').hide();
jQuery(id).show();
jQuery(this).closest('.side-nav-tabs').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
} );
</script>
@endsection

View File

@@ -0,0 +1,587 @@
@extends('theme::layouts.app')
@section('content')
<h2 class="dashboard-title">{{ __("Settings") }}</h2>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate py-4" data-id="#preferred-setting"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/preferred.svg') }}"> {{ __("Preferred Settings") }} </a></li>
<li><a href="#" class="js-tab-navigate py-4" data-id="#password"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/password.svg') }}"> {{ __("Password") }} </a></li>
<li><a href="#" class="js-tab-navigate py-4" data-id="#api-key"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/api.svg') }}"> {{ __("API Key") }} </a></li>
<li><a href="#" class="js-tab-navigate py-4" data-id="#online-help"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/online-help.svg') }}"> {{ __("Online Help") }} </a></li>
<li><a href="#" class="js-tab-navigate py-4" data-id="#contact-us"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/contact-us.svg') }}"> {{ __("Contact Us") }} </a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item" id="preferred-setting">
<form id="updateNotificationSettingsFrm" action="{{ route('cms.settings.update-notification-settings') }}" method="POST">
<div class="setting-field">
<h3>{{ __("Push Notification") }}</h3>
<ul class="setting-item flex">
<li class="flex space-between">
<span>{{ __("Queue status") }}</span>
<label class="setting-item-field setting-item-ticker-check">
<input type="checkbox" name="notifications[]" value="queue_status" {{ auth()->user()->notificationSettings->where('is_active', true)->contains('notification', 'queue_status') ? 'checked' : '' }}>
<div class="setting-ticker-check">
<i class="setting-ticker-circle"></i>
</div>
</label>
</li>
<li class="flex space-between">
<span>{{ __("App update") }}</span>
<label class="setting-item-field setting-item-ticker-check">
<input type="checkbox" name="notifications[]" value="app_update" {{ auth()->user()->notificationSettings->where('is_active', true)->contains('notification', 'app_update') ? 'checked' : '' }}>
<div class="setting-ticker-check">
<i class="setting-ticker-circle"></i>
</div>
</label>
</li>
<li class="flex space-between">
<span>{{ __("New enquiry") }}</span>
<label class="setting-item-field setting-item-ticker-check">
<input type="checkbox" name="notifications[]" value="new_enquiry" {{ auth()->user()->notificationSettings->where('is_active', true)->contains('notification', 'new_enquiry') ? 'checked' : '' }}>
<div class="setting-ticker-check">
<i class="setting-ticker-circle"></i>
</div>
</label>
</li>
</ul>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
<button type="reset" class="btn btn-error">{{ __("Reset") }}</button>
</div>
</div>
</form>
</div>
<div class="tabs-content-item" id="password" style="display: none;">
<div class="password-setting">
<form id="changePassFrm" action="{{ route('cms.settings.update-password') }}" method="POST">
@csrf
<div class="flex align-center gap-30">
<img src="{{ asset('themes/tailwind/images/lock.svg') }}">
<div class="password-setting__content">
<div class="form-tabs white-input">
<div class="flex mb-4">
<div class="label-field password-field"><label>
<span>{{ __("Current Password") }}</span>
<input type="password" placeholder="" value="" name="current_password" required>
<button type="button" class="eye-clicker password-hide-show"><img src="{{ asset('themes/tailwind/images/eye.svg') }}"></button>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field password-field"><label>
<span>{{ __("New Password") }}</span>
<input type="password" placeholder="" value="" name="new_password" required>
<button type="button" class="eye-clicker password-hide-show"><img src="{{ asset('themes/tailwind/images/eye.svg') }}"></button>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field password-field"><label>
<span>{{ __("Confirm Password") }}</span>
<input type="password" placeholder="" value="" name="new_password_confirmation" required>
<button type="button" class="eye-clicker password-hide-show"><img src="{{ asset('themes/tailwind/images/eye.svg') }}"></button>
</label></div>
</div>
</div>
</div>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
</div>
</div>
</form>
</div>
</div>
<div class="tabs-content-item" id="api-key" style="display: none;">
<form class="form-tabs white-input" id="apiKeyFrm" action="{{ route('cms.settings.update-api-key') }}" method="POST">
<div class="setting-field">
<h3>{{ __("Google drive API Key") }}</h3>
<div class="flex">
<div class="label-field password-field"><label>
<span>{{ __("Enter your Google drive API Key") }}</span>
<input type="text" placeholder="" value="{{ $siteSetting ? $siteSetting->google_drive_api_key : '' }}" name="google_drive_api_key" required>
</label></div>
</div>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
</div>
</div>
</form>
</div>
<div class="tabs-content-item no-box-shadow" id="online-help" style="display: none;">
<div id="onlineHelpTableWrapper" class="">
<table id="onlineHelpTable" class="">
<thead>
<tr>
<td>{{ __("Category") }}</td>
<td>{{ __("No.") }}</td>
<td>{{ __("Title") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="text-center">
<div class="flex button-group">
<button type="button" class="btn primary-button show-online-help-frm">{{ __("Add New") }}</button>
</div>
</div>
</div>
<form class="form-tabs white-input" id="onlineHelpFrm" style="display:none;" action="{{ route('cms.settings.store-online-help') }}" data-store-url="{{ route('cms.settings.store-online-help') }}" data-update-url="{{ route('cms.settings.update-online-help', ':onlineHelpId') }}">
@csrf
<div class="flex mb-4">
<div class="label-field password-field"><label>
<span>{{ __("Category") }}</span>
<select class="w-fit-content" name="category" required>
<option value="online_documents">{{ __("Online Documents") }}</option>
<option value="faq">{{ __("FAQ") }}</option>
</select>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Title(English)") }}</span>
<input type="text" placeholder="" value="" name="title_english" required>
</label></div>
<div class="label-field"><label>
<span>{{ __("Title(Chinese)") }}</span>
<input type="text" placeholder="" value="" name="title_chinese" required>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label class="direction-column">
<span>{{ __("Details(English)") }}</span>
<textarea class="tinymce-custom" id="details_english" name="details_english"></textarea>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label class="direction-column">
<span>{{ __("Details(Chinese)") }}</span>
<textarea class="tinymce-custom" id="details_chinese" name="details_chinese"></textarea>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field w-fit-content"><label>
<span>{{ __("Sort") }}</span>
<input type="number" placeholder="" value="" name="sort" required>
</label></div>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
<button type="button" class="btn btn-error hide-online-help-frm">{{ __("Back") }}</button>
</div>
</div>
</form>
</div>
<div class="tabs-content-item" id="contact-us" style="display: none;">
<form class="form-tabs white-input" id="contactUsFrm" action="{{ route('cms.settings.update-contact-us') }}" method="POST">
@csrf
<div class="flex mb-4">
<div class="label-field">
<label>
<span>{{ __("Contact number") }}</span>
<input type="text" name="phone" placeholder="" value="{{ $siteSetting ? $siteSetting->phone : '' }}" required>
</label>
</div>
<div class="label-field">
<label>
<span>{{ __("Whatsapp") }}</span>
<input type="text" name="whatsapp" placeholder="" value="{{ $siteSetting ? $siteSetting->whatsapp : '' }}" required>
</label>
</div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Email") }}</span>
<input type="email" name="email" placeholder="" value="{{ $siteSetting ? $siteSetting->email : '' }}" required>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Office hour(English)") }}</span>
<input type="text" name="office_hour_english" placeholder="" value="{{ $siteSetting ? $siteSetting->office_hour_english : '' }}" required>
</label></div>
<div class="label-field"><label>
<span>{{ __("Office hour(Chinese)") }}</span>
<input type="text" name="office_hour_chinese" placeholder="" value="{{ $siteSetting ? $siteSetting->office_hour_chinese : '' }}" required>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Address(English)") }}</span>
<input type="text" name="address_english" placeholder="" value="{{ $siteSetting ? $siteSetting->address_english : '' }}" required>
</label></div>
</div>
<div class="flex mb-4">
<div class="label-field"><label>
<span>{{ __("Address(Chinese)") }}</span>
<input type="text" name="address_chinese" placeholder="" value="{{ $siteSetting ? $siteSetting->address_chinese : '' }}" required>
</label></div>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
</div>
</div>
</form>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
var currentLanguage = $('#currentLanguage').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
// Notification Settings
$('#updateNotificationSettingsFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
}
});
}
});
// API Key
$('#apiKeyFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
}
});
}
});
// Contact Us
$('#contactUsFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
}
});
}
});
// Password
$('.password-hide-show').click(function() {
var type = $(this).parent().find('input').attr('type');
if (type == 'password') {
$(this).parent().find('input').attr('type', 'text');
}
else {
$(this).parent().find('input').attr('type', 'password');
}
});
$('#changePassFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
}
else {
popToast('danger', data.message);
}
}
});
}
});
// Online Help
var onlineHelpTable = $("#onlineHelpTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.settings.table-online-help") }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'category_name_display', name: 'category'},
{data: 'sort', name: 'sort'},
(currentLanguage == 'zh_hk' ? {data: 'title_chinese', name: 'title_chinese'} : {data: 'title_english', name: 'title_english'}),
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(document).on('click', '.show-online-help-frm', function(e) {
e.preventDefault();
tinymce.init({
selector:'.tinymce-custom',
menubar: false,
toolbar: "undo redo spellcheckdialog | blocks fontsize | bold italic | link image | alignleft aligncenter alignright alignjustify | indent outdent",
setup: function (editor) {
editor.on('change', function () {
tinymce.triggerSave();
});
}
});
var frmType = $(this).attr('data-frm-type') ? $(this).attr('data-frm-type') : 'add';
$('#onlineHelpTableWrapper').hide();
$('#onlineHelpFrm').show();
if (frmType == 'edit' || frmType == 'view') {
var id = $(this).attr('data-id');
var fields = JSON.parse($(this).attr('data-fields'));
var url = $('#onlineHelpFrm').attr('data-update-url');
url = url.replace(':onlineHelpId', id);
$('#onlineHelpFrm').attr('action', url);
$('#onlineHelpFrm select[name="category"]').val(fields.category);
$('#onlineHelpFrm input[name="title_english"]').val(fields.title_english);
$('#onlineHelpFrm input[name="title_chinese"]').val(fields.title_chinese);
$('#onlineHelpFrm textarea[name="details_english"]').val(fields.details_english);
$('#onlineHelpFrm textarea[name="details_chinese"]').val(fields.details_chinese);
$('#onlineHelpFrm input[name="sort"]').val(fields.sort);
tinyMCE.get('details_english').setContent(fields.details_english);
tinyMCE.get('details_chinese').setContent(fields.details_chinese);
if (frmType == 'view') {
$('#onlineHelpFrm input').attr('disabled', 'disabled');
$('#onlineHelpFrm select').attr('disabled', 'disabled');
setTimeout(() => {
tinymce.get('details_english').getBody().setAttribute('contenteditable', false);
tinymce.get('details_chinese').getBody().setAttribute('contenteditable', false);
}, 500);
}
else {
$('#onlineHelpFrm input').removeAttr('disabled');
$('#onlineHelpFrm select').removeAttr('disabled');
setTimeout(() => {
tinymce.get('details_english').getBody().setAttribute('contenteditable', true);
tinymce.get('details_chinese').getBody().setAttribute('contenteditable', true);
}, 500);
}
}
else {
$('#onlineHelpFrm').attr('action', $('#onlineHelpFrm').attr('data-store-url'));
}
});
$('.hide-online-help-frm').click(function() {
$('#onlineHelpTableWrapper').show();
$('#onlineHelpFrm').hide();
});
$('#onlineHelpFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
var detailsEnglish = tinyMCE.get('details_english').getContent();
var detailsChinese = tinyMCE.get('details_chinese').getContent();
if (detailsEnglish == '' || detailsChinese == '') {
popToast('danger', '{{ __("Fill up all required fields") }}');
return false;
}
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
$('.hide-online-help-frm').click();
onlineHelpTable.ajax.reload();
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '#onlineHelpTable .delete-online-help', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: "You would not be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
popToast('success', data.message);
onlineHelpTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
}
});
}
});
}
});
});
</script>
@endsection

View File

@@ -0,0 +1,170 @@
@extends('theme::layouts.app')
@section('content')
<h2 class="dashboard-title">{{ __("Client Subscription Record") }}</h2>
<form class="search-fields flex" action="#" id="searchFrm">
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2" style="white-space: nowrap;">
{{ __("Company") }}
</label>
<input type="text" class="w-100" id="search_company_name">
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2">
{{ __("Service") }}
</label>
<select class="w-100" id="search_service_type">
<option value="" selected>{{ __("All") }}</option>
<option value="bookkeeping">{{ __("Bookkeeping") }}</option>
<option value="company_secretary">{{ __("Company Secretary") }}</option>
<option value="incorporation">{{ __("Incorporation") }}</option>
</select>
</div>
<div class="search-field d-flex align-items-center">
<label class="label-field mr-2">
{{ __("Package") }}
</label>
<select class="w-100" id="search_subscription_id">
<option value="" selected>{{ __("All") }}</option>
</select>
</div>
<div class="search-field">
<button type="submit" class="btn primary-button">{{ __("Search") }}</button>
</div>
</form>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/receipt-check-black.svg') }}"> {{ __("Active Subscription") }} <span class="tab-number" id="totalActive" style="display: none;"></span></a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/receipt-cross-black.svg') }}"> {{ __("Expiring Subscription") }} <span class="tab-number" id="totalExpired" style="display: none;"></span></a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd no-box-shadow" id="in-queue">
<table id="activeSubscriptionTable" class="" data-ajax-url="{{ route("cms.subscriptions.table", ['status' => 'active']) }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>{{ __("Company") }}</td>
<td>{{ __("Date") }}</td>
<td>{{ __("Service") }}</td>
<td>{{ __("Subscruption Period") }}</td>
<td>{{ __("Package") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Invoice") }}</td>
</tr>
</thead>
{{-- <tbody>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
</tbody> --}}
</table>
<div class="text-center">
<div class="flex button-group">
<a href="{{ route('cms.subscriptions.management') }}" class="btn primary-button btn-normal">{{ __("Subscription Management") }}</a>
</div>
</div>
</div>
<div class="tabs-content-item white-bg no-padd no-box-shadow" id="completed" style="display: none;">
<table id="expiredSubscriptionTable" class="" data-ajax-url="{{ route("cms.subscriptions.table", ['status' => 'expired']) }}" data-empty-text="{{ __("No data available in table") }}">
<thead>
<tr>
<td>{{ __("Company") }}</td>
<td>{{ __("Date") }}</td>
<td>{{ __("Service") }}</td>
<td>{{ __("Subscruption Period") }}</td>
<td>{{ __("Package") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Invoice") }}</td>
</tr>
</thead>
{{-- <tbody>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="failed item-list-note">Expired</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="failed item-list-note">Expired</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="failed item-list-note">Expired</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
<tr>
<td>Green Company Ltd.</td>
<td>20221208</td>
<td>Company Secretary</td>
<td>2022.12.08-2023.01.08</td>
<td>Company Secretary service - Monthly</td>
<td><span class="failed item-list-note">Expired</span></td>
<td><a href=""><img class="max-25" src="{{ asset('themes/tailwind/images/download.svg') }}"></a></td>
</tr>
</tbody> --}}
</table>
<div class="text-center">
<div class="flex button-group">
<a href="{{ route('cms.subscriptions.management') }}" class="btn primary-button btn-normal">{{ __("Subscription Management") }}</a>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script type="text/javascript" src="{{ asset('themes/' . $theme->folder . '/js/cms/subscriptions/index.js') }}"></script>
@endsection

View File

@@ -0,0 +1,105 @@
@extends('theme::layouts.app')
@section('style')
<style>
.form-tabs {
gap: 20px;
}
.list-buttons-wrapper {
display: flex;
align-items: center;
justify-content: space-between;
min-width: 95px;
}
.list-buttons-wrapper .list-buttons {
display: flex;
align-items: center;
justify-content: center;
width: 41px;
height: 41px;
background-color: #009B9A;
color: #000000;
border-radius: 50px;
font-size: 24px;
outline: 0;
}
.basic-services-item-list-wrapper .basic-services-item-list-item .list-title {
opacity: 0;
}
.basic-services-item-list-wrapper .basic-services-item-list-item:first-of-type .list-title {
opacity: 1;
}
.basic-services-wrapper .basic-services-item:first-of-type .basic-services-buttons {
display: none;
}
.optional-services-wrapper .optional-services-item:first-of-type .optional-services-buttons {
display: none;
}
</style>
@endsection
@section('content')
<h2 class="dashboard-title">{{ __("Subscription Details") }}</h2>
<div class="tabs-content">
<div class="tabs-content-item">
<form action="{{ route('cms.subscriptions.management.store') }}" class="form-tabs white-input" id="addFrm">
<input type="hidden" name="service_type" value="{{ isset($subscription) && $subscription ? $subscription->service_type : $service_type }}">
@include('theme::cms.subscriptions.management.form')
</form>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$('#addFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
setTimeout(() => {
window.location.href = '{{ route("cms.subscriptions.management") }}';
}, 2000);
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
});
</script>
@endsection

View File

@@ -0,0 +1,103 @@
@extends('theme::layouts.app')
@section('style')
<style>
.form-tabs {
gap: 20px;
}
.list-buttons-wrapper {
display: flex;
align-items: center;
justify-content: space-between;
min-width: 95px;
}
.list-buttons-wrapper .list-buttons {
display: flex;
align-items: center;
justify-content: center;
width: 41px;
height: 41px;
background-color: #009B9A;
color: #000000;
border-radius: 50px;
font-size: 24px;
outline: 0;
}
.basic-services-item-list-wrapper .basic-services-item-list-item .list-title {
opacity: 0;
}
.basic-services-item-list-wrapper .basic-services-item-list-item:first-of-type .list-title {
opacity: 1;
}
.basic-services-wrapper .basic-services-item:first-of-type .basic-services-buttons {
display: none;
}
.optional-services-wrapper .optional-services-item:first-of-type .optional-services-buttons {
display: none;
}
</style>
@endsection
@section('content')
<h2 class="dashboard-title">{{ __("Subscription Details") }}</h2>
<div class="tabs-content">
<div class="tabs-content-item">
<form action="{{ route('cms.subscriptions.management.update', ['subscription' => $subscription->id]) }}" class="form-tabs white-input" id="editFrm">
@include('theme::cms.subscriptions.management.form')
</form>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$('#editFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
popToast('success', data.message);
setTimeout(() => {
window.location.href = '{{ route("cms.subscriptions.management") }}';
}, 2000);
}
else {
popToast('danger', data.message);
}
},
error: function(data) {
var errors = data.responseJSON.errors;
$.each(errors, function(index, error) {
popToast('danger', errors[0]);
return false;
});
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
});
</script>
@endsection

View File

@@ -0,0 +1,270 @@
@csrf
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Status") }}</span>
<select name="status" required>
<option value="active" {{ isset($subscription) && $subscription && $subscription->status == 'active' ? 'selected' : '' }}>{{ __("Active") }}</option>
<option value="inactive" {{ isset($subscription) && $subscription && $subscription->status == 'inactive' ? 'selected' : '' }}>{{ __("Inactive") }}</option>
</select>
</label></div>
</div>
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Name(English)") }}</span>
<input type="text" placeholder="" value="{{ isset($subscription) && $subscription ? $subscription->name_english : '' }}" name="name_english" required>
</label></div>
<div class="label-field"><label>
<span>{{ __("Name(Chinese)") }}</span>
<input type="text" placeholder="" value="{{ isset($subscription) && $subscription ? $subscription->name_chinese : '' }}" name="name_chinese" required>
</label></div>
</div>
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Period(English)") }}</span>
<select name="period_english" required>
<option value="annually" {{ isset($subscription) && $subscription && $subscription->period_english == 'annually' ? 'selected' : '' }}>Annually</option>
<option value="monthly" {{ isset($subscription) && $subscription && $subscription->period_english == 'monthly' ? 'selected' : '' }}>Monthly</option>
<option value="daily" {{ isset($subscription) && $subscription && $subscription->period_english == 'daily' ? 'selected' : '' }}>Daily</option>
</select>
</label></div>
<div class="label-field"><label>
<span>{{ __("Period(Chinese)") }}</span>
<select name="period_chinese" required>
<option value="每年" {{ isset($subscription) && $subscription && $subscription->period_chinese == '每年' ? 'selected' : '' }}>每年</option>
<option value="每月" {{ isset($subscription) && $subscription && $subscription->period_chinese == '每月' ? 'selected' : '' }}>每月</option>
<option value="每日" {{ isset($subscription) && $subscription && $subscription->period_chinese == '每日' ? 'selected' : '' }}>每日</option>
</select>
</label></div>
</div>
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Name description(English)") }}</span>
<input type="text" placeholder="" name="description_english" value="{{ isset($subscription) && $subscription ? $subscription->description_english : '' }}" required>
</label></div>
</div>
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Name description(Chinese)") }}</span>
<input type="text" placeholder="" name="description_chinese" value="{{ isset($subscription) && $subscription ? $subscription->description_chinese : '' }}" required>
</label></div>
</div>
<div class="flex">
<div class="label-field"><label>
<span>{{ __("Price") }}($)</span>
<input type="text" class="number-only" placeholder="" name="price" value="{{ isset($subscription) && $subscription ? $subscription->price : '' }}" required>
</label></div>
</div>
<div class="legend-form form-tabs basic-services-wrapper">
<h3 class="nomarg">Basic services</h3>
@php
$basicServices = isset($subscription) && $subscription ? $subscription->basicServices : [[]];
@endphp
@foreach ($basicServices as $basicService)
<div class="form-tabs basic-services-item">
<div class="flex align-center">
<div class="fit-content">
Service <span class="basic-services-count">{{ $loop->iteration }}</span> title
</div>
<div class="label-field"><label>
<span>(English)</span>
<input type="text" placeholder="" value="{{ isset($basicService->title_english) ? $basicService->title_english : '' }}" name="basic_service_title_english[{{ $loop->index }}]" required>
</label></div>
<div class="label-field"><label>
<span>(Chinese)</span>
<input type="text" placeholder="" value="{{ isset($basicService->title_chinese) ? $basicService->title_chinese : '' }}" name="basic_service_title_chinese[{{ $loop->index }}]" required>
</label></div>
</div>
<div class="form-tabs basic-services-item-list-wrapper">
@php
$lists = isset($basicService->lists) ? $basicService->lists : [[]];
@endphp
@foreach ($lists as $list)
<div class="flex align-center basic-services-item-list-item">
<div class="fit-content list-title">
{{ __("Service") }} <span class="basic-services-count">{{ $loop->iteration }}</span> {{ __("list") }}
</div>
<div class="label-field">
<label>
<span>({{ __("English") }})</span>
<input type="text" placeholder="" value="{{ isset($list->title_english) ? $list->title_english : '' }}" class="basic_service_list_title_english" name="basic_service_list_title_english[{{ $loop->parent->index }}][{{ $loop->index }}]" required>
</label>
</div>
<div class="label-field">
<label>
<span>({{ __("Chinese") }})</span>
<input type="text" placeholder="" value="{{ isset($list->title_chinese) ? $list->title_chinese : '' }}" class="basic_service_list_title_chinese" name="basic_service_list_title_chinese[{{ $loop->parent->index }}][{{ $loop->index }}]" required>
</label>
</div>
<div class="list-buttons-wrapper">
<button type="button" class="list-buttons" data-action="remove">-</button>
<button type="button" class="list-buttons" data-action="add">+</button>
</div>
</div>
@endforeach
</div>
<div class="flex">
<button type="button" class="btn btn-error basic-services-buttons btn-normal" data-action="remove">{{ __("Remove service") }}</button>
</div>
</div>
@endforeach
<div class="flex">
<button type="button" class="btn primary-button btn-normal basic-services-buttons" data-action="add">{{ __("Add new service") }}</button>
</div>
</div>
<div class="legend-form form-tabs optional-services-wrapper">
<h3 class="nomarg">Optional services</h3>
@php
$optionalServices = isset($subscription) && $subscription ? $subscription->optionalServices : [[]];
@endphp
@foreach ($optionalServices as $optionalService)
<div class="form-tabs optional-services-item">
<div class="flex align-center optional-services-item-list-item">
<div class="fit-content list-title">
{{ __("Service") }} <span class="optional-services-count">{{ $loop->iteration }}</span> {{ __("list") }}
</div>
<div class="label-field">
<label>
<span>({{ __("English") }})</span>
<input type="text" placeholder="" value="{{ isset($optionalService->title_english) ? $optionalService->title_english : '' }}" name="optional_service_title_english[{{ $loop->index }}]" required>
</label>
</div>
<div class="label-field">
<label>
<span>({{ __("Chinese") }})</span>
<input type="text" placeholder="" value="{{ isset($optionalService->title_chinese) ? $optionalService->title_chinese : '' }}" name="optional_service_title_chinese[{{ $loop->index }}]" required>
</label>
</div>
</div>
<div class="flex align-center price-fields">
<div class="fit-content">
{{ __("Service") }} <span class="optional-services-count">{{ $loop->iteration }}</span> {{ strtolower(__("Price")) }}
</div>
<div class="label-field">
<label>
<input type="radio" class="optional_service_is_custom" name="optional_service_is_custom[{{ $loop->index }}]" value="no" {{ isset($optionalService->is_custom) && !$optionalService->is_custom ? 'checked' : '' }} required>
<span>$</span>
<input type="text" class="number-only" name="optional_service_price[{{ $loop->index }}]" value="{{ isset($optionalService->is_custom) && !$optionalService->is_custom && isset($optionalService->price) ? $optionalService->price : '' }}">
</label>
<label>
<span>{{ __("Period") }}</span>
<select name="optional_service_period[{{ $loop->index }}]">
<option value="year" {{ isset($optionalService->is_custom) && !$optionalService->is_custom && isset($optionalService->period) && $optionalService->period == 'year' ? 'selected' : '' }}>{{ __("Year") }}</option>
<option value="month" {{ isset($optionalService->is_custom) && !$optionalService->is_custom && isset($optionalService->period) && $optionalService->period == 'month' ? 'selected' : '' }}>{{ __("Month") }}</option>
<option value="day" {{ isset($optionalService->is_custom) && !$optionalService->is_custom && isset($optionalService->period) && $optionalService->period == 'day' ? 'selected' : '' }}>{{ __("Day") }}</option>
</select>
</label>
</div>
<div class="label-field">
<label>
<input type="radio" class="optional_service_is_custom" name="optional_service_is_custom[{{ $loop->index }}]" value="yes" {{ isset($optionalService->is_custom) && $optionalService->is_custom ? 'checked' : '' }} required>
<span>{{ __("Custom") }}:</span>
<input type="text" name="optional_service_custom_description[]" value="{{ isset($optionalService->is_custom) && $optionalService->is_custom && isset($optionalService->custom_description) ? $optionalService->custom_description : '' }}">
</label>
</div>
</div>
<div class="flex">
<button type="button" class="btn btn-error optional-services-buttons btn-normal" data-action="remove">{{ __("Remove service") }}</button>
</div>
</div>
@endforeach
<div class="flex">
<button type="button" class="btn primary-button btn-normal optional-services-buttons" data-action="add">{{ __("Add new service") }}</button>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<a href="{{ route('cms.subscriptions.management') }}" class="btn red-btn mx-3">{{ __("Back") }}</a>
</div>
<script>
$(document).ready( function () {
$(document).on('click', '.basic-services-item-list-wrapper .basic-services-item-list-item .list-buttons', function(e) {
var action = $(this).attr('data-action');
var parentWrapper = $(this).parents('.basic-services-item-list-wrapper').first();
if (action == 'add') {
var cloneWrapper = parentWrapper.find('.basic-services-item-list-item').first().clone();
cloneWrapper.find('input[type="text"]').val('');
parentWrapper.append(cloneWrapper);
}
else if (action == 'remove') {
if (parentWrapper.find('.basic-services-item-list-item').length > 1) {
$(this).parents('.basic-services-item-list-item').first().remove();
}
}
});
$(document).on('click', '.basic-services-wrapper .basic-services-buttons', function(e) {
var action = $(this).attr('data-action');
var parentWrapper = $(this).parents('.basic-services-wrapper').first();
if (action == 'add') {
var cloneWrapper = parentWrapper.find('.basic-services-item').first().clone();
cloneWrapper.find('.basic-services-count').text(parentWrapper.find('.basic-services-item').length + 1);
cloneWrapper.find('input[type="text"]').val('');
cloneWrapper.find('.basic-services-item-list-wrapper .basic-services-item-list-item:not(:first-child)').remove();
cloneWrapper.find('.basic-services-item-list-wrapper .basic-services-item-list-item .basic_service_list_title_english').attr('name', 'basic_service_list_title_english[' + parentWrapper.find('.basic-services-item').length + '][]');
cloneWrapper.find('.basic-services-item-list-wrapper .basic-services-item-list-item .basic_service_list_title_chinese').attr('name', 'basic_service_list_title_chinese[' + parentWrapper.find('.basic-services-item').length + '][]');
parentWrapper.find('.basic-services-item:last').after(cloneWrapper);
}
else if (action == 'remove') {
if (parentWrapper.find('.basic-services-item').length > 1) {
$(this).parents('.basic-services-item').first().remove();
var count = 1;
parentWrapper.find('.basic-services-item').each(function( index ) {
$(this).find('.basic-services-count').text(count);
$(this).find('.basic-services-item-list-wrapper .basic-services-item-list-item .basic_service_list_title_english').attr('name', 'basic_service_list_title_english[' + (count - 1) + '][]');
$(this).find('.basic-services-item-list-wrapper .basic-services-item-list-item .basic_service_list_title_chinese').attr('name', 'basic_service_list_title_chinese[' + (count - 1) + '][]');
count++;
});
}
}
});
$(document).on('click', '.optional-services-wrapper .optional-services-buttons', function(e) {
var action = $(this).attr('data-action');
var parentWrapper = $(this).parents('.optional-services-wrapper').first();
if (action == 'add') {
var cloneWrapper = parentWrapper.find('.optional-services-item').first().clone();
cloneWrapper.find('.optional-services-count').text(parentWrapper.find('.optional-services-item').length + 1);
cloneWrapper.find('input[type="radio"]').prop('checked', false);
cloneWrapper.find('.optional_service_is_custom').attr('name', 'optional_service_is_custom[' + parentWrapper.find('.optional-services-item').length + ']');
cloneWrapper.find('.price-fields').find('select').removeAttr('required');
cloneWrapper.find('.price-fields').first().find('input[type="text"]').removeAttr('required');
parentWrapper.find('.optional-services-item:last').after(cloneWrapper);
}
else if (action == 'remove') {
if (parentWrapper.find('.optional-services-item').length > 1) {
$(this).parents('.optional-services-item').first().remove();
var count = 1;
parentWrapper.find('.optional-services-item').each(function( index ) {
$(this).find('.optional-services-count').text(count);
$(this).find('.optional_service_is_custom').attr('name', 'optional_service_is_custom[' + (count - 1) + ']');
count++;
});
}
}
});
$(document).on('change', '.optional_service_is_custom', function(e) {
$(this).parents('.price-fields').first().find('select').removeAttr('required');
$(this).parents('.price-fields').first().find('input[type="text"]').removeAttr('required');
$(this).parents('.label-field').first().find('select').attr('required', 'required');
$(this).parents('.label-field').first().find('input[type="text"]').attr('required', 'required');
});
});
</script>

View File

@@ -0,0 +1,323 @@
@extends('theme::layouts.app')
@section('content')
<div class="dashboard-title-flex space-between">
<h2 class="dashboard-title">{{ __("Subscription Management") }}</h2>
<div class="dashboard-button-title">
@if (auth()->user()->userRole->hasAccess('manage-subscription-packages'))
<a href="{{ route('cms.subscriptions.management.create', ['service_type' => 'bookkeeping']) }}" class="btn primary-button add-new-btn">{{ __("Add New") }}</a>
@endif
<a href="{{ route('cms.subscriptions') }}" class="btn btn-error">{{ __("Back") }}</a>
</div>
</div>
<div class="tabs-navigation blue-tabs">
<ul>
<li class="active"><a href="#" class="js-tab-navigate" data-id="#in-queue" data-add-url="{{ route('cms.subscriptions.management.create', ['service_type' => 'bookkeeping']) }}"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/business-black.svg') }}"> {{ __("Bookkeeping") }}</a></li>
<li><a href="#" class="js-tab-navigate" data-id="#completed" data-add-url="{{ route('cms.subscriptions.management.create', ['service_type' => 'company_secretary']) }}"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/secretary-black.svg') }}"> {{ __("Company Secretary") }}</a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item white-bg no-padd no-box-shadow" id="in-queue">
<table id="bookkeppingSubscriptionListTable" class="">
<thead>
<tr>
<td>{{ __("Name") }}</td>
<td>{{ __("Price") }}</td>
<td>{{ __("Period") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr> --}}
</tbody>
</table>
</div>
<div class="tabs-content-item white-bg no-padd no-box-shadow" id="completed" style="display: none;">
<table id="comSecSubscriptionListTable" class="">
<thead>
<tr>
<td>{{ __("Name") }}</td>
<td>{{ __("Price") }}</td>
<td>{{ __("Period") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody>
{{-- <tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr>
<tr>
<td>Demi</td>
<td>$14,000</td>
<td>Anually</td>
<td><span class="success item-list-note">Active</span></td>
<td><a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">View</a> <span class="long-pipe">|</span> <a href="{{ route('cms.subscriptions.management') }}?u=1" class="primary-text">Edit</a></td>
</tr> --}}
</tbody>
</table>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
var currentLanguage = $('#currentLanguage').val();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var bookkeppingSubscriptionListTable = $("#bookkeppingSubscriptionListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.subscriptions.management.table", ["service_type" => "bookkeeping"]) }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
(currentLanguage == 'zh_hk' ? {data: 'name_chinese', name: 'name_chinese'} : {data: 'name_english', name: 'name_english'}),
{data: 'price', name: 'price'},
(currentLanguage == 'zh_hk' ? {data: 'period_chinese', name: 'period_chinese'} : {data: 'period_english', name: 'period_english'}),
{data: 'status', name: 'status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
var comSecSubscriptionListTable = $("#comSecSubscriptionListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.subscriptions.management.table", ["service_type" => "company_secretary"]) }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
(currentLanguage == 'zh_hk' ? {data: 'name_chinese', name: 'name_chinese'} : {data: 'name_english', name: 'name_english'}),
{data: 'price', name: 'price'},
(currentLanguage == 'zh_hk' ? {data: 'period_chinese', name: 'period_chinese'} : {data: 'period_english', name: 'period_english'}),
{data: 'status', name: 'status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(document).on('click', '.suspend-subscription', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: `{{ __("You would not be able to revert this!") }}`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
bookkeppingSubscriptionListTable.ajax.reload();
comSecSubscriptionListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.activate-subscription', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: `{{ __("You would not be able to revert this!") }}`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
bookkeppingSubscriptionListTable.ajax.reload();
comSecSubscriptionListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(".js-side-nav").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.side-nav-tabs').next().find('.js-content-tab').hide();
jQuery(id).show();
jQuery(this).closest('.side-nav-tabs').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
var addUrl = jQuery(this).data('add-url');
$('.add-new-btn').attr('href', addUrl)
});
} );
</script>
@endsection

View File

@@ -0,0 +1,36 @@
@extends('theme::layouts.app')
@section('content')
<form method="POST" action="{{ route('cms.terms-and-conditions.update') }}">
@csrf
<div class="dashboard-title-flex space-between">
<h2 class="dashboard-title">{{ __("Terms and Conditions(English)") }}</h2>
</div>
<div class="terms-privacy-content">
<textarea class="tinymce" name="terms_and_conditions_english">{!! $siteSetting ? $siteSetting->terms_and_conditions_english : '' !!}</textarea>
</div>
<div class="dashboard-title-flex space-between mt-30">
<h2 class="dashboard-title">{{ __("Terms and Conditions(Chinese)") }}</h2>
</div>
<div class="terms-privacy-content">
<textarea class="tinymce" name="terms_and_conditions_chinese">{!! $siteSetting ? $siteSetting->terms_and_conditions_chinese : '' !!}</textarea>
</div>
<div class="text-center">
<div class="flex button-group">
<button type="submit" class="btn primary-button">{{ __("Save") }}</button>
<button type="reset" class="btn btn-error">{{ __("Reset") }}</button>
</div>
</div>
</form>
@endsection
@section('script')
@endsection

View File

@@ -0,0 +1,807 @@
@extends('theme::layouts.app')
@section('style')
<style>
#userAccessLogsListTable_wrapper {
border: 2px solid #D6DEE9 !important;
box-shadow: none !important;
margin-bottom: 30px;
}
#userAccessLogsListTable_wrapper tbody tr {
background-color: #D6DEE9;
color: #364257;
}
</style>
@endsection
@section('content')
<div class="dashboard-title-flex space-between">
<h2 class="dashboard-title">{{ __("User") }}</h2>
<div class="dashboard-button-title">
@if (auth()->user()->userRole->hasAccess('manage-user-list-and-access-log'))
<a href="#" class="btn primary-button" data-bs-toggle="modal" data-bs-target="#newUserModal">{{ __("Add new user") }}</a>
@endif
</div>
</div>
<div class="tabs-navigation blue-tabs tab-paddx-20">
<ul>
<li class="active"><a href="#" class="js-tab-navigate paddingx-20" data-id="#in-queue"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/user-2.svg') }}"> {{ __("User List") }} </a></li>
<li><a href="#" class="js-tab-navigate " data-id="#completed"><img class="dashboard-detail-image max-25" src="{{ asset('themes/tailwind/images/access-log.svg') }}"> {{ __("Access Log") }} </a></li>
</ul>
</div>
<div class="tabs-content">
<div class="tabs-content-item" id="in-queue">
<table id="userListTable" class="">
<thead>
<tr>
<td>{{ __("First name") }}</td>
<td>{{ __("Last name") }}</td>
<td>{{ __("Phone number") }}</td>
<td>{{ __("User email") }}</td>
<td>{{ __("Access level") }}</td>
<td>{{ __("Status") }}</td>
<td>{{ __("Action") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tabs-content-item" id="completed" style="display: none;">
<table id="allUserAccessLogsListTable" class="">
<thead>
<tr>
<td>{{ __("User email") }}</td>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
{{-- Modals --}}
{{-- Add User Modal --}}
<div class="modal fade custom-modal" id="newUserModal" tabindex="-1" aria-labelledby="newUserModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("User Detail") }}</p>
<form action="{{ route('cms.users.store') }}" class="theme-form" id="addUserFrm">
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("First name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="first_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password" required>
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Last name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="last_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Confirm Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password_confirmation" required>
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Phone") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="phone" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Email") }}</label>
</div>
<div class="col">
<input type="email" class="form-control" value="" name="email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Access Level") }}</label>
</div>
<div class="col">
<select class="w-100" name="role_id" required>
<option value="" disabled selected>{{ __("Select an option") }}</option>
@foreach ($roles as $role)
<option value="{{ $role->id }}">{{ $role->display_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- Edit User Modal --}}
<div class="modal fade custom-modal" id="editUserModal" tabindex="-1" aria-labelledby="editUserModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title">{{ __("User Detail") }}</p>
<form action="#" class="theme-form" id="editUserFrm">
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("First name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="first_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Current Password") }}</label>
</div>
<div class="col">
<input type="password" class="form-control" value="" name="current_password">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Last name") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="last_name" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Phone") }}</label>
</div>
<div class="col">
<input type="text" class="form-control" value="" name="phone" required>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Confirm Password") }}</label>
</div>
<div class="col">
<div class="password-wrapper">
<input type="password" class="form-control" value="" name="password_confirmation">
<img class="mx-auto password-hide-show" src="{{ asset('themes/tailwind/images/password-hide-show.png') }}">
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Email") }}</label>
</div>
<div class="col">
<input type="email" class="form-control" value="" name="email" required>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto">
<label class="col-form-label">{{ __("Access Level") }}</label>
</div>
<div class="col">
<select class="w-100" name="role_id" required>
<option value="" disabled selected>{{ __("Select an option") }}</option>
@foreach ($roles as $role)
<option value="{{ $role->id }}">{{ $role->display_name }}</option>
@endforeach
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="row mb-5 align-items-center">
<div class="col-auto" required>
<label class="col-form-label">{{ __("Status") }}</label>
</div>
<div class="col">
<select class="w-100" name="status">
<option value="active" selected>{{ __("Active") }}</option>
<option value="inactive">{{ __("Inactive") }}</option>
</select>
</div>
</div>
</div>
</div>
<div class="d-flex align-items-center justify-content-center">
<button type="submit" class="btn green-btn mx-3">{{ __("Save") }}</button>
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Cancel") }}</button>
</div>
</form>
</div>
</div>
</div>
</div>
{{-- User Action Logs Modal --}}
<div class="modal fade custom-modal" id="userActionLogsModal" tabindex="-1" aria-labelledby="userActionLogsModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="modal-title mb-4">{{ __("User Log") }}</p>
<table id="userAccessLogsListTable" class="">
<thead>
<tr>
<td>{{ __("Date") }}</td>
<td>{{ __("Time") }}</td>
<td>{{ __("Event") }}</td>
<td>{{ __("Description") }}</td>
<td>{{ __("Status") }}</td>
</tr>
</thead>
<tbody></tbody>
</table>
<div class="d-flex align-items-center justify-content-center">
<button type="button" class="btn red-btn mx-3" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
</div>
{{-- Saved Success Modal --}}
<div class="modal fade validation-modal style2" id="validationModal" tabindex="-1" aria-labelledby="validationModal1Label" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content mx-auto">
<div class="modal-body p-0">
<p class="text-center error-message">{{ __("All changes have been saved!") }}</p>
<button type="button" class="btn br-0" data-bs-dismiss="modal">{{ __("Back") }}</button>
</div>
</div>
</div>
</div>
@endsection
@section('script')
<script>
$(document).ready( function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
var userAccessLogsListTable = null;
var userListTable = $("#userListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.users.table") }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'first_name', name: 'users.first_name'},
{data: 'last_name', name: 'users.last_name'},
{data: 'phone', name: 'users.phone'},
{data: 'email', name: 'users.email'},
{data: 'display_name', name: 'roles.display_name'},
{data: 'status', name: 'users.status'},
{data: 'actions', name: 'actions', searchable: false, sortable: false}
],
order: [[0, "asc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$("#allUserAccessLogsListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: '{{ route("cms.users.accessLogsTable") }}',
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
},
},
columns: [
{data: 'email', name: 'users.email'},
{data: 'date', name: 'user_access_logs.created_at'},
{data: 'time', name: 'user_access_logs.created_at'},
{data: 'event', name: 'user_access_logs.event'},
{data: 'description', name: 'user_access_logs.description'},
{data: 'status', name: 'user_access_logs.status'},
],
order: [[1, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
$(".js-side-nav").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.side-nav-tabs').next().find('.js-content-tab').hide();
jQuery(id).show();
jQuery(this).closest('.side-nav-tabs').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$(".js-tab-navigate").click(function(e){
e.preventDefault();
var id = jQuery(this).data('id');
jQuery(this).closest('.tabs-navigation').next().find('.tabs-content-item').hide();
jQuery(id).show();
jQuery(this).closest('.tabs-navigation').find('li').removeClass('active');
jQuery(this).parent().addClass('active');
});
$('.password-hide-show').click(function() {
var type = $(this).parent().find('input').attr('type');
if (type == 'password') {
$(this).parent().find('input').attr('type', 'text');
}
else {
$(this).parent().find('input').attr('type', 'password');
}
});
$('#addUserFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
$('#newUserModal').modal('hide');
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
$('#addUserFrm').trigger("reset");
userListTable.ajax.reload();
}
else {
$('#validationModal .error-message').html(data.message);
$('#validationModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '.suspend-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.activate-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.remove-user', function(e) {
var action = $(this).attr('data-action');
if (action) {
Swal.fire({
title: '{{ __("Are you sure?") }}',
text: '{{ __("You would not be able to revert this!") }}',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: '{{ __("Yes") }}',
cancelButtonText: '{{ __("Cancel") }}'
}).then((result) => {
if (result.isConfirmed) {
$.ajax({
url: action,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
userListTable.ajax.reload();
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
}
});
$(document).on('click', '.edit-user', function(e) {
var actionShow = $(this).attr('data-action-show');
var actionUpdate = $(this).attr('data-action-update');
if (actionShow && actionUpdate) {
$.ajax({
url: actionShow,
type: "post",
data: {},
dataType: 'json',
success:function(data) {
if (data.success) {
$('#editUserFrm').attr('action', actionUpdate);
$('#editUserFrm input[name="first_name"]').val(data.user.first_name);
$('#editUserFrm input[name="last_name"]').val(data.user.last_name);
$('#editUserFrm input[name="phone"]').val(data.user.phone);
$('#editUserFrm input[name="email"]').val(data.user.email);
$('#editUserFrm select[name="role_id"]').val(data.user.role_id);
$('#editUserFrm select[name="status"]').val(data.user.status);
$('#editUserModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
}
});
}
});
$('#editUserFrm').submit(function(e) {
e.preventDefault();
var action = $(this).attr('action');
var button = $(this).find('button[type="submit"]');
var buttonHtml = button.html();
if (!button.is(':disabled') && action) {
button.attr('disabled', 'disabled');
button.html('<i class="fa fa-spinner fa-spin" style="font-size:24px"></i>');
$.ajax({
url: action,
type: "post",
data: $(this).serialize(),
dataType: 'json',
success:function(data) {
button.removeAttr('disabled');
button.html(buttonHtml);
if (data.success) {
$('#editUserModal').modal('hide');
$('#validationModal').modal('show');
$('#validationModal .error-message').html(data.message);
$('#editUserFrm').trigger("reset");
userListTable.ajax.reload();
}
else {
$('#validationModal .error-message').html(data.message);
$('#validationModal').modal('show');
}
},
error: function(data) {
var errors = data.responseJSON.errors;
var errorMessage = '<ul>';
$.each(errors, function(index, error) {
console.log(error);
errorMessage += '<li>' + error[0] + '</li>';
});
errorMessage += '</ul>';
$('#validationModal .error-message').html(errorMessage);
$('#validationModal').modal('show');
button.removeAttr('disabled');
button.html(buttonHtml);
}
});
}
});
$(document).on('click', '.view-user-log', function(e) {
var action = $(this).attr('data-action');
if (action) {
initializeUserAccessLogsListTable(action);
$('#userActionLogsModal').modal('show');
}
});
function initializeUserAccessLogsListTable(url = '{{ route("cms.users.accessLogsTable") }}') {
if (userAccessLogsListTable) {
userAccessLogsListTable.destroy();
}
userAccessLogsListTable = $("#userAccessLogsListTable").DataTable({
processing: true,
serverSide: true,
ajax: {
url: url,
type: 'post',
"dataSrc": function ( json ) {
for (var i = 0; i < json.data.length; i++) {
$.each( json.data[i], function( key, value ) {
json.data[i][key] = value ? value : '-';
});
}
return json.data;
}
},
columns: [
{data: 'date', name: 'user_access_logs.created_at'},
{data: 'time', name: 'user_access_logs.created_at'},
{data: 'event', name: 'user_access_logs.event'},
{data: 'description', name: 'user_access_logs.description'},
{data: 'status', name: 'user_access_logs.status'},
],
order: [[1, "desc"]],
searchDelay: 500,
"language": {
"paginate": {
"next": ">", // Text for the "Next" page button
"previous": "<" // Text for the "Previous" page button
},
"emptyTable": '{{ __("No data available in table") }}'
// Add more text customizations if needed
}
});
}
} );
</script>
@endsection