diff --git a/composer.lock b/composer.lock
index 9785bd2..09ddabd 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1054,16 +1054,16 @@
},
{
"name": "laravel/framework",
- "version": "v12.37.0",
+ "version": "v12.38.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "3c3c4ad30f5b528b164a7c09aa4ad03118c4c125"
+ "reference": "7f3012af6059f5f64a12930701cd8caed6cf7c17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/3c3c4ad30f5b528b164a7c09aa4ad03118c4c125",
- "reference": "3c3c4ad30f5b528b164a7c09aa4ad03118c4c125",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/7f3012af6059f5f64a12930701cd8caed6cf7c17",
+ "reference": "7f3012af6059f5f64a12930701cd8caed6cf7c17",
"shasum": ""
},
"require": {
@@ -1181,7 +1181,7 @@
"phpstan/phpstan": "^2.0",
"phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1",
"predis/predis": "^2.3|^3.0",
- "resend/resend-php": "^0.10.0",
+ "resend/resend-php": "^0.10.0|^1.0",
"symfony/cache": "^7.2.0",
"symfony/http-client": "^7.2.0",
"symfony/psr-http-message-bridge": "^7.2.0",
@@ -1215,7 +1215,7 @@
"predis/predis": "Required to use the predis connector (^2.3|^3.0).",
"psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).",
- "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).",
+ "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0|^1.0).",
"symfony/cache": "Required to PSR-6 cache bridge (^7.2).",
"symfony/filesystem": "Required to enable support for relative symbolic links (^7.2).",
"symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.2).",
@@ -1269,7 +1269,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-11-04T15:39:33+00:00"
+ "time": "2025-11-13T02:12:47+00:00"
},
{
"name": "laravel/prompts",
@@ -1721,16 +1721,16 @@
},
{
"name": "league/flysystem",
- "version": "3.30.1",
+ "version": "3.30.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "c139fd65c1f796b926f4aec0df37f6caa959a8da"
+ "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c139fd65c1f796b926f4aec0df37f6caa959a8da",
- "reference": "c139fd65c1f796b926f4aec0df37f6caa959a8da",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
+ "reference": "5966a8ba23e62bdb518dd9e0e665c2dbd4b5b277",
"shasum": ""
},
"require": {
@@ -1798,22 +1798,22 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.30.1"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.30.2"
},
- "time": "2025-10-20T15:35:26+00:00"
+ "time": "2025-11-10T17:13:11+00:00"
},
{
"name": "league/flysystem-local",
- "version": "3.30.0",
+ "version": "3.30.2",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10"
+ "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10",
- "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/ab4f9d0d672f601b102936aa728801dd1a11968d",
+ "reference": "ab4f9d0d672f601b102936aa728801dd1a11968d",
"shasum": ""
},
"require": {
@@ -1847,9 +1847,9 @@
"local"
],
"support": {
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.2"
},
- "time": "2025-05-21T10:34:19+00:00"
+ "time": "2025-11-10T11:23:37+00:00"
},
{
"name": "league/mime-type-detection",
@@ -3946,16 +3946,16 @@
},
{
"name": "symfony/console",
- "version": "v7.3.5",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7"
+ "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
- "reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
+ "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
"shasum": ""
},
"require": {
@@ -4020,7 +4020,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.5"
+ "source": "https://github.com/symfony/console/tree/v7.3.6"
},
"funding": [
{
@@ -4040,20 +4040,20 @@
"type": "tidelift"
}
],
- "time": "2025-10-14T15:46:26+00:00"
+ "time": "2025-11-04T01:21:42+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v7.3.0",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2"
+ "reference": "84321188c4754e64273b46b406081ad9b18e8614"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2",
- "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/84321188c4754e64273b46b406081ad9b18e8614",
+ "reference": "84321188c4754e64273b46b406081ad9b18e8614",
"shasum": ""
},
"require": {
@@ -4089,7 +4089,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v7.3.0"
+ "source": "https://github.com/symfony/css-selector/tree/v7.3.6"
},
"funding": [
{
@@ -4100,12 +4100,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-25T14:21:43+00:00"
+ "time": "2025-10-29T17:24:25+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -4176,16 +4180,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v7.3.4",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4"
+ "reference": "bbe40bfab84323d99dab491b716ff142410a92a8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
- "reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/bbe40bfab84323d99dab491b716ff142410a92a8",
+ "reference": "bbe40bfab84323d99dab491b716ff142410a92a8",
"shasum": ""
},
"require": {
@@ -4233,7 +4237,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.3.4"
+ "source": "https://github.com/symfony/error-handler/tree/v7.3.6"
},
"funding": [
{
@@ -4253,7 +4257,7 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-10-31T19:12:50+00:00"
},
{
"name": "symfony/event-dispatcher",
@@ -4485,16 +4489,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v7.3.5",
+ "version": "v7.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "ce31218c7cac92eab280762c4375fb70a6f4f897"
+ "reference": "db488a62f98f7a81d5746f05eea63a74e55bb7c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce31218c7cac92eab280762c4375fb70a6f4f897",
- "reference": "ce31218c7cac92eab280762c4375fb70a6f4f897",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/db488a62f98f7a81d5746f05eea63a74e55bb7c4",
+ "reference": "db488a62f98f7a81d5746f05eea63a74e55bb7c4",
"shasum": ""
},
"require": {
@@ -4544,7 +4548,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.3.5"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.3.7"
},
"funding": [
{
@@ -4564,20 +4568,20 @@
"type": "tidelift"
}
],
- "time": "2025-10-24T21:42:11+00:00"
+ "time": "2025-11-08T16:41:12+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.3.5",
+ "version": "v7.3.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab"
+ "reference": "10b8e9b748ea95fa4539c208e2487c435d3c87ce"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/24fd3f123532e26025f49f1abefcc01a69ef15ab",
- "reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/10b8e9b748ea95fa4539c208e2487c435d3c87ce",
+ "reference": "10b8e9b748ea95fa4539c208e2487c435d3c87ce",
"shasum": ""
},
"require": {
@@ -4662,7 +4666,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.3.5"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.3.7"
},
"funding": [
{
@@ -4682,7 +4686,7 @@
"type": "tidelift"
}
],
- "time": "2025-10-28T10:19:01+00:00"
+ "time": "2025-11-12T11:38:40+00:00"
},
{
"name": "symfony/mailer",
@@ -5820,16 +5824,16 @@
},
{
"name": "symfony/routing",
- "version": "v7.3.4",
+ "version": "v7.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c"
+ "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c",
- "reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/c97abe725f2a1a858deca629a6488c8fc20c3091",
+ "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091",
"shasum": ""
},
"require": {
@@ -5881,7 +5885,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.3.4"
+ "source": "https://github.com/symfony/routing/tree/v7.3.6"
},
"funding": [
{
@@ -5901,20 +5905,20 @@
"type": "tidelift"
}
],
- "time": "2025-09-11T10:12:26+00:00"
+ "time": "2025-11-05T07:57:47+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v3.6.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4"
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
- "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
+ "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": ""
},
"require": {
@@ -5968,7 +5972,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -5979,12 +5983,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-25T09:37:31+00:00"
+ "time": "2025-07-15T11:30:57+00:00"
},
{
"name": "symfony/string",
@@ -6178,16 +6186,16 @@
},
{
"name": "symfony/translation-contracts",
- "version": "v3.6.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d"
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
- "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
+ "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
"shasum": ""
},
"require": {
@@ -6236,7 +6244,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0"
+ "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
},
"funding": [
{
@@ -6247,12 +6255,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-27T08:32:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/uid",
@@ -6962,16 +6974,16 @@
},
{
"name": "laravel/sail",
- "version": "v1.47.0",
+ "version": "v1.48.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "9a11e822238167ad8b791e4ea51155d25cf4d8f2"
+ "reference": "1bf3b8870b72a258a3b6b5119435835ece522e8a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/9a11e822238167ad8b791e4ea51155d25cf4d8f2",
- "reference": "9a11e822238167ad8b791e4ea51155d25cf4d8f2",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/1bf3b8870b72a258a3b6b5119435835ece522e8a",
+ "reference": "1bf3b8870b72a258a3b6b5119435835ece522e8a",
"shasum": ""
},
"require": {
@@ -7021,7 +7033,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2025-10-28T13:55:29+00:00"
+ "time": "2025-11-09T14:46:21+00:00"
},
{
"name": "mockery/mockery",
@@ -7660,16 +7672,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.43",
+ "version": "11.5.44",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924"
+ "reference": "c346885c95423eda3f65d85a194aaa24873cda82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924",
- "reference": "c6b89b6cf4324a8b4cb86e1f5dfdd6c9e0371924",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82",
+ "reference": "c346885c95423eda3f65d85a194aaa24873cda82",
"shasum": ""
},
"require": {
@@ -7741,7 +7753,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.43"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44"
},
"funding": [
{
@@ -7765,7 +7777,7 @@
"type": "tidelift"
}
],
- "time": "2025-10-30T08:39:39+00:00"
+ "time": "2025-11-13T07:17:35+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -8883,16 +8895,16 @@
},
{
"name": "theseer/tokenizer",
- "version": "1.2.3",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ "reference": "d74205c497bfbca49f34d4bc4c19c17e22db4ebb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
- "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/d74205c497bfbca49f34d4bc4c19c17e22db4ebb",
+ "reference": "d74205c497bfbca49f34d4bc4c19c17e22db4ebb",
"shasum": ""
},
"require": {
@@ -8921,7 +8933,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ "source": "https://github.com/theseer/tokenizer/tree/1.3.0"
},
"funding": [
{
@@ -8929,7 +8941,7 @@
"type": "github"
}
],
- "time": "2024-03-03T12:36:25+00:00"
+ "time": "2025-11-13T13:44:09+00:00"
}
],
"aliases": [],
diff --git a/public/index.php b/public/index.php
index fce2da7..081394f 100644
--- a/public/index.php
+++ b/public/index.php
@@ -18,3 +18,4 @@ require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$app->handleRequest(Request::capture());
+
diff --git a/public/invoices/invoice-INV-2025-000001.pdf b/public/invoices/invoice-INV-2025-000001.pdf
new file mode 100644
index 0000000..6e98cc4
Binary files /dev/null and b/public/invoices/invoice-INV-2025-000001.pdf differ
diff --git a/public/invoices/invoice-INV-2025-000002.pdf b/public/invoices/invoice-INV-2025-000002.pdf
index 841155b..dde03a9 100644
Binary files a/public/invoices/invoice-INV-2025-000002.pdf and b/public/invoices/invoice-INV-2025-000002.pdf differ
diff --git a/public/invoices/invoice-INV-2025-000003.pdf b/public/invoices/invoice-INV-2025-000003.pdf
index b54a6e8..e17839c 100644
Binary files a/public/invoices/invoice-INV-2025-000003.pdf and b/public/invoices/invoice-INV-2025-000003.pdf differ
diff --git a/public/invoices/invoice-INV-2025-000004.pdf b/public/invoices/invoice-INV-2025-000004.pdf
new file mode 100644
index 0000000..a443c78
Binary files /dev/null and b/public/invoices/invoice-INV-2025-000004.pdf differ
diff --git a/resources/views/admin/dashboard.blade.php b/resources/views/admin/dashboard.blade.php
index 68d1dad..9f066d1 100644
--- a/resources/views/admin/dashboard.blade.php
+++ b/resources/views/admin/dashboard.blade.php
@@ -506,20 +506,6 @@ body, .container-fluid { background: #f4f7fc; }
letter-spacing: 0.5px;
}
-#orderDetailsBody {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- text-align: center;
-}
-
-#orderDetailsBody > * {
- width: 100%;
- max-width: 100%;
-}
-
-
.status-pending { background: #fff3cd; color: #856404; }
.status-completed { background: #d1edff; color: #0c5460; }
.status-processing { background: #d4edda; color: #155724; }
@@ -669,6 +655,65 @@ body, .container-fluid { background: #f4f7fc; }
}
}
+/* NEW: Sticky customer info header for order details */
+.sticky-customer-header {
+ position: sticky;
+ top: 0;
+ background: white;
+ z-index: 100;
+ padding: 20px;
+ border-radius: 12px;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
+ margin-bottom: 20px;
+ border-left: 5px solid #667eea;
+}
+
+.customer-info-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 15px;
+}
+
+.customer-info-item {
+ display: flex;
+ flex-direction: column;
+}
+
+.customer-info-label {
+ font-size: 0.8rem;
+ color: #6c757d;
+ font-weight: 600;
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ margin-bottom: 4px;
+}
+
+.customer-info-value {
+ font-size: 1rem;
+ font-weight: 600;
+ color: #2c3e50;
+ word-break: break-word;
+}
+
+/* Scrollable table container */
+.scrollable-table-container {
+ max-height: 400px;
+ overflow-y: auto;
+ border: 1px solid #e9ecef;
+ border-radius: 12px;
+ margin-top: 20px;
+}
+
+.scrollable-table-container .modern-table {
+ margin-bottom: 0;
+}
+
+.scrollable-table-container .modern-table thead th {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+}
+
@@ -1082,6 +1127,8 @@ document.addEventListener('DOMContentLoaded', function () {
});
});
+
+
diff --git a/resources/views/admin/invoice.blade.php b/resources/views/admin/invoice.blade.php
index 5aec478..85f36a6 100644
--- a/resources/views/admin/invoice.blade.php
+++ b/resources/views/admin/invoice.blade.php
@@ -3,108 +3,878 @@
@section('page-title', 'Invoice List')
@section('content')
+
+
+
+
+
+
+
+ Invoice Management
+
+
+
+
+
+
+
+
+
+
+
{{ $invoices->count() }}
+
Total Invoices
+
+
+
₹{{ number_format($invoices->sum('final_amount_with_gst'), 2) }}
+
Total Revenue
+
+
+
{{ $invoices->where('status', 'paid')->count() }}
+
Paid Invoices
+
+
+
{{ $invoices->where('status', 'pending')->count() }}
+
Pending Invoices
+
+
+
+
+
+
+
+
+
+
+
+
+ | # |
+ Invoice Number |
+ Customer |
+ Final Amount |
+ GST % |
+ Total w/GST |
+ Status |
+ Invoice Date |
+ Due Date |
+ Action |
+
+
+
+
+ @php
+ $totalInvoices = $invoices->count();
+ $sortedInvoices = $invoices->sortByDesc('created_at'); // Latest first
+ @endphp
+
+ @forelse($sortedInvoices as $i => $invoice)
+
+ | {{ $totalInvoices - $i }} |
- |
- {{ $invoice->customer_name }} |
+ {{ $invoice->customer_name }} |
- ₹{{ number_format($invoice->final_amount, 2) }} |
- {{ $invoice->gst_percent }}% |
- ₹{{ number_format($invoice->final_amount_with_gst, 2) }} |
+ ₹{{ number_format($invoice->final_amount, 2) }} |
+ {{ $invoice->gst_percent }}% |
+ ₹{{ number_format($invoice->final_amount_with_gst, 2) }} |
-
- {{ ucfirst($invoice->status) }}
-
+
+ {{ ucfirst($invoice->status) }}
+
|
- {{ $invoice->invoice_date }} |
- {{ $invoice->due_date }} |
+ {{ $invoice->invoice_date }} |
+ {{ $invoice->due_date }} |
-
- Edit
-
+
+ Edit
+
|
-
- @endforeach
-
-
+
+ @empty
+
+ | No invoices found |
+
+ @endforelse
+
+
+
+
+
+
{{-- POPUP MODAL --}}
-@endsection
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/invoice_edit.blade.php b/resources/views/admin/invoice_edit.blade.php
index 837273d..8f11fc9 100644
--- a/resources/views/admin/invoice_edit.blade.php
+++ b/resources/views/admin/invoice_edit.blade.php
@@ -3,6 +3,357 @@
@section('page-title', 'Edit Invoice')
@section('content')
+
-@endsection
+
+
+@endsection
\ No newline at end of file
diff --git a/resources/views/admin/layouts/app.blade.php b/resources/views/admin/layouts/app.blade.php
index 3f0752b..87b276c 100644
--- a/resources/views/admin/layouts/app.blade.php
+++ b/resources/views/admin/layouts/app.blade.php
@@ -5,6 +5,8 @@
Admin Panel
+
+
-
-
-
Invoice No: {{ $invoice->invoice_number }}
@@ -102,7 +139,6 @@
Due Date: {{ $invoice->due_date }}
Status: {{ ucfirst($invoice->status) }}
-
Customer Details
@@ -112,10 +148,8 @@
{{ $invoice->customer_email }}
{{ $invoice->customer_address }}
-
Invoice Items
-
@@ -134,7 +168,6 @@
| Shop No |
-
@foreach($invoice->items as $i => $item)
@@ -155,15 +188,12 @@
@endforeach
-
Totals
-
Amount: ₹{{ number_format($invoice->final_amount, 2) }}
GST ({{ $invoice->gst_percent }}%): ₹{{ number_format($invoice->gst_amount, 2) }}
Total With GST: ₹{{ number_format($invoice->final_amount_with_gst, 2) }}
-