diff --git a/app/Exports/BuyContractsSheet.php b/app/Exports/BuyContractsSheet.php
new file mode 100644
index 0000000..9f4e9fe
--- /dev/null
+++ b/app/Exports/BuyContractsSheet.php
@@ -0,0 +1,46 @@
+whereYear('date', '=', $this->year)->orderBy('date', 'asc');
+ }
+
+ public function headings(): array
+ {
+ return [
+ ['Kaufverträge ' . $this->year],
+ [
+ 'Datum',
+ 'Auto',
+ 'Stammnummer',
+ 'Verkäufer',
+ 'Betrag',
+ ]
+ ];
+ }
+
+ public function map($contract): array
+ {
+ return [
+ $contract->date_formatted,
+ $contract->car->name,
+ $contract->car->stammnummer,
+ $contract->contact->full_title,
+ $contract->price,
+ ];
+ }
+
+ public function title(): string
+ {
+ return 'Ankaufverträge';
+ }
+}
diff --git a/app/Exports/ContractsExport.php b/app/Exports/ContractsExport.php
new file mode 100644
index 0000000..1e63051
--- /dev/null
+++ b/app/Exports/ContractsExport.php
@@ -0,0 +1,32 @@
+year = $year;
+ }
+
+ public function sheets(): array
+ {
+ $sheets = [];
+
+ $sheets[] = new ContractsSheet($this->year);
+ $sheets[] = new BuyContractsSheet($this->year);
+ $sheets[] = new SellContractsSheet($this->year);
+
+ return $sheets;
+ }
+
+ public function collection()
+ {
+ return Contract::whereYear('date', '=', $this->year)->orderBy('date', 'asc')->get();
+ }
+}
diff --git a/app/Exports/ContractsSheet.php b/app/Exports/ContractsSheet.php
new file mode 100644
index 0000000..7da75cf
--- /dev/null
+++ b/app/Exports/ContractsSheet.php
@@ -0,0 +1,70 @@
+year = $year;
+ }
+
+ public function query()
+ {
+ return Contract::whereYear('date', '=', $this->year)->orderBy('date', 'asc');
+ }
+
+ public function headings(): array
+ {
+ return [
+ ['Alle Verträge ' . $this->year],
+ [
+ 'Datum',
+ 'Vertragsart',
+ 'Auto',
+ 'Stammnummer',
+ 'Kontakt',
+ 'Betrag',
+ ]
+ ];
+ }
+
+ public function map($contract): array
+ {
+ return [
+ $contract->date_formatted,
+ $contract->type_formatted,
+ $contract->car->name,
+ $contract->car->stammnummer,
+ $contract->contact->full_title,
+ $contract->price,
+ ];
+ }
+
+ public function title(): string
+ {
+ return 'Alle Verträge';
+ }
+
+ public function styles(Worksheet $sheet)
+ {
+ return [
+ 1 => ['font' => ['bold' => true]],
+ 2 => ['font' => ['bold' => true]],
+ ];
+ }
+}
diff --git a/app/Exports/SellContractsSheet.php b/app/Exports/SellContractsSheet.php
new file mode 100644
index 0000000..f8f8b58
--- /dev/null
+++ b/app/Exports/SellContractsSheet.php
@@ -0,0 +1,60 @@
+whereYear('date', '=', $this->year)->orderBy('date', 'asc');
+ }
+
+ public function headings(): array
+ {
+ return [
+ ['Verkaufverträge ' . $this->year],
+ [
+ 'Datum',
+ 'Auto',
+ 'Stammnummer',
+ 'Käufer',
+ 'Versicherung',
+ 'Betrag',
+ 'Eingezahlt',
+ 'Noch offen'
+ ]
+ ];
+ }
+
+ public function map($contract): array
+ {
+ return [
+ $contract->date_formatted,
+ $contract->car->name,
+ $contract->car->stammnummer,
+ $contract->contact->full_title,
+ $contract->insurance_type_formatted,
+ $contract->price,
+ $contract->paid,
+ $contract->left_to_pay,
+ ];
+ }
+
+ public function title(): string
+ {
+ return 'Verkaufverträge';
+ }
+
+ public static function afterSheet(AfterSheet $event)
+ {
+ $event->sheet->appendRows([
+ [null, null, null, null, 'Total', 1112, 100, 1002],
+ ], $event);
+ }
+}
diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php
new file mode 100644
index 0000000..4fda089
--- /dev/null
+++ b/app/Http/Controllers/ReportController.php
@@ -0,0 +1,35 @@
+ (int)date('Y'), 'years' => array_reverse(range((int)date('Y') - 20, (int)date('Y')))]);
+ }
+
+ private function getYearsArray($start)
+ {
+ $currentYear = (int)date('Y');
+ $years = [$currentYear];
+ if ($start < $currentYear) {
+ for ($y = $start; $y < $currentYear; $y++) {
+ $years[] = $y;
+ }
+ }
+ }
+
+ public function print(Request $request)
+ {
+ $year = (int)$request->get('year');
+ return Excel::download(new ContractsExport($year), 'Jahresbericht-' . $year .'.xlsx');
+ }
+}
diff --git a/composer.json b/composer.json
index 68a2705..9f07cad 100644
--- a/composer.json
+++ b/composer.json
@@ -17,6 +17,7 @@
"laravel/jetstream": "^2.3",
"laravel/sanctum": "^2.6",
"laravel/tinker": "^2.5",
+ "maatwebsite/excel": "^3.1",
"tightenco/ziggy": "^1.0"
},
"require-dev": {
diff --git a/composer.lock b/composer.lock
index 4156c46..3237edb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "4b694bcd9a3adeb9f6db9daf3a690b6c",
+ "content-hash": "b9efbfc95a4076dd674cb6de8d0aae31",
"packages": [
{
"name": "asm89/stack-cors",
@@ -810,6 +810,60 @@
],
"time": "2020-12-29T14:50:06+00:00"
},
+ {
+ "name": "ezyang/htmlpurifier",
+ "version": "v4.13.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ezyang/htmlpurifier.git",
+ "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
+ "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2"
+ },
+ "require-dev": {
+ "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "HTMLPurifier": "library/"
+ },
+ "files": [
+ "library/HTMLPurifier.composer.php"
+ ],
+ "exclude-from-classmap": [
+ "/library/HTMLPurifier/Language/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-2.1-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Edward Z. Yang",
+ "email": "admin@htmlpurifier.org",
+ "homepage": "http://ezyang.com"
+ }
+ ],
+ "description": "Standards compliant HTML filter written in PHP",
+ "homepage": "http://htmlpurifier.org/",
+ "keywords": [
+ "html"
+ ],
+ "support": {
+ "issues": "https://github.com/ezyang/htmlpurifier/issues",
+ "source": "https://github.com/ezyang/htmlpurifier/tree/master"
+ },
+ "time": "2020-06-29T00:56:53+00:00"
+ },
{
"name": "fideloper/proxy",
"version": "4.4.1",
@@ -2370,6 +2424,324 @@
],
"time": "2021-01-18T20:58:21+00:00"
},
+ {
+ "name": "maatwebsite/excel",
+ "version": "3.1.31",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Maatwebsite/Laravel-Excel.git",
+ "reference": "cbe6370af70f93bd017f77ef92d32bd492a47fcb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/cbe6370af70f93bd017f77ef92d32bd492a47fcb",
+ "reference": "cbe6370af70f93bd017f77ef92d32bd492a47fcb",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "illuminate/support": "5.8.*|^6.0|^7.0|^8.0",
+ "php": "^7.0|^8.0",
+ "phpoffice/phpspreadsheet": "^1.18"
+ },
+ "require-dev": {
+ "orchestra/testbench": "^6.0",
+ "predis/predis": "^1.1"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Maatwebsite\\Excel\\ExcelServiceProvider"
+ ],
+ "aliases": {
+ "Excel": "Maatwebsite\\Excel\\Facades\\Excel"
+ }
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Maatwebsite\\Excel\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Patrick Brouwers",
+ "email": "patrick@maatwebsite.nl"
+ }
+ ],
+ "description": "Supercharged Excel exports and imports in Laravel",
+ "keywords": [
+ "PHPExcel",
+ "batch",
+ "csv",
+ "excel",
+ "export",
+ "import",
+ "laravel",
+ "php",
+ "phpspreadsheet"
+ ],
+ "support": {
+ "issues": "https://github.com/Maatwebsite/Laravel-Excel/issues",
+ "source": "https://github.com/Maatwebsite/Laravel-Excel/tree/3.1.31"
+ },
+ "funding": [
+ {
+ "url": "https://laravel-excel.com/commercial-support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/patrickbrouwers",
+ "type": "github"
+ }
+ ],
+ "time": "2021-06-02T17:31:29+00:00"
+ },
+ {
+ "name": "maennchen/zipstream-php",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/maennchen/ZipStream-PHP.git",
+ "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58",
+ "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58",
+ "shasum": ""
+ },
+ "require": {
+ "myclabs/php-enum": "^1.5",
+ "php": ">= 7.1",
+ "psr/http-message": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "require-dev": {
+ "ext-zip": "*",
+ "guzzlehttp/guzzle": ">= 6.3",
+ "mikey179/vfsstream": "^1.6",
+ "phpunit/phpunit": ">= 7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ZipStream\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paul Duncan",
+ "email": "pabs@pablotron.org"
+ },
+ {
+ "name": "Jonatan Männchen",
+ "email": "jonatan@maennchen.ch"
+ },
+ {
+ "name": "Jesse Donat",
+ "email": "donatj@gmail.com"
+ },
+ {
+ "name": "András Kolesár",
+ "email": "kolesar@kolesar.hu"
+ }
+ ],
+ "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.",
+ "keywords": [
+ "stream",
+ "zip"
+ ],
+ "support": {
+ "issues": "https://github.com/maennchen/ZipStream-PHP/issues",
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/master"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/zipstream",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2020-05-30T13:11:16+00:00"
+ },
+ {
+ "name": "markbaker/complex",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPComplex.git",
+ "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/6f724d7e04606fd8adaa4e3bb381c3e9db09c946",
+ "reference": "6f724d7e04606fd8adaa4e3bb381c3e9db09c946",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Complex\\": "classes/src/"
+ },
+ "files": [
+ "classes/src/functions/abs.php",
+ "classes/src/functions/acos.php",
+ "classes/src/functions/acosh.php",
+ "classes/src/functions/acot.php",
+ "classes/src/functions/acoth.php",
+ "classes/src/functions/acsc.php",
+ "classes/src/functions/acsch.php",
+ "classes/src/functions/argument.php",
+ "classes/src/functions/asec.php",
+ "classes/src/functions/asech.php",
+ "classes/src/functions/asin.php",
+ "classes/src/functions/asinh.php",
+ "classes/src/functions/atan.php",
+ "classes/src/functions/atanh.php",
+ "classes/src/functions/conjugate.php",
+ "classes/src/functions/cos.php",
+ "classes/src/functions/cosh.php",
+ "classes/src/functions/cot.php",
+ "classes/src/functions/coth.php",
+ "classes/src/functions/csc.php",
+ "classes/src/functions/csch.php",
+ "classes/src/functions/exp.php",
+ "classes/src/functions/inverse.php",
+ "classes/src/functions/ln.php",
+ "classes/src/functions/log2.php",
+ "classes/src/functions/log10.php",
+ "classes/src/functions/negative.php",
+ "classes/src/functions/pow.php",
+ "classes/src/functions/rho.php",
+ "classes/src/functions/sec.php",
+ "classes/src/functions/sech.php",
+ "classes/src/functions/sin.php",
+ "classes/src/functions/sinh.php",
+ "classes/src/functions/sqrt.php",
+ "classes/src/functions/tan.php",
+ "classes/src/functions/tanh.php",
+ "classes/src/functions/theta.php",
+ "classes/src/operations/add.php",
+ "classes/src/operations/subtract.php",
+ "classes/src/operations/multiply.php",
+ "classes/src/operations/divideby.php",
+ "classes/src/operations/divideinto.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@lange.demon.co.uk"
+ }
+ ],
+ "description": "PHP Class for working with complex numbers",
+ "homepage": "https://github.com/MarkBaker/PHPComplex",
+ "keywords": [
+ "complex",
+ "mathematics"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPComplex/issues",
+ "source": "https://github.com/MarkBaker/PHPComplex/tree/2.0.3"
+ },
+ "time": "2021-06-02T09:44:11+00:00"
+ },
+ {
+ "name": "markbaker/matrix",
+ "version": "2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/MarkBaker/PHPMatrix.git",
+ "reference": "174395a901b5ba0925f1d790fa91bab531074b61"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/174395a901b5ba0925f1d790fa91bab531074b61",
+ "reference": "174395a901b5ba0925f1d790fa91bab531074b61",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpdocumentor/phpdocumentor": "2.*",
+ "phploc/phploc": "^4.0",
+ "phpmd/phpmd": "2.*",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.3",
+ "sebastian/phpcpd": "^4.0",
+ "squizlabs/php_codesniffer": "^3.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Matrix\\": "classes/src/"
+ },
+ "files": [
+ "classes/src/Functions/adjoint.php",
+ "classes/src/Functions/antidiagonal.php",
+ "classes/src/Functions/cofactors.php",
+ "classes/src/Functions/determinant.php",
+ "classes/src/Functions/diagonal.php",
+ "classes/src/Functions/identity.php",
+ "classes/src/Functions/inverse.php",
+ "classes/src/Functions/minors.php",
+ "classes/src/Functions/trace.php",
+ "classes/src/Functions/transpose.php",
+ "classes/src/Operations/add.php",
+ "classes/src/Operations/directsum.php",
+ "classes/src/Operations/subtract.php",
+ "classes/src/Operations/multiply.php",
+ "classes/src/Operations/divideby.php",
+ "classes/src/Operations/divideinto.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mark Baker",
+ "email": "mark@demon-angel.eu"
+ }
+ ],
+ "description": "PHP Class for working with matrices",
+ "homepage": "https://github.com/MarkBaker/PHPMatrix",
+ "keywords": [
+ "mathematics",
+ "matrix",
+ "vector"
+ ],
+ "support": {
+ "issues": "https://github.com/MarkBaker/PHPMatrix/issues",
+ "source": "https://github.com/MarkBaker/PHPMatrix/tree/2.1.3"
+ },
+ "time": "2021-05-25T15:42:17+00:00"
+ },
{
"name": "mobiledetect/mobiledetectlib",
"version": "2.8.37",
@@ -2614,6 +2986,66 @@
],
"time": "2020-12-14T13:15:25+00:00"
},
+ {
+ "name": "myclabs/php-enum",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/php-enum.git",
+ "reference": "46cf3d8498b095bd33727b13fd5707263af99421"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/php-enum/zipball/46cf3d8498b095bd33727b13fd5707263af99421",
+ "reference": "46cf3d8498b095bd33727b13fd5707263af99421",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.3 || ^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5",
+ "squizlabs/php_codesniffer": "1.*",
+ "vimeo/psalm": "^4.5.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "MyCLabs\\Enum\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP Enum contributors",
+ "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
+ }
+ ],
+ "description": "PHP Enum implementation",
+ "homepage": "http://github.com/myclabs/php-enum",
+ "keywords": [
+ "enum"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/php-enum/issues",
+ "source": "https://github.com/myclabs/php-enum/tree/1.8.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/mnapoli",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-02-15T16:11:48+00:00"
+ },
{
"name": "nesbot/carbon",
"version": "2.49.0",
@@ -2980,6 +3412,110 @@
},
"time": "2019-09-11T20:02:13+00:00"
},
+ {
+ "name": "phpoffice/phpspreadsheet",
+ "version": "1.18.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
+ "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/418cd304e8e6b417ea79c3b29126a25dc4b1170c",
+ "reference": "418cd304e8e6b417ea79c3b29126a25dc4b1170c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-fileinfo": "*",
+ "ext-gd": "*",
+ "ext-iconv": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "ext-xmlwriter": "*",
+ "ext-zip": "*",
+ "ext-zlib": "*",
+ "ezyang/htmlpurifier": "^4.13",
+ "maennchen/zipstream-php": "^2.1",
+ "markbaker/complex": "^2.0",
+ "markbaker/matrix": "^2.0",
+ "php": "^7.2 || ^8.0",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/simple-cache": "^1.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "dev-master",
+ "dompdf/dompdf": "^1.0",
+ "friendsofphp/php-cs-fixer": "^2.18",
+ "jpgraph/jpgraph": "^4.0",
+ "mpdf/mpdf": "^8.0",
+ "phpcompatibility/php-compatibility": "^9.3",
+ "phpstan/phpstan": "^0.12.82",
+ "phpstan/phpstan-phpunit": "^0.12.18",
+ "phpunit/phpunit": "^8.5",
+ "squizlabs/php_codesniffer": "^3.5",
+ "tecnickcom/tcpdf": "^6.3"
+ },
+ "suggest": {
+ "dompdf/dompdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)",
+ "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers",
+ "mpdf/mpdf": "Option for rendering PDF with PDF Writer",
+ "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer (doesn't yet support PHP8)"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Maarten Balliauw",
+ "homepage": "https://blog.maartenballiauw.be"
+ },
+ {
+ "name": "Mark Baker",
+ "homepage": "https://markbakeruk.net"
+ },
+ {
+ "name": "Franck Lefevre",
+ "homepage": "https://rootslabs.net"
+ },
+ {
+ "name": "Erik Tilt"
+ },
+ {
+ "name": "Adrien Crivelli"
+ }
+ ],
+ "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine",
+ "homepage": "https://github.com/PHPOffice/PhpSpreadsheet",
+ "keywords": [
+ "OpenXML",
+ "excel",
+ "gnumeric",
+ "ods",
+ "php",
+ "spreadsheet",
+ "xls",
+ "xlsx"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
+ "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.18.0"
+ },
+ "time": "2021-05-31T18:21:15+00:00"
+ },
{
"name": "phpoption/phpoption",
"version": "1.7.5",
@@ -3251,6 +3787,61 @@
},
"time": "2020-06-29T06:28:15+00:00"
},
+ {
+ "name": "psr/http-factory",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0",
+ "psr/http-message": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory/tree/master"
+ },
+ "time": "2019-04-30T12:38:16+00:00"
+ },
{
"name": "psr/http-message",
"version": "1.0.1",
diff --git a/config/excel.php b/config/excel.php
new file mode 100644
index 0000000..4b6c873
--- /dev/null
+++ b/config/excel.php
@@ -0,0 +1,328 @@
+ [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Chunk size
+ |--------------------------------------------------------------------------
+ |
+ | When using FromQuery, the query is automatically chunked.
+ | Here you can specify how big the chunk should be.
+ |
+ */
+ 'chunk_size' => 1000,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Pre-calculate formulas during export
+ |--------------------------------------------------------------------------
+ */
+ 'pre_calculate_formulas' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Enable strict null comparison
+ |--------------------------------------------------------------------------
+ |
+ | When enabling strict null comparison empty cells ('') will
+ | be added to the sheet.
+ */
+ 'strict_null_comparison' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | CSV Settings
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. delimiter, enclosure and line ending for CSV exports.
+ |
+ */
+ 'csv' => [
+ 'delimiter' => ',',
+ 'enclosure' => '"',
+ 'line_ending' => PHP_EOL,
+ 'use_bom' => false,
+ 'include_separator_line' => false,
+ 'excel_compatibility' => false,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Worksheet properties
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. default title, creator, subject,...
+ |
+ */
+ 'properties' => [
+ 'creator' => '',
+ 'lastModifiedBy' => '',
+ 'title' => '',
+ 'description' => '',
+ 'subject' => '',
+ 'keywords' => '',
+ 'category' => '',
+ 'manager' => '',
+ 'company' => 'Your SwissCar GmbH',
+ ],
+ ],
+
+ 'imports' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Read Only
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with imports, you might only be interested in the
+ | data that the sheet exists. By default we ignore all styles,
+ | however if you want to do some logic based on style data
+ | you can enable it by setting read_only to false.
+ |
+ */
+ 'read_only' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Ignore Empty
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with imports, you might be interested in ignoring
+ | rows that have null values or empty strings. By default rows
+ | containing empty strings or empty values are not ignored but can be
+ | ignored by enabling the setting ignore_empty to true.
+ |
+ */
+ 'ignore_empty' => false,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Heading Row Formatter
+ |--------------------------------------------------------------------------
+ |
+ | Configure the heading row formatter.
+ | Available options: none|slug|custom
+ |
+ */
+ 'heading_row' => [
+ 'formatter' => 'slug',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | CSV Settings
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. delimiter, enclosure and line ending for CSV imports.
+ |
+ */
+ 'csv' => [
+ 'delimiter' => ',',
+ 'enclosure' => '"',
+ 'escape_character' => '\\',
+ 'contiguous' => false,
+ 'input_encoding' => 'UTF-8',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Worksheet properties
+ |--------------------------------------------------------------------------
+ |
+ | Configure e.g. default title, creator, subject,...
+ |
+ */
+ 'properties' => [
+ 'creator' => '',
+ 'lastModifiedBy' => '',
+ 'title' => '',
+ 'description' => '',
+ 'subject' => '',
+ 'keywords' => '',
+ 'category' => '',
+ 'manager' => '',
+ 'company' => '',
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Extension detector
+ |--------------------------------------------------------------------------
+ |
+ | Configure here which writer/reader type should be used when the package
+ | needs to guess the correct type based on the extension alone.
+ |
+ */
+ 'extension_detector' => [
+ 'xlsx' => Excel::XLSX,
+ 'xlsm' => Excel::XLSX,
+ 'xltx' => Excel::XLSX,
+ 'xltm' => Excel::XLSX,
+ 'xls' => Excel::XLS,
+ 'xlt' => Excel::XLS,
+ 'ods' => Excel::ODS,
+ 'ots' => Excel::ODS,
+ 'slk' => Excel::SLK,
+ 'xml' => Excel::XML,
+ 'gnumeric' => Excel::GNUMERIC,
+ 'htm' => Excel::HTML,
+ 'html' => Excel::HTML,
+ 'csv' => Excel::CSV,
+ 'tsv' => Excel::TSV,
+
+ /*
+ |--------------------------------------------------------------------------
+ | PDF Extension
+ |--------------------------------------------------------------------------
+ |
+ | Configure here which Pdf driver should be used by default.
+ | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
+ |
+ */
+ 'pdf' => Excel::DOMPDF,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Value Binder
+ |--------------------------------------------------------------------------
+ |
+ | PhpSpreadsheet offers a way to hook into the process of a value being
+ | written to a cell. In there some assumptions are made on how the
+ | value should be formatted. If you want to change those defaults,
+ | you can implement your own default value binder.
+ |
+ | Possible value binders:
+ |
+ | [x] Maatwebsite\Excel\DefaultValueBinder::class
+ | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
+ | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
+ |
+ */
+ 'value_binder' => [
+ 'default' => Maatwebsite\Excel\DefaultValueBinder::class,
+ ],
+
+ 'cache' => [
+ /*
+ |--------------------------------------------------------------------------
+ | Default cell caching driver
+ |--------------------------------------------------------------------------
+ |
+ | By default PhpSpreadsheet keeps all cell values in memory, however when
+ | dealing with large files, this might result into memory issues. If you
+ | want to mitigate that, you can configure a cell caching driver here.
+ | When using the illuminate driver, it will store each value in a the
+ | cache store. This can slow down the process, because it needs to
+ | store each value. You can use the "batch" store if you want to
+ | only persist to the store when the memory limit is reached.
+ |
+ | Drivers: memory|illuminate|batch
+ |
+ */
+ 'driver' => 'memory',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Batch memory caching
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with the "batch" caching driver, it will only
+ | persist to the store when the memory limit is reached.
+ | Here you can tweak the memory limit to your liking.
+ |
+ */
+ 'batch' => [
+ 'memory_limit' => 60000,
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Illuminate cache
+ |--------------------------------------------------------------------------
+ |
+ | When using the "illuminate" caching driver, it will automatically use
+ | your default cache store. However if you prefer to have the cell
+ | cache on a separate store, you can configure the store name here.
+ | You can use any store defined in your cache config. When leaving
+ | at "null" it will use the default store.
+ |
+ */
+ 'illuminate' => [
+ 'store' => null,
+ ],
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Transaction Handler
+ |--------------------------------------------------------------------------
+ |
+ | By default the import is wrapped in a transaction. This is useful
+ | for when an import may fail and you want to retry it. With the
+ | transactions, the previous import gets rolled-back.
+ |
+ | You can disable the transaction handler by setting this to null.
+ | Or you can choose a custom made transaction handler here.
+ |
+ | Supported handlers: null|db
+ |
+ */
+ 'transactions' => [
+ 'handler' => 'db',
+ ],
+
+ 'temporary_files' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Local Temporary Path
+ |--------------------------------------------------------------------------
+ |
+ | When exporting and importing files, we use a temporary file, before
+ | storing reading or downloading. Here you can customize that path.
+ |
+ */
+ 'local_path' => storage_path('framework/laravel-excel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Remote Temporary Disk
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with a multi server setup with queues in which you
+ | cannot rely on having a shared local temporary path, you might
+ | want to store the temporary file on a shared disk. During the
+ | queue executing, we'll retrieve the temporary file from that
+ | location instead. When left to null, it will always use
+ | the local path. This setting only has effect when using
+ | in conjunction with queued imports and exports.
+ |
+ */
+ 'remote_disk' => null,
+ 'remote_prefix' => null,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Force Resync
+ |--------------------------------------------------------------------------
+ |
+ | When dealing with a multi server setup as above, it's possible
+ | for the clean up that occurs after entire queue has been run to only
+ | cleanup the server that the last AfterImportJob runs on. The rest of the server
+ | would still have the local temporary file stored on it. In this case your
+ | local storage limits can be exceeded and future imports won't be processed.
+ | To mitigate this you can set this config value to be true, so that after every
+ | queued chunk is processed the local temporary file is deleted on the server that
+ | processed it.
+ |
+ */
+ 'force_resync_remote' => null,
+ ],
+];
diff --git a/public/js/app.js b/public/js/app.js
index f30d13a..0acbf3f 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -21976,6 +21976,47 @@ __webpack_require__.r(__webpack_exports__);
/***/ }),
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js":
+/*!**************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js ***!
+ \**************************************************************************************************************************************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/Layouts/Layout */ "./resources/js/Layouts/Layout.vue");
+/* harmony import */ var _Jetstream_Label_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Jetstream/Label.vue */ "./resources/js/Jetstream/Label.vue");
+/* harmony import */ var _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/Jetstream/FormSection */ "./resources/js/Jetstream/FormSection.vue");
+
+
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
+ components: {
+ Layout: _Layouts_Layout__WEBPACK_IMPORTED_MODULE_0__.default,
+ JetLabel: _Jetstream_Label_vue__WEBPACK_IMPORTED_MODULE_1__.default,
+ JetFormSection: _Jetstream_FormSection__WEBPACK_IMPORTED_MODULE_2__.default
+ },
+ props: {
+ year: Number,
+ years: Array
+ },
+ data: function data() {
+ return {};
+ },
+ computed: {
+ link: function link() {
+ return route('reports.print', {
+ year: this.year
+ });
+ }
+ }
+});
+
+/***/ }),
+
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Teams/Create.vue?vue&type=script&lang=js":
/*!*************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Teams/Create.vue?vue&type=script&lang=js ***!
@@ -23740,41 +23781,43 @@ var _hoisted_2 = {
var _hoisted_3 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Dashboard ");
-var _hoisted_4 = {
+var _hoisted_4 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Berichte ");
+
+var _hoisted_5 = {
"class": "mb-4 px-4"
};
-var _hoisted_5 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
+var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
"class": "text-sm font-semibold mb-1 text-gray-400 flex items-center"
}, " Autos ", -1
/* HOISTED */
);
-var _hoisted_6 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Neues Auto ");
+var _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Neues Auto ");
-var _hoisted_7 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Alle Autos ");
+var _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Alle Autos ");
-var _hoisted_8 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Meine Autos ");
+var _hoisted_9 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Meine Autos ");
-var _hoisted_9 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Verkaufte Autos ");
+var _hoisted_10 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Verkaufte Autos ");
-var _hoisted_10 = {
+var _hoisted_11 = {
"class": "mb-4 px-4"
};
-var _hoisted_11 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
+var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("p", {
"class": "text-sm font-semibold mb-1 text-gray-400 flex items-center"
}, " Kontakte ", -1
/* HOISTED */
);
-var _hoisted_12 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Neuer Kontakt ");
+var _hoisted_13 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Neuer Kontakt ");
-var _hoisted_13 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Alle Kontakte ");
+var _hoisted_14 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Alle Kontakte ");
-var _hoisted_14 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Käufer ");
+var _hoisted_15 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Käufer ");
-var _hoisted_15 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Verkäufer ");
+var _hoisted_16 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Verkäufer ");
function render(_ctx, _cache, $props, $setup, $data, $options) {
var _component_unicon = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("unicon");
@@ -23801,7 +23844,24 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
}, 8
/* PROPS */
- , ["href", "active"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_4, [_hoisted_5, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_nav_link, {
+ , ["href", "active"]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_nav_link, {
+ href: _ctx.route('reports'),
+ active: _ctx.route().current('reports')
+ }, {
+ "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_unicon, {
+ "class": "mr-2",
+ height: "22",
+ width: "22",
+ name: "chart"
+ }), _hoisted_4];
+ }),
+ _: 1
+ /* STABLE */
+
+ }, 8
+ /* PROPS */
+ , ["href", "active"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_5, [_hoisted_6, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_nav_link, {
href: _ctx.route('cars.create'),
active: _ctx.route().current('cars.create')
}, {
@@ -23811,7 +23871,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "plus-circle"
- }), _hoisted_6];
+ }), _hoisted_7];
}),
_: 1
/* STABLE */
@@ -23828,7 +23888,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "car-sideview"
- }), _hoisted_7];
+ }), _hoisted_8];
}),
_: 1
/* STABLE */
@@ -23845,7 +23905,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "angle-right"
- }), _hoisted_8];
+ }), _hoisted_9];
}),
_: 1
/* STABLE */
@@ -23862,14 +23922,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "angle-right"
- }), _hoisted_9];
+ }), _hoisted_10];
}),
_: 1
/* STABLE */
}, 8
/* PROPS */
- , ["href", "active"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_10, [_hoisted_11, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_nav_link, {
+ , ["href", "active"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_11, [_hoisted_12, (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_nav_link, {
href: _ctx.route('contacts.create'),
active: _ctx.route().current('contacts.create')
}, {
@@ -23879,7 +23939,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "plus-circle"
- }), _hoisted_12];
+ }), _hoisted_13];
}),
_: 1
/* STABLE */
@@ -23896,7 +23956,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "users-alt"
- }), _hoisted_13];
+ }), _hoisted_14];
}),
_: 1
/* STABLE */
@@ -23913,7 +23973,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "angle-right"
- }), _hoisted_14];
+ }), _hoisted_15];
}),
_: 1
/* STABLE */
@@ -23930,7 +23990,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
height: "22",
width: "22",
name: "angle-right"
- }), _hoisted_15];
+ }), _hoisted_16];
}),
_: 1
/* STABLE */
@@ -29122,12 +29182,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
}, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.insurance_types, function (insurance, index) {
return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("option", {
value: index,
+ key: index,
selected: $data.form.insurance_type == index
}, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(insurance), 9
/* TEXT, PROPS */
, ["value", "selected"]);
- }), 256
- /* UNKEYED_FRAGMENT */
+ }), 128
+ /* KEYED_FRAGMENT */
))], 512
/* NEED_PATCH */
), [[vue__WEBPACK_IMPORTED_MODULE_0__.vModelSelect, $data.form.insurance_type]]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_input_error, {
@@ -31149,6 +31210,97 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
/***/ }),
+/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee":
+/*!******************************************************************************************************************************************************************************************************************************************************************************!*\
+ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee ***!
+ \******************************************************************************************************************************************************************************************************************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": () => (/* binding */ render)
+/* harmony export */ });
+/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
+
+
+var _hoisted_1 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("h2", {
+ "class": "font-semibold text-xl text-gray-800 leading-tight"
+}, " Berichte ", -1
+/* HOISTED */
+);
+
+var _hoisted_2 = {
+ "class": "max-w-4xl mx-auto"
+};
+
+var _hoisted_3 = /*#__PURE__*/(0,vue__WEBPACK_IMPORTED_MODULE_0__.createTextVNode)(" Neuen Bericht erstellen ");
+
+var _hoisted_4 = {
+ "class": "col-span-6 sm:col-span-4"
+};
+function render(_ctx, _cache, $props, $setup, $data, $options) {
+ var _this = this;
+
+ var _component_jet_label = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("jet-label");
+
+ var _component_jet_form_section = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("jet-form-section");
+
+ var _component_layout = (0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveComponent)("layout");
+
+ return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_component_layout, null, {
+ header: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [_hoisted_1];
+ }),
+ "default": (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_2, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_form_section, null, {
+ title: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [_hoisted_3];
+ }),
+ form: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("div", _hoisted_4, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)(_component_jet_label, {
+ "for": "year",
+ value: "Jahr"
+ }), (0,vue__WEBPACK_IMPORTED_MODULE_0__.withDirectives)((0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("select", {
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = function ($event) {
+ return $props.year = $event;
+ }),
+ "class": "mt-1 block w-full border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm"
+ }, [((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)($props.years, function (year) {
+ return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)("option", {
+ value: year,
+ key: year,
+ selected: _this.year == year
+ }, (0,vue__WEBPACK_IMPORTED_MODULE_0__.toDisplayString)(year), 9
+ /* TEXT, PROPS */
+ , ["value", "selected"]);
+ }), 128
+ /* KEYED_FRAGMENT */
+ ))], 512
+ /* NEED_PATCH */
+ ), [[vue__WEBPACK_IMPORTED_MODULE_0__.vModelSelect, $props.year]])])];
+ }),
+ actions: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(function () {
+ return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)("a", {
+ href: $options.link,
+ "class": "justify-center inline-flex items-center px-4 py-2 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest focus:outline-none focus:ring disabled:opacity-25 transition bg-gray-800 hover:bg-gray-700 active:bg-gray-900 focus:border-gray-900 focus:ring-gray-300"
+ }, " Bericht drucken ", 8
+ /* PROPS */
+ , ["href"])];
+ }),
+ _: 1
+ /* STABLE */
+
+ })])];
+ }),
+ _: 1
+ /* STABLE */
+
+ });
+}
+
+/***/ }),
+
/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Teams/Create.vue?vue&type=template&id=67d2af3e":
/*!*****************************************************************************************************************************************************************************************************************************************************************************!*\
!*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Teams/Create.vue?vue&type=template&id=67d2af3e ***!
@@ -32206,7 +32358,7 @@ __webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js"); // Import
-vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPalette, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCalendarAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPlusCircle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMeh, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]); // Create a new store instance.
+vue_unicons__WEBPACK_IMPORTED_MODULE_3__.default.add([vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniChart, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPalette, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCalendarAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPlusCircle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMeh, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniUsersAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniCarSideview, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniDashboard, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniSearch, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilter, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFilterSlash, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniTrashAlt, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPen, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniExclamationTriangle, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniMapMarker, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniPhone, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniEnvelope, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileDownload, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniArrowRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleRight, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleUp, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleDown, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniAngleLeft, vue_unicons_dist_icons__WEBPACK_IMPORTED_MODULE_4__.uniFileUploadAlt]); // Create a new store instance.
var store = (0,vuex__WEBPACK_IMPORTED_MODULE_5__.createStore)({
state: function state() {
@@ -64222,6 +64374,32 @@ _UpdateProfileInformationForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODU
/***/ }),
+/***/ "./resources/js/Pages/Reports/Index.vue":
+/*!**********************************************!*\
+ !*** ./resources/js/Pages/Reports/Index.vue ***!
+ \**********************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony import */ var _Index_vue_vue_type_template_id_456176ee__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Index.vue?vue&type=template&id=456176ee */ "./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee");
+/* harmony import */ var _Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Index.vue?vue&type=script&lang=js */ "./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js");
+
+
+
+_Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default.render = _Index_vue_vue_type_template_id_456176ee__WEBPACK_IMPORTED_MODULE_0__.render
+/* hot reload */
+if (false) {}
+
+_Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default.__file = "resources/js/Pages/Reports/Index.vue"
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__.default);
+
+/***/ }),
+
/***/ "./resources/js/Pages/Teams/Create.vue":
/*!*********************************************!*\
!*** ./resources/js/Pages/Teams/Create.vue ***!
@@ -65688,6 +65866,22 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UpdateProfileInformationForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UpdateProfileInformationForm.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Profile/UpdateProfileInformationForm.vue?vue&type=script&lang=js");
+/***/ }),
+
+/***/ "./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js":
+/*!**********************************************************************!*\
+ !*** ./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js ***!
+ \**********************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__.default)
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=script&lang=js");
+
+
/***/ }),
/***/ "./resources/js/Pages/Teams/Create.vue?vue&type=script&lang=js":
@@ -67176,6 +67370,22 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_UpdateProfileInformationForm_vue_vue_type_template_id_f38ebb82__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./UpdateProfileInformationForm.vue?vue&type=template&id=f38ebb82 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Profile/UpdateProfileInformationForm.vue?vue&type=template&id=f38ebb82");
+/***/ }),
+
+/***/ "./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee":
+/*!****************************************************************************!*\
+ !*** ./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee ***!
+ \****************************************************************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "render": () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_456176ee__WEBPACK_IMPORTED_MODULE_0__.render)
+/* harmony export */ });
+/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_dist_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_dist_index_js_ruleSet_0_use_0_Index_vue_vue_type_template_id_456176ee__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../../node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!../../../../node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./Index.vue?vue&type=template&id=456176ee */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./resources/js/Pages/Reports/Index.vue?vue&type=template&id=456176ee");
+
+
/***/ }),
/***/ "./resources/js/Pages/Teams/Create.vue?vue&type=template&id=67d2af3e":
@@ -74514,6 +74724,8 @@ var map = {
"./Profile/UpdatePasswordForm.vue": "./resources/js/Pages/Profile/UpdatePasswordForm.vue",
"./Profile/UpdateProfileInformationForm": "./resources/js/Pages/Profile/UpdateProfileInformationForm.vue",
"./Profile/UpdateProfileInformationForm.vue": "./resources/js/Pages/Profile/UpdateProfileInformationForm.vue",
+ "./Reports/Index": "./resources/js/Pages/Reports/Index.vue",
+ "./Reports/Index.vue": "./resources/js/Pages/Reports/Index.vue",
"./Teams/Create": "./resources/js/Pages/Teams/Create.vue",
"./Teams/Create.vue": "./resources/js/Pages/Teams/Create.vue",
"./Teams/CreateTeamForm": "./resources/js/Pages/Teams/CreateTeamForm.vue",
diff --git a/resources/js/Components/Sidebar.vue b/resources/js/Components/Sidebar.vue
index eaf3c36..600874a 100644
--- a/resources/js/Components/Sidebar.vue
+++ b/resources/js/Components/Sidebar.vue
@@ -12,6 +12,10 @@