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 + +
+ + +
+ + + + +
+ + + + + +
+ + + + Create Invoice + +
+ +
+ +
+
+
{{ $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
+
+
+ + +
+
+

All Invoices

+ + {{ $invoices->count() }} invoices + +
+ +
+
+ + + + + + + + + + + + + + + + + + @php + $totalInvoices = $invoices->count(); + $sortedInvoices = $invoices->sortByDesc('created_at'); // Latest first + @endphp + + @forelse($sortedInvoices as $i => $invoice) + + - + - - - + + + - - + + - - @endforeach - -
#Invoice NumberCustomerFinal AmountGST %Total w/GSTStatusInvoice DateDue DateAction
{{ $totalInvoices - $i }} - - {{ $invoice->invoice_number }} + {{ $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 +
+ + @empty + + No invoices found + + @endforelse + + +
+
+
+
{{-- POPUP MODAL --}} -@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 + + - -
- - - - +
KENT LOGISTICS
Official Invoice
-
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 @@ - @foreach($invoice->items as $i => $item) @@ -155,15 +188,12 @@ @endforeach
Shop No
-
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) }}
- diff --git a/resources/views/admin/popup_invoice.blade.php b/resources/views/admin/popup_invoice.blade.php index 03c8da1..4441a79 100644 --- a/resources/views/admin/popup_invoice.blade.php +++ b/resources/views/admin/popup_invoice.blade.php @@ -1,73 +1,207 @@ -
-

- Invoice: {{ $invoice->invoice_number }} -

- -

Invoice Date: {{ $invoice->invoice_date }}

-

Due Date: {{ $invoice->due_date }}

- -
- -
Customer Details
-

- {{ $invoice->customer_name }}
- {{ $invoice->company_name }}
- {{ $invoice->customer_mobile }}
- {{ $invoice->customer_email }}
- {{ $invoice->customer_address }} -

- -
- -
Invoice Items
-
- - - - - - - - - - - - - - - - - - - - - @foreach($invoice->items as $i => $item) - - - - - - - - - - - - - - - - @endforeach - -
#DescriptionCTNQTYTTL/QTYUnitPriceTTL AmountCBMTTL CBMKGTTL KGShop No
{{ $i+1 }}{{ $item->description }}{{ $item->ctn }}{{ $item->qty }}{{ $item->ttl_qty }}{{ $item->unit }}{{ number_format($item->price,2) }}{{ number_format($item->ttl_amount,2) }}{{ $item->cbm }}{{ $item->ttl_cbm }}{{ $item->kg }}{{ $item->ttl_kg }}{{ $item->shop_no }}
+
+ +
+
+

+ INVOICE +

+

{{ $invoice->invoice_number }}

+
+
+
+ + + {{ ucfirst($invoice->status) }} + +
+
-
+ +
+
+
+
+
+
+
+
INVOICE DATE
+
+
+ {{ \Carbon\Carbon::parse($invoice->invoice_date)->format('M d, Y') }} +
+
+
+
+ +
+
+
+
+
DUE DATE
+
+
+ {{ \Carbon\Carbon::parse($invoice->due_date)->format('M d, Y') }} +
+
+
+
+
+
+
-
Final Summary
-

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) }}

+ +
+
+
+
+
+ Customer Details +
+
+
+
+
+
{{ $invoice->customer_name }}
+ @if($invoice->company_name) +

+ Company: {{ $invoice->company_name }} +

+ @endif +

+ Mobile: {{ $invoice->customer_mobile }} +

+

+ Email: {{ $invoice->customer_email }} +

+
+
+

+ Address:
+ {{ $invoice->customer_address }} +

+
+
+
+
+
+
-

Status: {{ ucfirst($invoice->status) }}

+ +
+
+
+
+
+ Invoice Items +
+
+
+
+ + + + + + + + + + + + + + + + + + + + @foreach($invoice->items as $i => $item) + + + + + + + + + + + + + + + + @endforeach + +
#DescriptionCTNQTYTTL/QTYUnitPriceTTL AmountCBMTTL CBMKGTTL KGShop No
{{ $i+1 }}{{ $item->description }}{{ $item->ctn }}{{ $item->qty }}{{ $item->ttl_qty }}{{ $item->unit }}₹{{ number_format($item->price,2) }}₹{{ number_format($item->ttl_amount,2) }}{{ $item->cbm }}{{ $item->ttl_cbm }}{{ $item->kg }}{{ $item->ttl_kg }} + {{ $item->shop_no }} +
+
+
+
+
+
+ + +
+
+
+
+
+ Final Summary +
+
+
+
+ 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) }} +
+
+
+
+
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 2c24096..2d796e4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -113,6 +113,10 @@ Route::prefix('admin')->middleware('auth:admin')->group(function () { Route::post('/invoices/{id}/update', [AdminInvoiceController::class, 'update']) ->name('admin.invoices.update'); + //Add New Invoice + Route::get('/admin/invoices/create', [InvoiceController::class, 'create'])->name('admin.invoices.create'); + + });