forked from Business/BinStack
		
	Add reports (close #7)
This commit is contained in:
		
							parent
							
								
									db72d8d38d
								
							
						
					
					
						commit
						98aa7d3217
					
				| @ -4,7 +4,9 @@ | |||||||
|     "type": "project", |     "type": "project", | ||||||
|     "require": { |     "require": { | ||||||
|         "catfan/medoo": "^1.2", |         "catfan/medoo": "^1.2", | ||||||
|         "guzzlehttp/guzzle": "^6.2" |         "guzzlehttp/guzzle": "^6.2", | ||||||
|  |         "league/csv": "^9.0", | ||||||
|  |         "lapinator/ods-php-generator": "^0.0.3" | ||||||
|     }, |     }, | ||||||
|     "license": "MPL-2.0", |     "license": "MPL-2.0", | ||||||
|     "authors": [ |     "authors": [ | ||||||
|  | |||||||
							
								
								
									
										111
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										111
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							| @ -4,8 +4,8 @@ | |||||||
|         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", |         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", | ||||||
|         "This file is @generated automatically" |         "This file is @generated automatically" | ||||||
|     ], |     ], | ||||||
|     "hash": "67e95c250946f032648f9527831ec71a", |     "hash": "0476ce3c9f1be7b4a13d6533df71433d", | ||||||
|     "content-hash": "36bca807ff9018548a5ce6c686d131dc", |     "content-hash": "9ff412188d3e72a7961ecf9b9e966404", | ||||||
|     "packages": [ |     "packages": [ | ||||||
|         { |         { | ||||||
|             "name": "catfan/medoo", |             "name": "catfan/medoo", | ||||||
| @ -247,6 +247,113 @@ | |||||||
|             ], |             ], | ||||||
|             "time": "2017-03-20 17:10:46" |             "time": "2017-03-20 17:10:46" | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |             "name": "lapinator/ods-php-generator", | ||||||
|  |             "version": "v0.0.3", | ||||||
|  |             "source": { | ||||||
|  |                 "type": "git", | ||||||
|  |                 "url": "https://github.com/Lapinator/odsPhpGenerator.git", | ||||||
|  |                 "reference": "575314c003c2ec3032813bedcc1d27032b7b7ab2" | ||||||
|  |             }, | ||||||
|  |             "dist": { | ||||||
|  |                 "type": "zip", | ||||||
|  |                 "url": "https://api.github.com/repos/Lapinator/odsPhpGenerator/zipball/575314c003c2ec3032813bedcc1d27032b7b7ab2", | ||||||
|  |                 "reference": "575314c003c2ec3032813bedcc1d27032b7b7ab2", | ||||||
|  |                 "shasum": "" | ||||||
|  |             }, | ||||||
|  |             "require": { | ||||||
|  |                 "php": ">=5.3" | ||||||
|  |             }, | ||||||
|  |             "type": "library", | ||||||
|  |             "autoload": { | ||||||
|  |                 "classmap": [ | ||||||
|  |                     "src/" | ||||||
|  |                 ] | ||||||
|  |             }, | ||||||
|  |             "notification-url": "https://packagist.org/downloads/", | ||||||
|  |             "license": [ | ||||||
|  |                 "LGPL-3.0" | ||||||
|  |             ], | ||||||
|  |             "authors": [ | ||||||
|  |                 { | ||||||
|  |                     "name": "Laurent VUIBERT", | ||||||
|  |                     "email": "lapinator@gmx.fr", | ||||||
|  |                     "homepage": "http://lapinator.net", | ||||||
|  |                     "role": "Developer" | ||||||
|  |                 } | ||||||
|  |             ], | ||||||
|  |             "description": "Open Document Spreadsheet (.ods) generator ", | ||||||
|  |             "homepage": "https://odsphpgenerator.lapinator.net/", | ||||||
|  |             "keywords": [ | ||||||
|  |                 "LibreOffice", | ||||||
|  |                 "ods" | ||||||
|  |             ], | ||||||
|  |             "time": "2016-04-14 21:51:27" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "name": "league/csv", | ||||||
|  |             "version": "9.1.1", | ||||||
|  |             "source": { | ||||||
|  |                 "type": "git", | ||||||
|  |                 "url": "https://github.com/thephpleague/csv.git", | ||||||
|  |                 "reference": "66118f5c2a7e4da77e743e69f74773c63b73e8f9" | ||||||
|  |             }, | ||||||
|  |             "dist": { | ||||||
|  |                 "type": "zip", | ||||||
|  |                 "url": "https://api.github.com/repos/thephpleague/csv/zipball/66118f5c2a7e4da77e743e69f74773c63b73e8f9", | ||||||
|  |                 "reference": "66118f5c2a7e4da77e743e69f74773c63b73e8f9", | ||||||
|  |                 "shasum": "" | ||||||
|  |             }, | ||||||
|  |             "require": { | ||||||
|  |                 "ext-mbstring": "*", | ||||||
|  |                 "php": ">=7.0.10" | ||||||
|  |             }, | ||||||
|  |             "require-dev": { | ||||||
|  |                 "ext-curl": "*", | ||||||
|  |                 "friendsofphp/php-cs-fixer": "^2.0", | ||||||
|  |                 "phpunit/phpunit": "^6.0" | ||||||
|  |             }, | ||||||
|  |             "suggest": { | ||||||
|  |                 "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" | ||||||
|  |             }, | ||||||
|  |             "type": "library", | ||||||
|  |             "extra": { | ||||||
|  |                 "branch-alias": { | ||||||
|  |                     "dev-master": "9.x-dev" | ||||||
|  |                 } | ||||||
|  |             }, | ||||||
|  |             "autoload": { | ||||||
|  |                 "psr-4": { | ||||||
|  |                     "League\\Csv\\": "src" | ||||||
|  |                 }, | ||||||
|  |                 "files": [ | ||||||
|  |                     "src/functions_include.php" | ||||||
|  |                 ] | ||||||
|  |             }, | ||||||
|  |             "notification-url": "https://packagist.org/downloads/", | ||||||
|  |             "license": [ | ||||||
|  |                 "MIT" | ||||||
|  |             ], | ||||||
|  |             "authors": [ | ||||||
|  |                 { | ||||||
|  |                     "name": "Ignace Nyamagana Butera", | ||||||
|  |                     "email": "nyamsprod@gmail.com", | ||||||
|  |                     "homepage": "https://github.com/nyamsprod/", | ||||||
|  |                     "role": "Developer" | ||||||
|  |                 } | ||||||
|  |             ], | ||||||
|  |             "description": "Csv data manipulation made easy in PHP", | ||||||
|  |             "homepage": "http://csv.thephpleague.com", | ||||||
|  |             "keywords": [ | ||||||
|  |                 "csv", | ||||||
|  |                 "export", | ||||||
|  |                 "filter", | ||||||
|  |                 "import", | ||||||
|  |                 "read", | ||||||
|  |                 "write" | ||||||
|  |             ], | ||||||
|  |             "time": "2017-11-28 08:29:49" | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|             "name": "psr/http-message", |             "name": "psr/http-message", | ||||||
|             "version": "1.0.1", |             "version": "1.0.1", | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								database.mwb
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								database.mwb
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								database.sql
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								database.sql
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | |||||||
| -- MySQL Script generated by MySQL Workbench | -- MySQL Script generated by MySQL Workbench | ||||||
| -- Tue 17 Oct 2017 03:17:47 AM MDT | -- Tue 26 Dec 2017 04:44:44 PM MST | ||||||
| -- Model: New Model    Version: 1.0 | -- Model: New Model    Version: 1.0 | ||||||
| -- MySQL Workbench Forward Engineering | -- MySQL Workbench Forward Engineering | ||||||
| 
 | 
 | ||||||
| @ -102,6 +102,18 @@ CREATE TABLE IF NOT EXISTS `inventory`.`permissions` ( | |||||||
| ENGINE = InnoDB; | ENGINE = InnoDB; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | -- ----------------------------------------------------- | ||||||
|  | -- Table `inventory`.`report_access_codes` | ||||||
|  | -- ----------------------------------------------------- | ||||||
|  | CREATE TABLE IF NOT EXISTS `inventory`.`report_access_codes` ( | ||||||
|  |   `id` INT NOT NULL AUTO_INCREMENT, | ||||||
|  |   `code` VARCHAR(45) NULL, | ||||||
|  |   `expires` DATETIME NULL, | ||||||
|  |   PRIMARY KEY (`id`), | ||||||
|  |   UNIQUE INDEX `id_UNIQUE` (`id` ASC)) | ||||||
|  | ENGINE = InnoDB; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| SET SQL_MODE=@OLD_SQL_MODE; | SET SQL_MODE=@OLD_SQL_MODE; | ||||||
| SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; | SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; | ||||||
| SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; | SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								database_upgrade/v1.0.1_1.1.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								database_upgrade/v1.0.1_1.1.sql
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | /*  | ||||||
|  |  * This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||||
|  |  */ | ||||||
|  | CREATE TABLE IF NOT EXISTS `report_access_codes` ( | ||||||
|  |   `id` INT(11) NOT NULL AUTO_INCREMENT, | ||||||
|  |   `code` VARCHAR(45) NULL DEFAULT NULL, | ||||||
|  |   `expires` DATETIME NULL DEFAULT NULL, | ||||||
|  |   PRIMARY KEY (`id`), | ||||||
|  |   UNIQUE INDEX `id_UNIQUE` (`id` ASC)) | ||||||
|  | ENGINE = InnoDB | ||||||
|  | DEFAULT CHARACTER SET = utf8 | ||||||
| @ -95,5 +95,15 @@ define("STRINGS", [ | |||||||
|     "missing name" => "You need to enter a name.", |     "missing name" => "You need to enter a name.", | ||||||
|     "use the dropdowns" => "Whoops, you need to use the category and location autocomplete boxes.", |     "use the dropdowns" => "Whoops, you need to use the category and location autocomplete boxes.", | ||||||
|     "make categories and locations" => "Please create at least one category and location before adding an item.", |     "make categories and locations" => "Please create at least one category and location before adding an item.", | ||||||
|     "search" => "Search Items" |     "search" => "Search Items", | ||||||
| ]); |     "report export" => "Reports/Export", | ||||||
|  |     "report type" => "Report type", | ||||||
|  |     "format" => "Format", | ||||||
|  |     "generate report" => "Generate report", | ||||||
|  |     "choose an option" => "Choose an option", | ||||||
|  |     "csv file" => "CSV text file", | ||||||
|  |     "ods file" => "ODS spreadsheet", | ||||||
|  |     "html file" => "HTML web page", | ||||||
|  |     "itemid" => "Item ID", | ||||||
|  |     "id" => "ID" | ||||||
|  | ]); | ||||||
|  | |||||||
							
								
								
									
										261
									
								
								lib/reports.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										261
									
								
								lib/reports.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,261 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | // Detect if loaded by the user or by PHP
 | ||||||
|  | if (count(get_included_files()) == 1) { | ||||||
|  |     define("LOADED", true); | ||||||
|  | } else { | ||||||
|  |     define("LOADED", false); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | require_once __DIR__ . "/../required.php"; | ||||||
|  | 
 | ||||||
|  | use League\Csv\Writer; | ||||||
|  | use League\Csv\HTMLConverter; | ||||||
|  | use odsPhpGenerator\ods; | ||||||
|  | use odsPhpGenerator\odsTable; | ||||||
|  | use odsPhpGenerator\odsTableRow; | ||||||
|  | use odsPhpGenerator\odsTableColumn; | ||||||
|  | use odsPhpGenerator\odsTableCellString; | ||||||
|  | use odsPhpGenerator\odsStyleTableColumn; | ||||||
|  | use odsPhpGenerator\odsStyleTableCell; | ||||||
|  | 
 | ||||||
|  | // Allow access with a download code, for mobile app and stuff
 | ||||||
|  | $date = date("Y-m-d H:i:s"); | ||||||
|  | if (isset($VARS['code']) && LOADED) { | ||||||
|  |     if (!$database->has('report_access_codes', ["AND" => ['code' => $VARS['code'], 'expires[>]' => $date]])) { | ||||||
|  |         dieifnotloggedin(); | ||||||
|  |     } | ||||||
|  | } else { | ||||||
|  |     dieifnotloggedin(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Delete old DB entries
 | ||||||
|  | $database->delete('report_access_codes', ['expires[<=]' => $date]); | ||||||
|  | 
 | ||||||
|  | if (LOADED) { | ||||||
|  |     if (isset($VARS['type']) && isset($VARS['format'])) { | ||||||
|  |         generateReport($VARS['type'], $VARS['format']); | ||||||
|  |         die(); | ||||||
|  |     } else { | ||||||
|  |         lang("invalid parameters"); | ||||||
|  |         die(); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Get a 2d array of the items in the database. | ||||||
|  |  * @global type $database | ||||||
|  |  * @param array $filter Medoo WHERE clause. | ||||||
|  |  * @return string | ||||||
|  |  */ | ||||||
|  | function getItemReport($filter = []) { | ||||||
|  |     global $database; | ||||||
|  |     $items = $database->select( | ||||||
|  |             "items", [ | ||||||
|  |         "[>]locations" => ["locid"], | ||||||
|  |         "[>]categories" => ["catid"] | ||||||
|  |             ], [ | ||||||
|  |         "itemid", | ||||||
|  |         "name", | ||||||
|  |         "catname", | ||||||
|  |         "locname", | ||||||
|  |         "code1", | ||||||
|  |         "code2", | ||||||
|  |         "qty", | ||||||
|  |         "want", | ||||||
|  |         "userid", | ||||||
|  |         "text1", | ||||||
|  |         "text2", | ||||||
|  |         "text3" | ||||||
|  |             ], $filter | ||||||
|  |     ); | ||||||
|  |     $header = [ | ||||||
|  |         lang("itemid", false), | ||||||
|  |         lang("name", false), | ||||||
|  |         lang("category", false), | ||||||
|  |         lang("location", false), | ||||||
|  |         lang("code 1", false), | ||||||
|  |         lang("code 2", false), | ||||||
|  |         lang("quantity", false), | ||||||
|  |         lang("want", false), | ||||||
|  |         lang("assigned to", false), | ||||||
|  |         lang("description", false), | ||||||
|  |         lang("notes", false), | ||||||
|  |         lang("comments", false) | ||||||
|  |     ]; | ||||||
|  |     $out = [$header]; | ||||||
|  |     for ($i = 0; $i < count($items); $i++) { | ||||||
|  |         $user = ""; | ||||||
|  |         if (!is_null($items[$i]["userid"])) { | ||||||
|  |             require_once __DIR__ . "/userinfo.php"; | ||||||
|  |             $u = getUserByID($items[$i]["userid"]); | ||||||
|  |             $user = $u['name'] . " (" . $u['username'] . ')'; | ||||||
|  |         } | ||||||
|  |         $out[] = [ | ||||||
|  |             $items[$i]["itemid"], | ||||||
|  |             $items[$i]["name"], | ||||||
|  |             $items[$i]["catname"], | ||||||
|  |             $items[$i]["locname"], | ||||||
|  |             $items[$i]["code1"], | ||||||
|  |             $items[$i]["code2"], | ||||||
|  |             $items[$i]["qty"], | ||||||
|  |             $items[$i]["want"], | ||||||
|  |             $user, | ||||||
|  |             $items[$i]["text1"], | ||||||
|  |             $items[$i]["text2"], | ||||||
|  |             $items[$i]["text3"] | ||||||
|  |         ]; | ||||||
|  |     } | ||||||
|  |     return $out; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function getCategoryReport() { | ||||||
|  |     global $database; | ||||||
|  |     $cats = $database->select('categories', [ | ||||||
|  |         'catid', | ||||||
|  |         'catname' | ||||||
|  |     ]); | ||||||
|  |     $header = [lang("id", false), lang("category", false), lang("item count", false)]; | ||||||
|  |     $out = [$header]; | ||||||
|  |     for ($i = 0; $i < count($cats); $i++) { | ||||||
|  |         $itemcount = $database->count('items', ['catid' => $cats[$i]['catid']]); | ||||||
|  |         $out[] = [ | ||||||
|  |             $cats[$i]["catid"], | ||||||
|  |             $cats[$i]["catname"], | ||||||
|  |             $itemcount . "" | ||||||
|  |         ]; | ||||||
|  |     } | ||||||
|  |     return $out; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function getLocationReport() { | ||||||
|  |     global $database; | ||||||
|  |     $locs = $database->select('locations', [ | ||||||
|  |         'locid', | ||||||
|  |         'locname', | ||||||
|  |         'loccode' | ||||||
|  |     ]); | ||||||
|  |     $header = [lang("id", false), lang("location", false), lang("code", false), lang("item count", false)]; | ||||||
|  |     $out = [$header]; | ||||||
|  |     for ($i = 0; $i < count($locs); $i++) { | ||||||
|  |         $itemcount = $database->count('items', ['locid' => $locs[$i]['locid']]); | ||||||
|  |         $out[] = [ | ||||||
|  |             $locs[$i]["locid"], | ||||||
|  |             $locs[$i]["locname"], | ||||||
|  |             $locs[$i]["loccode"], | ||||||
|  |             $itemcount . "" | ||||||
|  |         ]; | ||||||
|  |     } | ||||||
|  |     return $out; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function getReportData($type) { | ||||||
|  |     switch ($type) { | ||||||
|  |         case "item": | ||||||
|  |             return getItemReport(); | ||||||
|  |             break; | ||||||
|  |         case "category": | ||||||
|  |             return getCategoryReport(); | ||||||
|  |             break; | ||||||
|  |         case "location": | ||||||
|  |             return getLocationReport(); | ||||||
|  |             break; | ||||||
|  |         case "itemstock": | ||||||
|  |             return getItemReport(["AND" => ["qty[<]want", "want[>]" => 0]]); | ||||||
|  |             break; | ||||||
|  |         default: | ||||||
|  |             return [["error"]]; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function dataToCSV($data, $name = "report") { | ||||||
|  |     $csv = Writer::createFromString(''); | ||||||
|  |     $csv->insertAll($data); | ||||||
|  |     header('Content-type: text/csv'); | ||||||
|  |     header('Content-Disposition: attachment; filename="' . $name . "_" . date("Y-m-d_Hi") . ".csv" . '"'); | ||||||
|  |     echo $csv; | ||||||
|  |     die(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function dataToODS($data, $name = "report") { | ||||||
|  |     $ods = new ods(); | ||||||
|  |     $styleColumn = new odsStyleTableColumn(); | ||||||
|  |     $styleColumn->setUseOptimalColumnWidth(true); | ||||||
|  |     $headerstyle = new odsStyleTableCell(); | ||||||
|  |     $headerstyle->setFontWeight("bold"); | ||||||
|  |     $table = new odsTable($name); | ||||||
|  | 
 | ||||||
|  |     for ($i = 0; $i < count($data[0]); $i++) { | ||||||
|  |         $table->addTableColumn(new odsTableColumn($styleColumn)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     $rowid = 0; | ||||||
|  |     foreach ($data as $datarow) { | ||||||
|  |         $row = new odsTableRow(); | ||||||
|  |         foreach ($datarow as $cell) { | ||||||
|  |             if ($rowid == 0) { | ||||||
|  |                 $row->addCell(new odsTableCellString($cell, $headerstyle)); | ||||||
|  |             } else { | ||||||
|  |                 $row->addCell(new odsTableCellString($cell)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         $table->addRow($row); | ||||||
|  |         $rowid++; | ||||||
|  |     } | ||||||
|  |     $ods->addTable($table); | ||||||
|  |     $ods->downloadOdsFile($name . "_" . date("Y-m-d_Hi") . ".ods"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function dataToHTML($data, $name = "report") { | ||||||
|  |     global $SECURE_NONCE; | ||||||
|  |     // HTML exporter doesn't like null values
 | ||||||
|  |     for ($i = 0; $i < count($data); $i++) { | ||||||
|  |         for ($j = 0; $j < count($data[$i]); $j++) { | ||||||
|  |             if (is_null($data[$i][$j])) { | ||||||
|  |                 $data[$i][$j] = ''; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     header('Content-type: text/html'); | ||||||
|  |     $converter = new HTMLConverter(); | ||||||
|  |     $out = "<!DOCTYPE html>\n" | ||||||
|  |             . "<meta charset=\"utf-8\">\n" | ||||||
|  |             . "<meta name=\"viewport\" content=\"width=device-width\">\n" | ||||||
|  |             . "<title>" . $name . "_" . date("Y-m-d_Hi") . "</title>\n" | ||||||
|  |             . <<<STYLE | ||||||
|  | <style nonce="$SECURE_NONCE"> | ||||||
|  |     .table-csv-data { | ||||||
|  |         border-collapse: collapse; | ||||||
|  |     } | ||||||
|  |     .table-csv-data tr:first-child { | ||||||
|  |         font-weight: bold; | ||||||
|  |     } | ||||||
|  |     .table-csv-data tr td { | ||||||
|  |         border: 1px solid black; | ||||||
|  |     } | ||||||
|  | </style> | ||||||
|  | STYLE | ||||||
|  |             . $converter->convert($data); | ||||||
|  |     echo $out; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function generateReport($type, $format) { | ||||||
|  |     $data = getReportData($type); | ||||||
|  |     switch ($format) { | ||||||
|  |         case "ods": | ||||||
|  |             dataToODS($data, $type); | ||||||
|  |             break; | ||||||
|  |         case "html": | ||||||
|  |             dataToHTML($data, $type); | ||||||
|  |             break; | ||||||
|  |         case "csv": | ||||||
|  |         default: | ||||||
|  |             echo dataToCSV($data, $type); | ||||||
|  |             break; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -75,6 +75,14 @@ define("PAGES", [ | |||||||
|             "static/js/editloc.js" |             "static/js/editloc.js" | ||||||
|         ], |         ], | ||||||
|     ], |     ], | ||||||
|  |     "export" => [ | ||||||
|  |         "title" => "report export", | ||||||
|  |         "navbar" => true, | ||||||
|  |         "icon" => "download", | ||||||
|  |         "scripts" => [ | ||||||
|  |             "static/js/export.js" | ||||||
|  |         ] | ||||||
|  |     ], | ||||||
|     "404" => [ |     "404" => [ | ||||||
|         "title" => "404 error" |         "title" => "404 error" | ||||||
|     ] |     ] | ||||||
|  | |||||||
							
								
								
									
										40
									
								
								pages/export.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								pages/export.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | <?php | ||||||
|  | 
 | ||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | ||||||
|  | 
 | ||||||
|  | require_once __DIR__ . '/../required.php'; | ||||||
|  | 
 | ||||||
|  | redirectifnotloggedin(); | ||||||
|  | ?>
 | ||||||
|  | 
 | ||||||
|  | <form action="lib/reports.php" method="GET" target="_BLANK"> | ||||||
|  |     <div class="row"> | ||||||
|  |         <div class="col-xs-12 col-sm-6"> | ||||||
|  |             <label for="type"><?php lang("report type"); ?></label>
 | ||||||
|  |             <select name="type" class="form-control" required> | ||||||
|  |                 <option value="item"><?php lang("items") ?></option>
 | ||||||
|  |                 <option value="category"><?php lang("categories") ?></option>
 | ||||||
|  |                 <option value="location"><?php lang("locations") ?></option>
 | ||||||
|  |                 <option value="itemstock"><?php lang("understocked items") ?></option>
 | ||||||
|  |             </select> | ||||||
|  |         </div> | ||||||
|  |         <div class="col-xs-12 col-sm-6"> | ||||||
|  |             <label for="type"><?php lang("format"); ?></label>
 | ||||||
|  |             <select name="format" class="form-control" required> | ||||||
|  |                 <option value="csv"><?php lang("csv file") ?></option>
 | ||||||
|  |                 <option value="ods"><?php lang("ods file") ?></option>
 | ||||||
|  |                 <option value="html"><?php lang("html file") ?></option>
 | ||||||
|  |             </select> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  |     <br /> | ||||||
|  |     <?php | ||||||
|  |     $code = uniqid(rand(10000000,99999999), true); | ||||||
|  |     $database->insert('report_access_codes', ['code' => $code, 'expires' => date("Y-m-d H:i:s", strtotime("+5 minutes"))]); | ||||||
|  |     ?>
 | ||||||
|  |     <input type="hidden" name="code" value="<?php echo $code; ?>" /> | ||||||
|  |      | ||||||
|  |     <button type="submit" class="btn btn-success" id="genrptbtn"><i class="fa fa-download"></i> <?php lang("generate report"); ?></button>
 | ||||||
|  | </form> | ||||||
							
								
								
									
										9
									
								
								static/js/export.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								static/js/export.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | /* This Source Code Form is subject to the terms of the Mozilla Public | ||||||
|  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||||
|  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | ||||||
|  | 
 | ||||||
|  | $("#genrptbtn").click(function () { | ||||||
|  |     setTimeout(function () { | ||||||
|  |         window.location.reload(); | ||||||
|  |     }, 1000) | ||||||
|  | }); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user