Updated datatables, using @pa instead of @js/@css, using conditionalPaging in datatables
All checks were successful
Create Docker Image / Build Docker Image (x86_64) (push) Successful in 35s
Create Docker Image / Final Docker Image Manifest (push) Successful in 10s

This commit is contained in:
Deon George 2024-07-28 21:33:30 +10:00
parent 1c4cb6f38c
commit 5f10175b35
18 changed files with 230 additions and 670 deletions

View File

@ -5,11 +5,9 @@ namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
use Intuit\Traits\IntuitSocialite;
use Leenooks\Traits\SingleOrFail;
class AppServiceProvider extends ServiceProvider
{
use SingleOrFail;
use IntuitSocialite;
/**
@ -17,7 +15,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function register(): void
{
}
/**
@ -25,8 +22,6 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot(): void
{
self::bootSingleOrfail();
Gate::define('wholesaler', function ($user) {
return $user->isWholesaler();
});

View File

@ -1,5 +1,5 @@
<?php
return [
App\Providers\AppServiceProvider::class,
App\Providers\AppServiceProvider::class,
];

148
composer.lock generated
View File

@ -1534,16 +1534,16 @@
},
{
"name": "laravel/framework",
"version": "v11.17.0",
"version": "v11.18.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "42f505a0c8afc0743f73e70bec08e641e2870bd6"
"reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/42f505a0c8afc0743f73e70bec08e641e2870bd6",
"reference": "42f505a0c8afc0743f73e70bec08e641e2870bd6",
"url": "https://api.github.com/repos/laravel/framework/zipball/b19ba518c56852567e99fbae9321bc436c2cc5a8",
"reference": "b19ba518c56852567e99fbae9321bc436c2cc5a8",
"shasum": ""
},
"require": {
@ -1736,7 +1736,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2024-07-23T16:33:27+00:00"
"time": "2024-07-26T10:39:29+00:00"
},
{
"name": "laravel/intuit",
@ -3056,11 +3056,11 @@
},
{
"name": "leenooks/laravel",
"version": "11.1.6",
"version": "11.1.7",
"source": {
"type": "git",
"url": "https://gitea.dege.au/laravel/leenooks.git",
"reference": "628fbac8f9ce60c5124ee83b288733ae24e48b63"
"reference": "eaece2b69d028fba0db5a5bb55b1386acf017cbc"
},
"type": "library",
"extra": {
@ -3093,7 +3093,7 @@
"laravel",
"leenooks"
],
"time": "2024-07-26T02:26:31+00:00"
"time": "2024-07-28T04:52:56+00:00"
},
{
"name": "leenooks/passkey",
@ -5081,16 +5081,16 @@
},
{
"name": "symfony/console",
"version": "v7.1.2",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae"
"reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/0aa29ca177f432ab68533432db0de059f39c92ae",
"reference": "0aa29ca177f432ab68533432db0de059f39c92ae",
"url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
"reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
"shasum": ""
},
"require": {
@ -5154,7 +5154,7 @@
"terminal"
],
"support": {
"source": "https://github.com/symfony/console/tree/v7.1.2"
"source": "https://github.com/symfony/console/tree/v7.1.3"
},
"funding": [
{
@ -5170,7 +5170,7 @@
"type": "tidelift"
}
],
"time": "2024-06-28T10:03:55+00:00"
"time": "2024-07-26T12:41:01+00:00"
},
{
"name": "symfony/css-selector",
@ -5306,16 +5306,16 @@
},
{
"name": "symfony/error-handler",
"version": "v7.1.2",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32"
"reference": "432bb369952795c61ca1def65e078c4a80dad13c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/2412d3dddb5c9ea51a39cfbff1c565fc9844ca32",
"reference": "2412d3dddb5c9ea51a39cfbff1c565fc9844ca32",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c",
"reference": "432bb369952795c61ca1def65e078c4a80dad13c",
"shasum": ""
},
"require": {
@ -5361,7 +5361,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v7.1.2"
"source": "https://github.com/symfony/error-handler/tree/v7.1.3"
},
"funding": [
{
@ -5377,7 +5377,7 @@
"type": "tidelift"
}
],
"time": "2024-06-25T19:55:06+00:00"
"time": "2024-07-26T13:02:51+00:00"
},
{
"name": "symfony/event-dispatcher",
@ -5537,16 +5537,16 @@
},
{
"name": "symfony/finder",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6"
"reference": "717c6329886f32dc65e27461f80f2a465412fdca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/fbb0ba67688b780efbc886c1a0a0948dcf7205d6",
"reference": "fbb0ba67688b780efbc886c1a0a0948dcf7205d6",
"url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca",
"reference": "717c6329886f32dc65e27461f80f2a465412fdca",
"shasum": ""
},
"require": {
@ -5581,7 +5581,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v7.1.1"
"source": "https://github.com/symfony/finder/tree/v7.1.3"
},
"funding": [
{
@ -5597,20 +5597,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-24T07:08:44+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa"
"reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/74d171d5b6a1d9e4bfee09a41937c17a7536acfa",
"reference": "74d171d5b6a1d9e4bfee09a41937c17a7536acfa",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a",
"reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a",
"shasum": ""
},
"require": {
@ -5658,7 +5658,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v7.1.1"
"source": "https://github.com/symfony/http-foundation/tree/v7.1.3"
},
"funding": [
{
@ -5674,20 +5674,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-26T12:41:01+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v7.1.2",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6"
"reference": "db9702f3a04cc471ec8c70e881825db26ac5f186"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6",
"reference": "ae3fa717db4d41a55d14c2bd92399e37cf5bc0f6",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186",
"reference": "db9702f3a04cc471ec8c70e881825db26ac5f186",
"shasum": ""
},
"require": {
@ -5772,7 +5772,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v7.1.2"
"source": "https://github.com/symfony/http-kernel/tree/v7.1.3"
},
"funding": [
{
@ -5788,7 +5788,7 @@
"type": "tidelift"
}
],
"time": "2024-06-28T13:13:31+00:00"
"time": "2024-07-26T14:58:15+00:00"
},
{
"name": "symfony/mailer",
@ -6666,16 +6666,16 @@
},
{
"name": "symfony/process",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028"
"reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/febf90124323a093c7ee06fdb30e765ca3c20028",
"reference": "febf90124323a093c7ee06fdb30e765ca3c20028",
"url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca",
"reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca",
"shasum": ""
},
"require": {
@ -6707,7 +6707,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/process/tree/v7.1.1"
"source": "https://github.com/symfony/process/tree/v7.1.3"
},
"funding": [
{
@ -6723,20 +6723,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-26T12:44:47+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140"
"reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9a5dbb606da711f5d40a7596ad577856f9402140",
"reference": "9a5dbb606da711f5d40a7596ad577856f9402140",
"url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0",
"reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0",
"shasum": ""
},
"require": {
@ -6790,7 +6790,7 @@
"psr-7"
],
"support": {
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.1"
"source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3"
},
"funding": [
{
@ -6806,20 +6806,20 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-17T06:10:24+00:00"
},
{
"name": "symfony/routing",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "60c31bab5c45af7f13091b87deb708830f3c96c0"
"reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/60c31bab5c45af7f13091b87deb708830f3c96c0",
"reference": "60c31bab5c45af7f13091b87deb708830f3c96c0",
"url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0",
"reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0",
"shasum": ""
},
"require": {
@ -6871,7 +6871,7 @@
"url"
],
"support": {
"source": "https://github.com/symfony/routing/tree/v7.1.1"
"source": "https://github.com/symfony/routing/tree/v7.1.3"
},
"funding": [
{
@ -6887,7 +6887,7 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-17T06:10:24+00:00"
},
{
"name": "symfony/service-contracts",
@ -6974,16 +6974,16 @@
},
{
"name": "symfony/string",
"version": "v7.1.2",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8"
"reference": "ea272a882be7f20cad58d5d78c215001617b7f07"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/string/zipball/14221089ac66cf82e3cf3d1c1da65de305587ff8",
"reference": "14221089ac66cf82e3cf3d1c1da65de305587ff8",
"url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07",
"reference": "ea272a882be7f20cad58d5d78c215001617b7f07",
"shasum": ""
},
"require": {
@ -7041,7 +7041,7 @@
"utf8"
],
"support": {
"source": "https://github.com/symfony/string/tree/v7.1.2"
"source": "https://github.com/symfony/string/tree/v7.1.3"
},
"funding": [
{
@ -7057,20 +7057,20 @@
"type": "tidelift"
}
],
"time": "2024-06-28T09:27:18+00:00"
"time": "2024-07-22T10:25:37+00:00"
},
{
"name": "symfony/translation",
"version": "v7.1.1",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3"
"reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3",
"reference": "cf5ae136e124fc7681b34ce9fac9d5b9ae8ceee3",
"url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1",
"reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1",
"shasum": ""
},
"require": {
@ -7135,7 +7135,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/translation/tree/v7.1.1"
"source": "https://github.com/symfony/translation/tree/v7.1.3"
},
"funding": [
{
@ -7151,7 +7151,7 @@
"type": "tidelift"
}
],
"time": "2024-05-31T14:57:53+00:00"
"time": "2024-07-26T12:41:01+00:00"
},
{
"name": "symfony/translation-contracts",
@ -7307,16 +7307,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v7.1.2",
"version": "v7.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d"
"reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/5857c57c6b4b86524c08cf4f4bc95327270a816d",
"reference": "5857c57c6b4b86524c08cf4f4bc95327270a816d",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f",
"reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f",
"shasum": ""
},
"require": {
@ -7370,7 +7370,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v7.1.2"
"source": "https://github.com/symfony/var-dumper/tree/v7.1.3"
},
"funding": [
{
@ -7386,7 +7386,7 @@
"type": "tidelift"
}
],
"time": "2024-06-28T08:00:31+00:00"
"time": "2024-07-26T12:41:01+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",

50
public/css/fixes.css vendored
View File

@ -2,44 +2,11 @@ body {
font-size: 0.75em;
}
/* Fixes for data tables */
/* Fix pagination buttons */
.dataTables_wrapper .dataTables_paginate .paginate_button {
padding: 0 0;
margin-left: 0;
border: 0 solid;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
border: 0 solid;
background: #fff;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:active {
box-shadow: 0 0 0 #fff;
background-color: #fff;
}
/* Fix select width */
.dataTables_wrapper .dataTables_length select {
width: 5em !important;
}
.dataTables_scrollHeadInner {
width: 100% !important;
}
/* Remove multiple sorting images on tables */
table.dataTable thead .sorting_asc {
background-image: none !important;
}
table.dataTable thead .sorting_desc {
background-image: none !important;
}
table.dataTable thead .sorting {
background-image: none !important;
/* Data Tables */
/* Row Group columun padding 2 */
table.dataTable tbody tr.dtrg-group th {
padding-top: 0.5em;
padding-bottom: 0.5em;
}
/* Fix textcolor on navbar focus */
@ -55,13 +22,6 @@ table.dataTable thead .sorting {
box-shadow: none !important;
}
/* Optional: Customize .focus-visible */
/*
.focus-visible {
outline-color: lightgreen;
}
*/
*:disabled {
cursor: not-allowed;
}

View File

@ -1,4 +0,0 @@
.btn-meetup {
background-color: #ed1c40;
color: white;
}

View File

@ -1,206 +0,0 @@
table.dataTable {
clear: both;
margin-top: 6px !important;
margin-bottom: 6px !important;
max-width: none !important;
border-collapse: separate !important;
border-spacing: 0;
}
table.dataTable td,
table.dataTable th {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
table.dataTable td.dataTables_empty,
table.dataTable th.dataTables_empty {
text-align: center;
}
table.dataTable.nowrap th,
table.dataTable.nowrap td {
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length label {
font-weight: normal;
text-align: left;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_length select {
width: auto;
display: inline-block;
}
div.dataTables_wrapper div.dataTables_filter {
text-align: right;
}
div.dataTables_wrapper div.dataTables_filter label {
font-weight: normal;
white-space: nowrap;
text-align: left;
}
div.dataTables_wrapper div.dataTables_filter input {
margin-left: 0.5em;
display: inline-block;
width: auto;
}
div.dataTables_wrapper div.dataTables_info {
padding-top: 0.85em;
white-space: nowrap;
}
div.dataTables_wrapper div.dataTables_paginate {
margin: 0;
white-space: nowrap;
text-align: right;
}
div.dataTables_wrapper div.dataTables_paginate ul.pagination {
margin: 2px 0;
white-space: nowrap;
justify-content: flex-end;
}
div.dataTables_wrapper div.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
margin-left: -100px;
margin-top: -26px;
text-align: center;
padding: 1em 0;
}
table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > td.sorting_asc,
table.dataTable thead > tr > td.sorting_desc,
table.dataTable thead > tr > td.sorting {
padding-right: 30px;
}
table.dataTable thead > tr > th:active,
table.dataTable thead > tr > td:active {
outline: none;
}
table.dataTable thead .sorting,
table.dataTable thead .sorting_asc,
table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled,
table.dataTable thead .sorting_desc_disabled {
cursor: pointer;
position: relative;
}
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
position: absolute;
bottom: 0.9em;
display: block;
opacity: 0.3;
}
table.dataTable thead .sorting:before,
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:before,
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:before {
right: 1em;
content: "\2191";
}
table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after,
table.dataTable thead .sorting_desc:after,
table.dataTable thead .sorting_asc_disabled:after,
table.dataTable thead .sorting_desc_disabled:after {
right: 0.5em;
content: "\2193";
}
table.dataTable thead .sorting_asc:before,
table.dataTable thead .sorting_desc:after {
opacity: 1;
}
table.dataTable thead .sorting_asc_disabled:before,
table.dataTable thead .sorting_desc_disabled:after {
opacity: 0;
}
div.dataTables_scrollHead table.dataTable {
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table {
border-top: none;
margin-top: 0 !important;
margin-bottom: 0 !important;
}
div.dataTables_scrollBody table thead .sorting:before,
div.dataTables_scrollBody table thead .sorting_asc:before,
div.dataTables_scrollBody table thead .sorting_desc:before,
div.dataTables_scrollBody table thead .sorting:after,
div.dataTables_scrollBody table thead .sorting_asc:after,
div.dataTables_scrollBody table thead .sorting_desc:after {
display: none;
}
div.dataTables_scrollBody table tbody tr:first-child th,
div.dataTables_scrollBody table tbody tr:first-child td {
border-top: none;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner {
box-sizing: content-box;
}
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table {
margin-top: 0 !important;
border-top: none;
}
@media screen and (max-width: 767px) {
div.dataTables_wrapper div.dataTables_length,
div.dataTables_wrapper div.dataTables_filter,
div.dataTables_wrapper div.dataTables_info,
div.dataTables_wrapper div.dataTables_paginate {
text-align: center;
}
}
table.dataTable.table-sm > thead > tr > th {
padding-right: 20px;
}
table.dataTable.table-sm .sorting:before,
table.dataTable.table-sm .sorting_asc:before,
table.dataTable.table-sm .sorting_desc:before {
top: 5px;
right: 0.85em;
}
table.dataTable.table-sm .sorting:after,
table.dataTable.table-sm .sorting_asc:after,
table.dataTable.table-sm .sorting_desc:after {
top: 5px;
}
table.table-bordered.dataTable th,
table.table-bordered.dataTable td {
border-left-width: 0;
}
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
table.table-bordered.dataTable td:last-child,
table.table-bordered.dataTable td:last-child {
border-right-width: 0;
}
table.table-bordered.dataTable tbody th,
table.table-bordered.dataTable tbody td {
border-bottom-width: 0;
}
div.dataTables_scrollHead table.table-bordered {
border-bottom-width: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row {
margin: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
padding-left: 0;
}
div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
padding-right: 0;
}

View File

@ -1,184 +0,0 @@
/*! DataTables Bootstrap 4 integration
* ©2011-2017 SpryMedia Ltd - datatables.net/license
*/
/**
* DataTables integration for Bootstrap 4. This requires Bootstrap 4 and
* DataTables 1.10 or newer.
*
* This file sets the defaults and adds options to DataTables to style its
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
* for further information.
*/
(function( factory ){
if ( typeof define === 'function' && define.amd ) {
// AMD
define( ['jquery', 'datatables.net'], function ( $ ) {
return factory( $, window, document );
} );
}
else if ( typeof exports === 'object' ) {
// CommonJS
module.exports = function (root, $) {
if ( ! root ) {
root = window;
}
if ( ! $ || ! $.fn.dataTable ) {
// Require DataTables, which attaches to jQuery, including
// jQuery if needed and have a $ property so we can access the
// jQuery object that is used
$ = require('datatables.net')(root, $).$;
}
return factory( $, root, root.document );
};
}
else {
// Browser
factory( jQuery, window, document );
}
}(function( $, window, document, undefined ) {
'use strict';
var DataTable = $.fn.dataTable;
/* Set the defaults for DataTables initialisation */
$.extend( true, DataTable.defaults, {
dom:
"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
renderer: 'bootstrap'
} );
/* Default class modification */
$.extend( DataTable.ext.classes, {
sWrapper: "dataTables_wrapper dt-bootstrap4",
sFilterInput: "form-control form-control-sm",
sLengthSelect: "custom-select custom-select-sm form-control form-control-sm",
sProcessing: "dataTables_processing card",
sPageButton: "paginate_button page-item"
} );
/* Bootstrap paging button renderer */
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
var api = new DataTable.Api( settings );
var classes = settings.oClasses;
var lang = settings.oLanguage.oPaginate;
var aria = settings.oLanguage.oAria.paginate || {};
var btnDisplay, btnClass, counter=0;
var attach = function( container, buttons ) {
var i, ien, node, button;
var clickHandler = function ( e ) {
e.preventDefault();
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
api.page( e.data.action ).draw( 'page' );
}
};
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
button = buttons[i];
if ( $.isArray( button ) ) {
attach( container, button );
}
else {
btnDisplay = '';
btnClass = '';
switch ( button ) {
case 'ellipsis':
btnDisplay = '&#x2026;';
btnClass = 'disabled';
break;
case 'first':
btnDisplay = lang.sFirst;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'previous':
btnDisplay = lang.sPrevious;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'next':
btnDisplay = lang.sNext;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
case 'last':
btnDisplay = lang.sLast;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
default:
btnDisplay = button + 1;
btnClass = page === button ?
'active' : '';
break;
}
if ( btnDisplay ) {
node = $('<li>', {
'class': classes.sPageButton+' '+btnClass,
'id': idx === 0 && typeof button === 'string' ?
settings.sTableId +'_'+ button :
null
} )
.append( $('<a>', {
'href': '#',
'aria-controls': settings.sTableId,
'aria-label': aria[ button ],
'data-dt-idx': counter,
'tabindex': settings.iTabIndex,
'class': 'page-link'
} )
.html( btnDisplay )
)
.appendTo( container );
settings.oApi._fnBindAction(
node, {action: button}, clickHandler
);
counter++;
}
}
}
};
// IE9 throws an 'unknown error' if document.activeElement is used
// inside an iframe or frame.
var activeEl;
try {
// Because this approach is destroying and recreating the paging
// elements, focus is lost on the select button which is bad for
// accessibility. So we want to restore focus once the draw has
// completed
activeEl = $(host).find(document.activeElement).data('dt-idx');
}
catch (e) {}
attach(
$(host).empty().html('<ul class="pagination"/>').children('ul'),
buttons
);
if ( activeEl !== undefined ) {
$(host).find( '[data-dt-idx='+activeEl+']' ).focus();
}
};
return DataTable;
}));

View File

@ -1,16 +1,16 @@
<div class="card card-dark">
<div class="card-header">
<div class="card-header p-2">
<h4 class="card-title">Accounts</h4>
</div>
<div class="card-body">
<div class="card-body p-2">
@if($x=$o->accounts_all->count())
<table class="table table-striped table-hover" id="accounts">
<table class="table table-sm table-striped table-hover" id="accounts">
<thead>
<tr>
<th>Profile</th>
<th style="width: 10%;">Profile</th>
<th>Name</th>
<th class="text-right">Services</th>
<th class="text-right" style="width: 10%;">Services</th>
</tr>
</thead>
<tbody>
@ -40,15 +40,13 @@
</div>
</div>
@section('page-styles')
@css(datatables,bootstrap4)
@append
@section('page-scripts')
@js(datatables,bootstrap4)
@pa(datatables,rowgroup|conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#accounts').DataTable({
conditionalPaging: true,
language: {
emptyTable: "No Active Clients"
},

View File

@ -1,16 +1,16 @@
<!-- $o=Account::class -->
<!-- Show outstanding invoices -->
<div class="card card-warning">
<div class="card-header">
<div class="card-header p-2">
<h3 class="card-title">Invoices Due</h3>
</div>
<div class="card-body">
<div class="card-body p-2">
@if(($list=$o->invoiceSummaryDue()->get())->count())
@include('theme.backend.adminlte.invoice.widget.due',['type'=>'account'])
@include('theme.backend.adminlte.invoice.widget.due',['type'=>'account','list'=>$list])
@else
<p>No invoice due</p>
<p>No invoices to list</p>
@endif
</div>
</div>

View File

@ -1,13 +1,13 @@
<!-- $o=Account::class -->
<!-- Show past 12 months invoices -->
<div class="card card-success">
<div class="card-header">
<div class="card-header p-2">
<h3 class="card-title">Past Invoices</h3>
</div>
<div class="card-body">
<div class="card-body p-2">
@if(($list=$o->invoiceSummaryPast()->where('invoices.created_at','>=',\Carbon\Carbon::now()->subYears(2)->startOfYear())->get())->count())
<table class="table table-bordered w-100" id="invoices_past_{{ $o->id }}">
<table class="table table-sm table-striped" id="invoices_past_{{ $o->id }}">
<thead>
<tr>
<th>Account</th>
@ -37,16 +37,14 @@
</div>
</div>
@section('page-styles')
@css(datatables,bootstrap4|rowgroup)
@append
@section('page-scripts')
@js(datatables,bootstrap4|rowgroup)
@pa(datatables,rowgroup|conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
@if($list->count())
$(document).ready(function() {
$('#invoices_past_{{ $o->id }}').DataTable({
conditionalPaging: true,
order: [[2,'desc'],[0,'asc']],
rowGroup: {
dataSrc: 0,

View File

@ -1,17 +1,15 @@
<!-- $o=Account::class -->
@php
$o->load(['services_active.invoiced_service_items_active_recent']);
@endphp
@php($o->load(['services_active.invoiced_service_items_active_recent']))
<!-- Show active services -->
<div class="card card-light">
<div class="card-header">
<div class="card-header p-2">
<h3 class="card-title">Active Services</h3>
</div>
<div class="card-body">
<div class="card-body p-2">
@if(($x=$o->services_active)->count())
<table class="table table-striped table-hover w-100" id="services_active_{{ $ao->id }}">
<table class="table table-sm table-striped table-hover" id="services_active_{{ $ao->id }}">
<thead>
<tr>
<th>ID</th>
@ -47,29 +45,29 @@
</div>
</div>
@section('page-styles')
@css(datatables,bootstrap4|rowgroup)
@append
@section('page-scripts')
@js(datatables,bootstrap4|rowgroup)
@pa(datatables,rowgroup|conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#services_active_{{ $ao->id }}').DataTable({
order: [[1,'asc'],[2,'asc']],
rowGroup: {
dataSrc: 1,
endRender: function ( rows, group ) {
return rows.count()+' x ' + group;
@if($x->count())
$('#services_active_{{ $ao->id }}').DataTable({
conditionalPaging: true,
order: [[1,'asc'],[2,'asc']],
rowGroup: {
dataSrc: 1,
endRender: function (rows,group) {
return rows.count()+' x '+group;
},
},
},
columnDefs: [
{
targets: [1],
visible: false,
},
],
});
columnDefs: [
{
targets: [1],
visible: false,
},
],
});
@endif
});
</script>
@append

View File

@ -1,57 +1,59 @@
<!-- Show outstanding invoices -->
<table class="table table-bordered w-100" id="invoices_credit_{{$type}}">
<thead>
<tr>
<th>Account</th>
<th>#</th>
<th>Due</th>
<th class="text-right">Items</th>
<th class="text-right">Discounts</th>
<th class="text-right">Total</th>
<th class="text-right">Payments</th>
<th class="text-right">Balance</th>
</tr>
</thead>
<tbody>
@foreach($list as $oo)
@if($list->count())
<table class="table table-bordered table-striped" id="invoices_credit_{{$type}}">
<thead>
<tr>
<td>{{ $oo->account->name }}</td>
<td><a href="{{ url('u/invoice',$oo->id) }}">{{ $oo->lid }}</a></td>
<td>{{ $oo->due_at->format('Y-m-d') }}</td>
<td class="text-right">${{ number_format($oo->_item+$oo->_tax,2) }}</td>
<td class="text-right">${{ number_format($oo->_discount,2) }}</td>
<td class="text-right">${{ number_format($oo->_total,2) }}</td>
<td class="text-right">${{ number_format($oo->_payment,2) }}</td>
<td class="text-right">${{ number_format($oo->_balance,2) }}</td>
<th>Account</th>
<th>#</th>
<th>Due</th>
<th class="text-right">Items</th>
<th class="text-right">Discounts</th>
<th class="text-right">Total</th>
<th class="text-right">Payments</th>
<th class="text-right">Balance</th>
</tr>
@endforeach
</tbody>
</table>
</thead>
<tbody>
@foreach($list as $oo)
<tr>
<td>{{ $oo->account->name }}</td>
<td><a href="{{ url('u/invoice',$oo->id) }}">{{ $oo->lid }}</a></td>
<td>{{ $oo->due_at->format('Y-m-d') }}</td>
<td class="text-right">${{ number_format($oo->_item+$oo->_tax,2) }}</td>
<td class="text-right">${{ number_format($oo->_discount,2) }}</td>
<td class="text-right">${{ number_format($oo->_total,2) }}</td>
<td class="text-right">${{ number_format($oo->_payment,2) }}</td>
<td class="text-right">${{ number_format($oo->_balance,2) }}</td>
</tr>
@endforeach
</tbody>
</table>
@else
<p>No invoices to list</p>
@endif
@pa(datatables,rowgroup|conditionalpaging)
@section('page-styles')
@css(datatables,bootstrap4|rowgroup)
@append
@section('page-scripts')
@js(datatables,bootstrap4|rowgroup)
<script type="text/javascript">
@if($list->count())
$(document).ready(function() {
$('#invoices_credit_{{$type}}').DataTable({
// If we have more than 1 account id, order by account
order: [[0,'asc'],[2,'asc'],[1,'desc']],
rowGroup: {
dataSrc: 0,
},
columnDefs: [
{
targets: [0],
visible: false,
}
],
$(document).ready(function() {
$('#invoices_credit_{{$type}}').DataTable({
conditionalPaging: true,
// If we have more than 1 account id, order by account
order: [[0,'asc'],[2,'asc'],[1,'desc']],
rowGroup: {
dataSrc: 0,
},
columnDefs: [
{
targets: [0],
visible: false,
}
],
});
});
});
@endif
</script>
@append

View File

@ -1,15 +1,16 @@
@use(App\Models\Account)
<!-- Show outstanding invoices for all clients -->
<div class="card card-warning">
<div class="card-header">
<div class="card-header p-2">
<h3 class="card-title">Invoices Due</h3>
</div>
<div class="card-body">
@if(($list=\App\Models\Account::InvoicesDue())->count())
@include('theme.backend.adminlte.invoice.widget.due',['type'=>'all'])
<div class="card-body p-2">
@if(($list=Account::InvoicesDue())->count())
@include('theme.backend.adminlte.invoice.widget.due',['type'=>'all','list'=>$list])
@else
<p>No invoice due</p>
<p>No invoices to list</p>
@endif
</div>
</div>

View File

@ -1,6 +1,6 @@
<!-- $list=Collection[Invoice::class] -->
<!-- Show outstanding invoices -->
<table class="table table-bordered w-100" id="invoices_due_{{$type}}">
<table class="table table-sm table-striped" id="invoices_due_{{$type}}">
<thead>
<tr>
<th>Account</th>
@ -24,29 +24,27 @@
</tbody>
</table>
@section('page-styles')
@css(datatables,bootstrap4|rowgroup)
@append
@section('page-scripts')
@js(datatables,bootstrap4|rowgroup)
@pa(datatables,rowgroup|conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
@if($list->count())
$(document).ready(function() {
$('#invoices_due_{{$type}}').DataTable({
// If we have more than 1 account id, order by account
order: [[0,'asc'],[2,'asc'],[1,'desc']],
rowGroup: {
dataSrc: 0,
},
columnDefs: [
{
targets: [0],
visible: false,
}
],
$(document).ready(function() {
$('#invoices_due_{{$type}}').DataTable({
conditionalPaging: true,
// If we have more than 1 account id, order by account
order: [[0,'asc'],[2,'asc'],[1,'desc']],
rowGroup: {
dataSrc: 0,
},
columnDefs: [
{
targets: [0],
visible: false,
}
],
});
});
});
@endif
</script>
@append

View File

@ -62,7 +62,7 @@
@endcan
</div>
<div class="card-body pt-2 pl-2 pr-2 pb-0">
<div class="card-body p-2">
<div class="tab-content">
@if($x=! ($o->suspend_billing || $o->external_billing))
<div @class(['tab-pane','fade','show active'=>! (session()->has('service_update') || session()->has('charge_add'))]) id="pending_items">

View File

@ -1,13 +1,13 @@
@use(App\Models\Service)
<!-- Show client movements -->
<div class="card card-dark">
<div class="card-header">
<div class="card-header p-2">
<h3 class="card-title">Service Movements</h3>
</div>
<div class="card-body">
<div class="card-body p-2">
@if(($x=Service::movements($user))->count())
<table class="table table-striped table-hover" id="service_movements">
<table class="table table-sm table-striped table-hover" id="service_movements">
<thead>
<tr>
<th>ID</th>
@ -56,15 +56,13 @@
</div>
</div>
@section('page-styles')
@css(datatables,bootstrap4|rowgroup)
@append
@section('page-scripts')
@js(datatables,bootstrap4|rowgroup)
@pa(datatables,rowgroup|conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#service_movements').DataTable( {
$('#service_movements').DataTable({
conditionalPaging: true,
order: [3, 'asc'],
rowGroup: {
dataSrc: 1,

View File

@ -1,5 +1,5 @@
<!-- $o=Service::class -->
<table class="table table-sm" id="svc_bill_hist">
<table class="table table-sm table-striped" id="svc_bill_hist">
<thead>
<tr>
<th>Invoice</th>
@ -25,15 +25,13 @@
</tbody>
</table>
@section('page-styles')
@css(datatables,bootstrap4)
@append
@section('page-scripts')
@js(datatables,bootstrap4)
@pa(datatables,conditionalpaging)
@section('page-scripts')
<script type="text/javascript">
$(document).ready(function() {
$('#svc_bill_hist').DataTable({
conditionalPaging: true,
language: {
emptyTable: "No Invoices"
},

View File

@ -1,24 +1,32 @@
@use(App\Models\Account)
<div class="row">
<div class="col-4">
<div class="col-12 col-md-4">
@include('theme.backend.adminlte.account.widget.admin.list')
</div>
<div class="col-8">
<div class="col-12 col-md-8">
@include('theme.backend.adminlte.service.widget.admin.movement')
@include('theme.backend.adminlte.invoice.widget.admin.due')
@can('wholesaler')
<!-- Show outstanding invoices for all clients -->
<div class="card card-secondary">
<div class="card-header">
<h3 class="card-title">Invoices In Credit</h3>
</div>
<div class="card-body">
@include('theme.backend.adminlte.invoice.widget.admin.credit',['list'=>\App\Models\Account::InvoicesCredit(),'type'=>'account'])
</div>
<div class="row">
<div class="col-12 col-xl-6">
@include('theme.backend.adminlte.invoice.widget.admin.due')
</div>
@endcan
<div class="col-12 col-xl-6">
@can('wholesaler')
<!-- Show outstanding invoices for all clients -->
<div class="card card-secondary">
<div class="card-header p-2">
<h3 class="card-title">Invoices In Credit</h3>
</div>
<div class="card-body p-2">
@include('theme.backend.adminlte.invoice.widget.admin.credit',['list'=>Account::InvoicesCredit(),'type'=>'account'])
</div>
</div>
@endcan
</div>
</div>
</div>
</div>