5051 lines
276 KiB
PHP
5051 lines
276 KiB
PHP
<?php
|
||
/** \file scripts\page\report.php
|
||
* \brief DI webinterface report script.
|
||
* \author Rob Schalken, Core|Vision
|
||
* \version 1.0
|
||
* \date 17-10-2008
|
||
*
|
||
* This file contains the report scripts.
|
||
*/
|
||
|
||
require_once("pdf.php");
|
||
require_once("plot-temp.php");
|
||
|
||
/**
|
||
* Generate report header
|
||
*/
|
||
function report_header($data = NULL) {
|
||
global $_PAGE_INFO;
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
pdf_page_header($data['subject'], $data['header'], $data['data']);
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
if ((isset($data['header'])) && (strlen($data['header']))) {
|
||
$_PAGE_INFO['document'] .= _($data['header']) . "\n";
|
||
}
|
||
|
||
if (is_array($data['data'])) {
|
||
for($i=0; $i < sizeof($data['data']); $i++) {
|
||
for($j=0; $j < sizeof($data['data'][$i]); $j++) {
|
||
// Add comma
|
||
if ($j) {
|
||
$_PAGE_INFO['document'] .= ",";
|
||
}
|
||
// Add data
|
||
$_PAGE_INFO['document'] .= _($data['data'][$i][$j]);
|
||
}
|
||
// Add EOL
|
||
$_PAGE_INFO['document'] .= "\n";
|
||
}
|
||
}
|
||
|
||
// Add empty lines
|
||
if (strlen($_PAGE_INFO['document'])) {
|
||
$_PAGE_INFO['document'] .= "\n\n";
|
||
}
|
||
|
||
// Send header
|
||
if ($_PAGE_INFO['dest'] != "S") {
|
||
download_document_header("text/csv", $_PAGE_INFO['file']);
|
||
download_document_data($_PAGE_INFO['document']);
|
||
$_PAGE_INFO['document'] = "";
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Generate report data
|
||
*/
|
||
function report_data($data) {
|
||
global $_PAGE_INFO;
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Document data
|
||
if (is_array($data)) {
|
||
if ((!isset($data['thick_line'])) || (!$data['thick_line'])) {
|
||
// default values
|
||
$html = (is_array($data['ishtml'])) ? $data['ishtml'] : "";
|
||
$cellheight = (isset($data['cell_height'])) ? $data['cell_height'] : 16;
|
||
$nr_lines = (isset($data['nr_lines'])) ? $data['nr_lines'] : 1;
|
||
$new_page_hdr = (isset($data['new_page_hdr'])) ? $data['new_page_hdr'] : "";
|
||
|
||
// Print line
|
||
pdf_print_line($data['value'], $data['border'], $data['bold'], $data['align'], $data['font_size'], $data['cell_width'], $cellheight, $data['check_page_end'], $html, $nr_lines, $new_page_hdr, $data['styling_options']);
|
||
}
|
||
else {
|
||
// Print thick line
|
||
pdf_print_line(array(""),array("LRBT"), "", "", "", "", 2, "", 0, 0);
|
||
}
|
||
}
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
$separator = (isset($_PAGE_INFO['report_separator'])) ? $_PAGE_INFO['report_separator'] : ",";
|
||
|
||
if (is_array($data)) {
|
||
// Remove comma from text
|
||
$data['value'] = str_replace($separator , " ", $data['value']);
|
||
|
||
if ((!isset($data['thick_line'])) || (!$data['thick_line'])) {
|
||
// Print line
|
||
for($i=0; $i < sizeof($data['value']); $i++) {
|
||
// Add comma
|
||
if ($i) {
|
||
$_PAGE_INFO['document'] .= $separator;
|
||
}
|
||
// Add data
|
||
$_PAGE_INFO['document'] .= _($data['value'][$i]);
|
||
}
|
||
// Add EOL
|
||
$_PAGE_INFO['document'] .= "\n";
|
||
}
|
||
else {
|
||
// Skip thick line
|
||
}
|
||
|
||
// Send data
|
||
if ($_PAGE_INFO['dest'] != "S") {
|
||
download_document_data($_PAGE_INFO['document']);
|
||
$_PAGE_INFO['document'] = "";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Generate report data, multi-line aware
|
||
*/
|
||
function report_text($data)
|
||
{
|
||
GLOBAL $_PAGE_INFO;
|
||
|
||
if( !is_array($data) || count($data['value']) > 1 /* too complicated for now */ ) {
|
||
report_data($data);
|
||
}
|
||
else {
|
||
// expand 'data' or multiple data items
|
||
$report_data = array();
|
||
|
||
// expand 'data' by dividing the 'value' into multiple lines
|
||
for( $i = 0; $i < count($data['value']); $i++ ) {
|
||
// reset line counter
|
||
$line_nr = 0;
|
||
|
||
$paragraphs = preg_split("/((\n|\n\r|\r\n|\r)|<br.*>)/", $data['value'][$i]);
|
||
foreach( $paragraphs as $str ) {
|
||
// initialize, when needed
|
||
if( $line_nr == count($report_data) ) $report_data[$line_nr] = array('value' => array());
|
||
|
||
do {
|
||
if( is_array($data['cell_width']) )
|
||
$cell_width = $data['cell_width'][$i];
|
||
else
|
||
$cell_width = 180;
|
||
$max_len = ($cell_width * 5) / $data['font_size'][$i]; // appears to be about right
|
||
|
||
$line_prefix = shorten_text($str, $max_len, SHORTEN_NARROW | SHORTEN_NO_SUFFIX, FALSE);
|
||
$n = strlen($line_prefix);
|
||
if( $n == strlen($str) || $n == 0 /* no expected; prevent problems below */ ) {
|
||
// whole line
|
||
$report_data[$line_nr++]['value'][$i] = $str;
|
||
$str = NULL; // break out of the do/while loop
|
||
}
|
||
else {
|
||
// find the last space, which may fall right behind the last word, hence the "+1"
|
||
$n = strrpos(substr($str, 0, strlen($line_prefix) + 1), " ");
|
||
if( !$n ) {
|
||
// no space found; break at the number of characters found before
|
||
$n = strlen($line_prefix);
|
||
}
|
||
|
||
// copy this line and remove it from the text
|
||
$report_data[$line_nr++]['value'][$i] = substr($str, 0, $n);
|
||
$str = substr($str, $n + 1);
|
||
}
|
||
} while( $str );
|
||
}
|
||
}
|
||
|
||
// print the data
|
||
for( $i = 0; $i < count($report_data); $i++ ) {
|
||
// copy the rest of the 'data' fields
|
||
foreach( $data as $item => $value ) {
|
||
// Determine cell height
|
||
$height = (isset($data['height'])) ? $data['height'] : 16;
|
||
|
||
// Remove bottom border when multiple lines!
|
||
// Exception is EOF
|
||
if (($item == 'border') && (($_PAGE_INFO['height'] - (2 * $height)) >= PDF_MARGIN_BOTTOM)) {
|
||
$report_data[$i][$item] = ((($i + 1) >= count($report_data)) ? $value : str_replace("B", "", $value));
|
||
}
|
||
else if( $item != 'value' )
|
||
$report_data[$i][$item] = $value;
|
||
}
|
||
|
||
// print it
|
||
report_data($report_data[$i]);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Fill in specific fields (rest filled up with empty space)
|
||
* This function is specific created for CSV files
|
||
*/
|
||
function report_data_field($all_fields, $report_data, $items = NULL) {
|
||
global $_PAGE_INFO;
|
||
|
||
// Initial value
|
||
$first = TRUE;
|
||
$data = array();
|
||
|
||
if ((is_array($all_fields)) && (is_array($items))) {
|
||
foreach($all_fields as $field) {
|
||
// Field available?
|
||
$pos = array_search($field, $items);
|
||
if ($pos !== FALSE) {
|
||
array_push($data, $report_data['value'][$pos]);
|
||
}
|
||
else {
|
||
array_push($data, "");
|
||
}
|
||
}
|
||
|
||
// Generate data
|
||
report_data(array(value => $data));
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* report new page
|
||
*/
|
||
function report_new_page() {
|
||
global $_PAGE_INFO;
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
pdf_page_new();
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Generate report
|
||
*/
|
||
function report_generate() {
|
||
global $_PAGE_INFO;
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Download file
|
||
$result = pdf_page_footer($_PAGE_INFO['file'], $_PAGE_INFO['dest']);
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
if ($_PAGE_INFO['dest'] == "S") {
|
||
$result = $_PAGE_INFO['document'];
|
||
}
|
||
}
|
||
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
* Empty line
|
||
*/
|
||
function empty_line($nmr = 1, $thick_line = 0) {
|
||
for ($i = 0; $i < $nmr; $i++) {
|
||
report_data(array(value => array("") ,
|
||
border => array("") ,
|
||
bold => "" ,
|
||
align => "" ,
|
||
font_size => "" ,
|
||
cell_width => "" ,
|
||
check_page_end => 0 ,
|
||
thick_line => $thick_line ));
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the elektronics test result report
|
||
*/
|
||
function report_calibration($calib, $filename) {
|
||
global $_PAGE_INFO;
|
||
|
||
// Retrieve calibration info
|
||
$lance = db_fetch_lance($calib['zkl'], "", 1);
|
||
$user = db_fetch_user($calib['gebruiker'], "", 1);
|
||
$customer = db_fetch_customer($user['klant'], 1);
|
||
$type = db_fetch_system_devices($_PAGE_INFO['i18n'], $lance['device']);
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = "pdf";
|
||
$_PAGE_INFO['dest'] = "S";
|
||
$_PAGE_INFO['file'] = $filename . ".pdf";
|
||
|
||
// Split up filename => create reference
|
||
$file = split("-", $filename);
|
||
|
||
// Create header info
|
||
$idcode = ($lance['idcode'] == $lance['serienr']) ? $lance['idcode'] : $lance['idcode'] . " - " . $lance['serienr'];
|
||
report_header(array(subject => "Elektronics test report" ,
|
||
header => _("Elektronics test report") . " - " . $type[0]['naam'] ,
|
||
data => array( array("Date", $calib['datum']) ,
|
||
array("ID code", $idcode) ,
|
||
array("Tester", getUser($user['id'])) ,
|
||
array("Reference", $file[0] . "-" . $lance['serienr']))));
|
||
|
||
// Test results header
|
||
report_data(array(value => array(_("Elektronics test results") . " - " . $type[0]['naam']) ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(16) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
empty_line();
|
||
|
||
report_data(array(value => array("Description","Result","Remark") ,
|
||
border => array("B","LB","LB") ,
|
||
bold => array(1,1,1) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(60,50,70) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
// Get all test results
|
||
$tests = array(array("batt" , ""),
|
||
array("led_batt_low" , ""),
|
||
array("gsm_gprs" , ""),
|
||
array("gps" , ""),
|
||
array("sd_card" , ""),
|
||
array("auto_calib_info" , ""),
|
||
array("weerstand" , ""),
|
||
array("detectie" , " < " . $calib['weerstand_ok'] . " mOhm"),
|
||
array("meetdraad_links" , ""),
|
||
array("meetdraad_rechts" , ""),
|
||
array("kortsluitdraad" , ""),
|
||
array("sleutelschakelaar", ""),
|
||
array("led_meting" , ""));
|
||
|
||
if (is_array($tests)) {
|
||
$test_results = array();
|
||
foreach ($tests as $test) {
|
||
switch($test[0])
|
||
{
|
||
case "batt":
|
||
for ($i = 0; $i < $type[0]['nr_batterijen']; $i++) {
|
||
array_push($test_results, array(_("Battery") . " " . ($i + 1) . " " . _("contact"), $calib['batterijen'] & pow(2,$i) ? "ok" : "nok", ""));
|
||
}
|
||
break;
|
||
case "led_batt_low":
|
||
case "gsm_gprs":
|
||
case "gps":
|
||
case "sd_card":
|
||
case "led_meting":
|
||
case "sleutelschakelaar":
|
||
if (strlen($calib[$test[0]])) {
|
||
array_push($test_results, array($test[0], $calib[$test[0]], $test[1]));
|
||
}
|
||
break;
|
||
case "auto_calib_info":
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
array_push($test_results, array($test[0], (((float)($calib['b_a'])) && ((float)($calib['freq']))) ? "b/a: " . $calib['b_a'] . ", freq: " . $calib['freq'] : "", $test[1]));
|
||
}
|
||
break;
|
||
case "weerstand":
|
||
case "meetdraad_links":
|
||
case "meetdraad_rechts":
|
||
case "kortsluitdraad":
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
array_push($test_results, array(_($test[0]) . " (mohm)", ((float)$calib[$test[0]]) ? $calib[$test[0]] : "", $test[1]));
|
||
}
|
||
break;
|
||
case "detectie":
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
array_push($test_results, array(_("Threshold") . " (mohm)", ((float)$calib[$test[0]]) ? $calib[$test[0]] : "", $test[1]));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Store values
|
||
if (is_array($test_results)) {
|
||
foreach($test_results as $test_result) {
|
||
report_data(array(value => $test_result ,
|
||
border => array("B","LB","LB") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(60,50,70) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
}
|
||
|
||
empty_line();
|
||
|
||
// Overall result
|
||
report_data(array(value => array(_("Electronics test result") . ":",$calib['algemene_status']),
|
||
border => array("","") ,
|
||
bold => array(1,1) ,
|
||
align => array("L","L") ,
|
||
font_size => array(12,12) ,
|
||
cell_width => array(70,110) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
empty_line();
|
||
|
||
// Print conclusion/remark/recommendation box
|
||
report_data(array(value => array("Remarks / conclusion / Recommendations") ,
|
||
border => array("LBRT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
// Calculate number of lines
|
||
$lines = nmr_lines($calib['commentaar'],115);
|
||
|
||
// Fill array
|
||
if (sizeof($lines) < 3) {
|
||
do {
|
||
array_push($lines, "");
|
||
}
|
||
while(sizeof($lines) < 3);
|
||
}
|
||
|
||
for($i = 0; $i < sizeof($lines); $i++) {
|
||
report_data(array(value => array($lines[$i]) ,
|
||
border => (($i + 1) == sizeof($lines)) ? array("LRB") : array("LR") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
// Generate document
|
||
$result['document'] = report_generate();
|
||
$result['filename'] = $_PAGE_INFO['file'];
|
||
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the endcontrol/certificate result report
|
||
*/
|
||
function report_endcontrol_certificate($endcontrol, $calib, $filename) {
|
||
global $_PAGE_INFO;
|
||
|
||
// Retrieve calibration info
|
||
$lance = db_fetch_lance($endcontrol['zkl'], "", 1);
|
||
$user = db_fetch_user($endcontrol['gebruiker'], "", 1);
|
||
$customer = db_fetch_customer($user['klant'], 1);
|
||
$type = db_fetch_system_devices($_PAGE_INFO['i18n'], $lance['device']);
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = "pdf";
|
||
$_PAGE_INFO['dest'] = "S";
|
||
$_PAGE_INFO['file'] = $filename . ".pdf";
|
||
|
||
// Split up filename => create reference
|
||
$file = split("-", $filename);
|
||
|
||
// Create header info
|
||
$idcode = ($lance['idcode'] == $lance['serienr']) ? $lance['idcode'] : $lance['idcode'] . " - " . $lance['serienr'];
|
||
report_header(array(subject => "Delivery report" ,
|
||
header => strtoupper(_("Delivery report")) . " - " . $type[0]['naam'] ,
|
||
data => array( array("Date", $endcontrol['datum']) ,
|
||
array("ID code", $idcode) ,
|
||
array("Tester", getUser($user['id'])) ,
|
||
array("Reference", $file[0] . "-" . $lance['serienr']))));
|
||
|
||
// Functional test results header
|
||
report_data(array(value => array(_("Control function") . " " . $type[0]['naam']) ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(12) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
empty_line();
|
||
|
||
report_data(array(value => array("Description"," " . _("Agreement")," " . _("Remarks")) ,
|
||
border => array("","L","L") ,
|
||
bold => array(1,1,1) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(70,24,86) ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
report_data(array(value => array(""," " . _("Yes") . " / " . _("No"),"") ,
|
||
border => array("B","LB","LB") ,
|
||
bold => array(1,1,1) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(70,24,86) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
|
||
// Get all test results
|
||
$tests = array(array("led_meting" , ""),
|
||
array("batt" , ""),
|
||
array("arretering" , ""),
|
||
array("afsluitbaar" , ""),
|
||
array("gsm_gprs" , ""));
|
||
|
||
if (is_array($tests)) {
|
||
$test_results = array();
|
||
foreach ($tests as $test) {
|
||
switch($test[0])
|
||
{
|
||
case "led_meting":
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting","led"))) {
|
||
array_push($test_results, array("Green led blinks by shortcircuit", ($endcontrol['led_meting'] == "ok") ? "x" : "", "", "", $test[1]));
|
||
}
|
||
break;
|
||
case "batt":
|
||
for ($i = 0; $i < $type[0]['nr_batterijen']; $i++) {
|
||
array_push($test_results, array(_("Battery") . " " . ($i + 1) . " " . _("operates"), $calib['batterijen'] & pow(2,$i) ? "x" : "", "", "", $test[1]));
|
||
}
|
||
break;
|
||
case "arretering":
|
||
if (db_check_system_device_capabilities($lance['device'],array("afsluitbaar"))) {
|
||
array_push($test_results, array(_("Detent") . " " . _("operates"), ($endcontrol['arretering'] == "ok") ? "x" : "", "", "", $test[1]));
|
||
}
|
||
break;
|
||
case "afsluitbaar":
|
||
if (db_check_system_device_capabilities($lance['device'],array("afsluitbaar"))) {
|
||
array_push($test_results, array(_("The") . " " . $type[0]['naam'] . " " . _("is lockable"), ($endcontrol['afsluitbaar'] == "ok") ? "x" : "", "", "", $test[1]));
|
||
}
|
||
break;
|
||
case "gsm_gprs":
|
||
if (db_check_system_device_capabilities($lance['device'],array("afsluitbaar"))) {
|
||
array_push($test_results, array("SMS" . " " . _("operates"), ($calib['gsm_gprs'] == "ok") ? "x" : "", "", "", $test[1]));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Store values
|
||
if (is_array($test_results)) {
|
||
foreach($test_results as $test_result) {
|
||
report_data(array(value => $test_result ,
|
||
border => array("B","LB","LB","LB") ,
|
||
bold => array(0,0,0,0) ,
|
||
align => array("L","C","C","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(70,12,12,86) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
}
|
||
|
||
empty_line();
|
||
|
||
// Print conclusion/remark/recommendation box
|
||
report_data(array(value => array("Remarks / conclusion / Recommendations") ,
|
||
border => array("LBRT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
// Calculate number of lines
|
||
$lines = nmr_lines($endcontrol['commentaar'],115);
|
||
|
||
// Fill array
|
||
if (sizeof($lines) < 3) {
|
||
do {
|
||
array_push($lines, "");
|
||
}
|
||
while(sizeof($lines) < 3);
|
||
}
|
||
|
||
for($i = 0; $i < sizeof($lines); $i++) {
|
||
report_data(array(value => array($lines[$i]) ,
|
||
border => (($i + 1) == sizeof($lines)) ? array("LRB") : array("LR") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
empty_line(2);
|
||
|
||
// Certificate
|
||
report_data(array(value => array(_("Security certificate") . " " . $type[0]['naam']) ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(12) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
empty_line();
|
||
report_data(array(value => array(_("Safety declaration of the mentioned above") . " " . $type[0]['naam']),
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
empty_line();
|
||
|
||
// Certificate text
|
||
report_data(array(value => array(ucwords($_PAGE_INFO['skin_name']) . " " . _("announces that the") . " " . $type[0]['naam'] . " " . _("mentioned above confirms the requested security isues,")),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
report_data(array(value => array("provided that the electronic housing has been sealed by at least two \"approved until\" stickers with identical"),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
report_data(array(value => array(_("non-expired data and that the") . " " . $type[0]['naam'] . " " . _("has been used as described in a valid user manual.")),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
else {
|
||
report_data(array(value => array(_("provided that the electronic housing has no visual damage and the") . " " . $type[0]['naam'] . " " . _("has been used as described in a valid user manual.")),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
empty_line();
|
||
// Certificate requirements/Next calibration data
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
// which date comes first "next service" or "switch 3000 cells replace"?
|
||
report_data(array(value => array("", "", "Security requirements", _("Next service date") . ": " . strip_time(NextService($lance['onderhoud'],$lance['sw3000_onderhoud']))),
|
||
border => array("","","","") ,
|
||
bold => array(0,0,1,1) ,
|
||
align => array("L","L","L","L") ,
|
||
font_size => array(9,9,9,9) ,
|
||
cell_width => array(10,2,78,90) ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
else {
|
||
report_data(array(value => array("", "", "Security requirements") ,
|
||
border => array("","","") ,
|
||
bold => array(0,0,1) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,2,60) ,
|
||
cell_height => 12 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
empty_line();
|
||
|
||
if (db_check_system_device_capabilities($lance['device'],array("meting"))) {
|
||
report_data(array(value => array("", "", _("Measure value") . " < " . round($calib['weerstand_cert']) . " milliohm"),
|
||
border => array("","B","B") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,2,60) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
report_data(array(value => array("", "", "89/336/EEG EMC-directives") ,
|
||
border => array("", "B", "B") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,2,60) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
report_data(array(value => array("", "", "72/23/EEG Low voltage-directives") ,
|
||
border => array("","B","B") ,
|
||
bold => array(0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,2,60) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
report_data(array(value => array("", "","CE-Marking") ,
|
||
border => array("","B","B") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,2,60) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
empty_line();
|
||
|
||
// Client declares
|
||
report_data(array(value => array("The Client declares that:") ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
report_data(array(value => array("- " . _("the goods to be delivered have been examined and approved.")),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
report_data(array(value => array("- " . _("the Dual Inventive General Terms and Conditions 2010-08-26 on the website of Dual Inventive have been read and accepted.")),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
empty_line();
|
||
|
||
report_data(array(value => array("", "Name","Date") ,
|
||
border => array("","","") ,
|
||
bold => array(1,1,1) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(9,9,9) ,
|
||
cell_width => array(10,60,110) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
// Generate document
|
||
$result['document'] = report_generate();
|
||
$result['filename'] = $_PAGE_INFO['file'];
|
||
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the material overview
|
||
*/
|
||
function report_material_overview() {
|
||
global $_PAGE_INFO;
|
||
|
||
// Retrieve info
|
||
$date = date('Y-m-d');
|
||
$datetime = date('Y-m-d / H:i:s');
|
||
$customer = db_fetch_customer($_PAGE_INFO['login']['customer']['id'], 1);
|
||
$user = db_fetch_user($_PAGE_INFO['login']['user']['id'], "", 1);
|
||
$projects = db_fetch_projects("", $_PAGE_INFO['login']['customer']['id'], 1);
|
||
$double = db_fetch_project_double_assigned_lances($_PAGE_INFO['login']['customer']['id']);
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = "pdf";
|
||
$_PAGE_INFO['dest'] = "D";
|
||
$_PAGE_INFO['file'] = _("Equip_overview") . "_" . strtoupper($customer['klantnaam']) . "_" . str_replace("-", "", $date) . ".pdf";
|
||
|
||
// Create header info
|
||
report_header(array(subject => "Equipment overview" ,
|
||
header => _("Equipment overview") . " - " . $customer['bedrijfsnaam'] ,
|
||
data => array( array("Date", $datetime) ,
|
||
array("User", getUser($user['id'])))));
|
||
|
||
if (is_array($projects)) {
|
||
foreach($projects as $project) {
|
||
// Add project to report
|
||
report_data(array(value => array(_("Project") . ": " . $project['naam']) ,
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(11) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
|
||
// Retrieve all device types
|
||
$types = db_fetch_system_devices($_PAGE_INFO['i18n']);
|
||
|
||
// Determine amount per device type (non-rented & active!!)
|
||
if (is_array($types)) {
|
||
foreach($types as $type) {
|
||
$equipement = db_fetch_project_lances($project['id'], $type['id'], "", 1, array("actief"), array("actief"));
|
||
if (is_array($equipement)) {
|
||
// Add equipment type to report
|
||
report_data(array(value => array("", "-" . $type['naam']) ,
|
||
border => array("LT","RT") ,
|
||
bold => array(0,1) ,
|
||
align => array("L","L") ,
|
||
font_size => array(11,11) ,
|
||
cell_width => array(10,170) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
foreach($equipement as $item) {
|
||
$idcode = $item['idcode'];
|
||
if (is_array($double)) {
|
||
if (in_array($item['id'], $double)) {
|
||
$idcode .= " (" . _("Multiple project assignments") . "!!)";
|
||
}
|
||
}
|
||
// Add idcode
|
||
report_data(array(value => array("","", $idcode) ,
|
||
border => array("L","LRBT","RBT") ,
|
||
bold => array(0,0) ,
|
||
align => array("L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(20,5,155) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
}
|
||
// Fill up last line
|
||
report_data(array(value => array("","", "") ,
|
||
border => array("T","T","T") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => "" ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 0 ));
|
||
}
|
||
}
|
||
}
|
||
|
||
// Generate document
|
||
report_generate();
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the equipment report
|
||
*/
|
||
function report_equipment($report_info) {
|
||
GLOBAL $_PAGE_INFO;
|
||
|
||
// Give the script some extra memory and execution time
|
||
ini_set("memory_limit","2048M");
|
||
ini_set("max_execution_time","120");
|
||
|
||
// Definitions
|
||
define("MEASUREMENT" ,0x00);
|
||
define("DETECTION" ,0x01);
|
||
define("GPS" ,0x02);
|
||
define("BATTERY" ,0x03);
|
||
define("SHORTCIRCUIT" ,0x04);
|
||
define("SMS" ,0x05);
|
||
define("KEYSWITCH" ,0x06);
|
||
|
||
// Bitmasks!
|
||
define("OK" ,0x00);
|
||
define("UNFINISHED_BEG" ,0x01);
|
||
define("UNFINISHED_END" ,0x02);
|
||
define("SERVER_TIME_BEG" ,0x04);
|
||
define("SERVER_TIME_END" ,0x08);
|
||
define("CON_HICKUP" ,0x10);
|
||
define("MEAS_HICKUP" ,0x20);
|
||
|
||
define("FIND_BEGIN" ,0x00);
|
||
define("FIND_END" ,0x01);
|
||
define("FIND_EVENT" ,0x02);
|
||
|
||
define("OPERATIONAL" ,0x00);
|
||
define("ON" ,0x04);
|
||
define("OFF" ,0x08);
|
||
|
||
// Get log data from the "report" database
|
||
db_connect("report", "log");
|
||
|
||
// Retreive customer/date(time) information
|
||
$customer = db_fetch_customer($report_info['customer'], 1);
|
||
$date = date('Y-m-d');
|
||
$datetime = date('Y-m-d H:i:s');
|
||
|
||
// Define begin and end of report period
|
||
$begin_period = "";
|
||
$end_period = "";
|
||
if (strlen($report_info['begin_datum'])) {
|
||
$begin_period = $report_info['begin_datum'] . " " . $report_info['begin_tijd'] . ":00";
|
||
}
|
||
if (strlen($report_info['eind_datum'])) {
|
||
$end_period = $report_info['eind_datum'] . " " . $report_info['eind_tijd'] . ":00";
|
||
}
|
||
|
||
// Store original begin/end period
|
||
$orig_begin_period = $begin_period;
|
||
$orig_end_period = $end_period;
|
||
|
||
// Define item period header
|
||
$period = ((strlen($begin_period)) || (strlen($end_period))) ? " (" . _("period") . " " : "";
|
||
$period .= (strlen($begin_period)) ? _("from") . " " . $begin_period : "";
|
||
$period .= (strlen($end_period)) ? " " : "";
|
||
$period .= (strlen($end_period)) ? _("till") . " " . $end_period : "";
|
||
$period .= ((strlen($begin_period)) || (strlen($end_period))) ? ")" : "";
|
||
|
||
// Set output file info
|
||
$_PAGE_INFO['report_type'] = $report_info['report_type'];
|
||
$_PAGE_INFO['file'] = _("Equip_journal") . "_" . strtoupper($customer['klantnaam']) . "_" . str_replace("-", "",$date) . "." . $_PAGE_INFO['report_type'];
|
||
$_PAGE_INFO['dest'] = $report_info['dest'];
|
||
$_PAGE_INFO['document'] = "";
|
||
|
||
// Clear/delete array
|
||
$_PAGE_INFO['delete'] = array();
|
||
|
||
// Clear/delete debug info
|
||
if (isset($_SESSION[$_PAGE_INFO['id']]['log'])) {
|
||
// Restart session
|
||
SessionStart();
|
||
|
||
unset($_SESSION[$_PAGE_INFO['id']]['log']);
|
||
|
||
// Stop session
|
||
SessionStop();
|
||
}
|
||
|
||
// Retrieve all device types
|
||
$types = db_fetch_system_devices($report_info['i18n']);
|
||
|
||
// Create header info
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_header(array(subject => "Log equipment" ,
|
||
header => _("Log equipment") . " - " . $customer['bedrijfsnaam'] ,
|
||
data => array( array("Date", str_replace(" ", " / ", $datetime)) ,
|
||
array("Timezone", ucfirst($customer['tz'])) ,
|
||
array("MTinfo", strtoupper((is_ReleaseCandidate() ? $_SESSION[$_PAGE_INFO['id']]['release_dir'] : VERSION))),
|
||
array("User", getUser($_PAGE_INFO['login']['user']['id'])))));
|
||
|
||
}
|
||
else {
|
||
// Define variables for first header
|
||
$header_top_date = _('Date')." : ".$datetime;
|
||
$header_top_timezone = _('Timezone')." : ".ucfirst($customer['tz']);
|
||
$header_top_version = "MTinfo : ".VERSION.(is_ReleaseCandidate() ? " - " . $_SESSION[$_PAGE_INFO['id']]['release_dir'] : "");
|
||
$header_top_user = _('User')." : ".getUser($_PAGE_INFO['login']['user']['id']);
|
||
$header_top_start = _('Start report period')." : ".$begin_period;
|
||
$header_top_end = _('End report period')." : ".$end_period;
|
||
|
||
// Define first header
|
||
$header_top = array($header_top_date,$header_top_timezone,$header_top_version,$header_top_user,$header_top_start,$header_top_end);
|
||
|
||
// Define second header
|
||
$all_fields = array("Timestamp", "Company", _("ID code")." ".ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name']), _("ID code")." "._("owner"), "Equipment type");
|
||
|
||
if (is_array($types)) {
|
||
// Check if measurement is selected
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
if ((isset($report_info["switch_status_" . $type['id']])) && !(isset($header_measurement))) {
|
||
array_push($all_fields, "Measurement",_('Duration')." ".strtolower(_('Measurement')));
|
||
$header_measurement = TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if detection is selected
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
if ((isset($report_info["short_circuit_status_" . $type['id']])) && !(isset($header_detection))) {
|
||
array_push($all_fields, "detection",_('Duration')." "._('detection'));
|
||
$header_detection = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if short circuit is selected
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
if ((isset($report_info["relais_status_" . $type['id']])) && !(isset($header_short_circuit))) {
|
||
array_push($all_fields, "short circuit");
|
||
$header_short_circuit = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if battery is selected
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
if ((isset($report_info["battery_status_" . $type['id']])) && !(isset($header_battery))) {
|
||
array_push($all_fields, "Battery");
|
||
$header_battery = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if detection is selected because gps is linked to detection
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
if ((isset($report_info["short_circuit_status_" . $type['id']])) && !(isset($header_gps))) {
|
||
array_push($all_fields, "Gps");
|
||
$header_gps = TRUE;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// if nothing is set erase array $all_fields, so print nothing
|
||
if (!isset($header_measurement) && !isset($header_detection) && !isset($header_short_circuit) && !isset($header_battery) && !isset($header_gps) ) {
|
||
unset($all_fields);
|
||
}
|
||
else {
|
||
// Capitalize second header
|
||
$all_fields_cap = array();
|
||
foreach($all_fields as $field) {
|
||
array_push($all_fields_cap, ucfirst(_($field)));
|
||
}
|
||
}
|
||
|
||
// Create document header
|
||
report_header();
|
||
|
||
// Create first line header
|
||
foreach ($header_top as $header_top_item => $header_top_value) {
|
||
report_data(array(value => array($header_top_value)));
|
||
}
|
||
|
||
// Empty line
|
||
empty_line();
|
||
|
||
// Create second line header
|
||
report_data(array(value => $all_fields_cap));
|
||
}
|
||
|
||
// Initial values
|
||
$first = TRUE;
|
||
$log_time_overall = FALSE;
|
||
$con_hickup_overall = FALSE;
|
||
$meas_hickup_overall = FALSE;
|
||
$log_rt = "";
|
||
$log_zkl = "";
|
||
|
||
if (is_array($types)) {
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id'] . "_left_ids"])) {
|
||
$items = split(",", $report_info[$type['id']. "_left_ids"]);
|
||
if (is_array($items)) {
|
||
foreach($items as $item) {
|
||
// Clear data
|
||
$csv_data = array();
|
||
|
||
// Check if equipment has valid status => needed for periodic reports!!!
|
||
$lance_status = (db_ver_rights_user_one_valid($_PAGE_INFO['login']['user']['id'], "menu:rapportages:root")) ? array("service","productie","winkel","actief","afgeschreven","verloren") : array("service","winkel","actief");
|
||
$lance_status = (isset($_PAGE_INFO['login']['project']['id'])) ? array("actief") : $lance_status;
|
||
$cust_status = (isset($_PAGE_INFO['login']['project']['id'])) ? array("actief") : "";
|
||
|
||
// Get lance info
|
||
$lance = db_fetch_lance($item, "", 1);
|
||
|
||
// Reset periods
|
||
$begin_period = $orig_begin_period;
|
||
$end_period = $orig_end_period;
|
||
|
||
// Is this a rented device? => Then show only periods in which it was rented
|
||
if (($lance['gebruiker'] == $_PAGE_INFO['login']['customer']['id']) && ($lance['eigenaar'] != $_PAGE_INFO['login']['customer']['id'])) {
|
||
// Get last log_versienumber
|
||
$log_versionnumber = db_fetch_lance_versionnumber($item, array(array("gebruiker")), TRUE);
|
||
// Define new begin period
|
||
if ((!strlen($begin_period)) || ($log_versionnumber['t'] > convert_datetime($begin_period))) {
|
||
$begin_period = convert_datetime($log_versionnumber['t'], TRUE);
|
||
}
|
||
|
||
// Define new end period
|
||
if ((strlen($end_period)) && ($log_versionnumber['t'] > convert_datetime($end_period))) {
|
||
$end_period = convert_datetime($log_versionnumber['t'], TRUE);
|
||
}
|
||
}
|
||
|
||
if ((in_array($lance['lans_status'], $lance_status)) && ((!is_array($cust_status)) || in_array($lance['klant_status'], $cust_status))) {
|
||
// Skip first because the header print empty lines, so no new page needed
|
||
if (!$first) {
|
||
// New page
|
||
report_new_page();
|
||
}
|
||
|
||
// Reset first flag
|
||
$first = FALSE;
|
||
|
||
// Fetch valid logfiles used in this period
|
||
if ((!isset($_SESSION[$_PAGE_INFO['id']]['table'])) || ($_SESSION[$_PAGE_INFO['id']]['table'] & 0x01)) {
|
||
$log_files = db_fetch_lance_log_files($item, $begin_period, $end_period);
|
||
|
||
// Save original log files(used with items which have only the log_zkl)
|
||
$log_files_corrupt = $log_files;
|
||
|
||
// Save non corrupted log files(used with items which have only the log_zkl)
|
||
$log_files_non_corrupt = $log_files;
|
||
}
|
||
|
||
// Do not skip when only log_zkl has been used
|
||
if ((!isset($_SESSION[$_PAGE_INFO['id']]['table'])) || ($_SESSION[$_PAGE_INFO['id']]['table'] != 0x01)) {
|
||
// Skip corrupt logs (now handled by the log_realtime)
|
||
$backup = $log_files;
|
||
$log_files = "";
|
||
if (is_array($backup)) {
|
||
foreach($backup as $log_file_item) {
|
||
// Check for corrupt entries
|
||
if (!db_check_lance_log_corrupted($item, $log_file_item['sdcard'], $log_file_item['rpgmcount'], $log_file_item['startup'])) {
|
||
// Create array when not exits
|
||
if (!is_array($log_files)) {
|
||
$log_files = array();
|
||
}
|
||
|
||
// Not corrupt => Add to array
|
||
array_push($log_files, $log_file_item);
|
||
}
|
||
else {
|
||
// Debug purposes
|
||
DBG("corrupted log (zkl: " . $item . ", sdcard: " . $log_file_item['sdcard'] . ", rpgmcount: " . $log_file_item['rpgmcount'] . ", startup: " . $log_file_item['startup'] . ")");
|
||
}
|
||
}
|
||
}
|
||
|
||
// Save non corrupted log files(used with items which have only the log_zkl)
|
||
$log_files_non_corrupt = $log_files;
|
||
}
|
||
|
||
// Fetch valid log_realtime entries used in this period (non-interpreted)
|
||
if ((!isset($_SESSION[$_PAGE_INFO['id']]['table'])) || ($_SESSION[$_PAGE_INFO['id']]['table'] & 0x02)) {
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get starting time
|
||
$log_start = microtime_float();
|
||
}
|
||
|
||
$log_rt = db_fetch_lance_logrt($item, 0, $begin_period, $end_period, FALSE);
|
||
|
||
// For debug purposes => store entries & logfiles
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get end time
|
||
$log_end = microtime_float();
|
||
|
||
// Debug info
|
||
DBG("Fetch " . $lance['idcode'] . " LOG_RT : " . ($log_end - $log_start) . "[s], items: " . sizeof($log_rt));
|
||
}
|
||
}
|
||
|
||
// Check next log_tcp and log_realtime entry (needed to detect end period)
|
||
if ((is_array($log_rt)) && strlen($end_period)) {
|
||
$next_log_rt = db_fetch_lance_logrt($item, 0, convert_datetime(convert_datetime($end_period)+1, TRUE), "", FALSE, 1);
|
||
$next_log_tcp = db_fetch_lance_tcp_status($item, convert_datetime($log_rt[sizeof($log_rt)-1]['t'], TRUE), TRUE);
|
||
}
|
||
|
||
// Check previous log_tcp and log_realtime entry (needed to detect begin period)
|
||
if ((is_array($log_rt)) && strlen($begin_period)) {
|
||
$prev_log_rt = db_fetch_lance_logrt($item, 1, "", convert_datetime(convert_datetime($begin_period)-1, TRUE), FALSE, 1);
|
||
$prev_log_tcp = db_fetch_lance_tcp_status($item, convert_datetime($log_rt[0]['t'], TRUE), FALSE);
|
||
}
|
||
|
||
// Init log_rt => Add first entry (needed for battery) to array?
|
||
if ((is_array($log_rt)) && (is_array($prev_log_rt)) && (is_array($prev_log_tcp))) {
|
||
// Previous log_tcp before previous log_realtime
|
||
if ($prev_log_tcp['t'] < $prev_log_rt[0]['t']) {
|
||
// Add entry
|
||
$log_rt = array_merge(array($prev_log_rt[0]), $log_rt);
|
||
|
||
// Adapt t value
|
||
// We can do this because there must be a begin_period value otherwhise there was no prev_log_rt value
|
||
$log_rt[0]['t'] = convert_datetime($begin_period);
|
||
}
|
||
}
|
||
|
||
// For debug purposes => store entries & logfiles
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Restart session
|
||
SessionStart();
|
||
|
||
$_SESSION[$_PAGE_INFO['id']]['log']['log_files'] = $log_files;
|
||
$_SESSION[$_PAGE_INFO['id']]['log']['prv_log_rt'] = $prev_log_rt;
|
||
$_SESSION[$_PAGE_INFO['id']]['log']['next_log_rt'] = $next_log_rt;
|
||
$_SESSION[$_PAGE_INFO['id']]['log']['prv_log_tcp'] = $prev_log_tcp;
|
||
$_SESSION[$_PAGE_INFO['id']]['log']['next_log_tcp'] = $next_log_tcp;
|
||
|
||
// Stop session
|
||
SessionStop();
|
||
}
|
||
|
||
|
||
/************************************/
|
||
/* Idcode/sts/owner/ect */
|
||
/************************************/
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Get material info
|
||
$info = db_fetch_lance($item, "", 1);
|
||
|
||
// Get idcode/realtime remark
|
||
$idcode = ($info['idcode'] == $info['serienr']) ? $info['idcode'] : $info['idcode'] . " - " . $info['serienr'];
|
||
$idcode .= (strlen($info['rtstatus'])) ? " (" . $info['rtstatus'] . ")" : "";
|
||
|
||
|
||
report_data(array(value => array($idcode) ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(11) ,
|
||
cell_width => array(70,110) ,
|
||
check_page_end => 0 ,
|
||
ishtml => array(array(type => "bookmark", data => $idcode, parent => 0, bold => 1)),
|
||
nr_lines => 2 ));
|
||
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT") ,
|
||
bold => array(0,0) ,
|
||
align => array("L","L") ,
|
||
font_size => array(8,8) ,
|
||
cell_width => array(70,110) ,
|
||
check_page_end => 1);
|
||
|
||
// Type equipement
|
||
report_data(array_merge($report_data, array(value => array("Equipment type", $type['naam']))));
|
||
|
||
// Owner
|
||
$owner = db_fetch_customer($info['eigenaar'], 1);
|
||
report_data(array_merge($report_data, array(value => array("Owner", ucfirst($owner['bedrijfsnaam'])))));
|
||
|
||
// Status
|
||
report_data(array_merge($report_data, array(value => array(_("Status") . " " . _("owner"), ucfirst(_($info['klant_status']))))));
|
||
|
||
// Device rented => Current user
|
||
if (($info['eigenaar'] != $info['gebruiker']) && (strlen($info['gebruiker']))) {
|
||
$rented_to = db_fetch_customer($info['gebruiker'], 1);
|
||
report_data(array_merge($report_data, array(value => array("Rented to", $rented_to['bedrijfsnaam']))));
|
||
}
|
||
|
||
// Next service date (which date comes first "next service" or "switch 3000 cells replace"?)
|
||
report_data(array_merge($report_data, array(value => array("Next service date", strip_time(NextService($info['onderhoud'],$info['sw3000_onderhoud']))))));
|
||
|
||
// Last contact MTinfo
|
||
$last_contact = "";
|
||
|
||
$last_log_zkl = db_fetch_lance_log_file_last_entry($item, "", "log_zkl");
|
||
$last_log_rt = db_fetch_lance_log_file_last_entry($item, "", "log_realtime");
|
||
|
||
if (is_array($last_log_zkl)) {
|
||
// Valid timestamp?
|
||
if (valid_gps_timestamp(convert_datetime($last_log_zkl['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$last_contact['zkl'] = convert_datetime($last_log_zkl['t'], TRUE);
|
||
}
|
||
}
|
||
|
||
if (is_array($last_log_rt)) {
|
||
$last_contact['rt'] = convert_datetime($last_log_rt['t'], TRUE);
|
||
|
||
// We now check the tcp connection during this period
|
||
if (!is_array(db_fetch_lance_tcp_status($item, $last_contact['rt'], TRUE))) {
|
||
// Session still active?
|
||
$last_contact['rt'] = $datetime;
|
||
}
|
||
}
|
||
|
||
// Detect the
|
||
$use_table = (convert_datetime($last_contact['rt']) > convert_datetime($last_contact['zkl'])) ? "rt" : "zkl";
|
||
|
||
report_data(array_merge($report_data, array(value => array("Last contact MTinfo 3000", $last_contact[$use_table]))));
|
||
}
|
||
|
||
/************************************/
|
||
/* Last known status */
|
||
/************************************/
|
||
// Item selected?
|
||
if (isset($report_info["last_status_" . $type['id']])) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
report_data(array(value => array(_("Last known status") . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _("Last known status") . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 2 ));
|
||
|
||
//
|
||
// Array containing last known status params
|
||
//
|
||
$LKS = array(array(item => MEASUREMENT,
|
||
report_txt => "Measurement on/off",
|
||
cap => "meting",
|
||
param => "",
|
||
def => "switched off",
|
||
log_rt_sts => (is_array($log_rt)) ? interpret_log_rt($log_rt[sizeof($log_rt)-1]) : "",
|
||
log_zkl_sts => (is_array($log_files)) ? db_fetch_lance_log_measurement_status($item, 0, 7, "", $end_period, array($log_files[sizeof($log_files)-1])) : ""),
|
||
array(item => DETECTION,
|
||
report_txt => "Detection status",
|
||
cap => "meting",
|
||
param => "",
|
||
def => "nok",
|
||
log_rt_sts => (is_array($log_rt)) ? interpret_log_rt($log_rt[sizeof($log_rt)-1]) : "",
|
||
log_zkl_sts => (is_array($log_files)) ? db_fetch_lance_log_shortcircuit_status($item, 0, "", $end_period, array($log_files[sizeof($log_files)-1])) : ""),
|
||
array(item => KEYSWITCH,
|
||
report_txt => "Key switch",
|
||
cap => "sleutelschakelaar",
|
||
param => "",
|
||
def => "Operational",
|
||
log_rt_sts => (is_array($log_rt)) ? interpret_log_rt($log_rt[sizeof($log_rt)-1]) : "",
|
||
log_zkl_sts => (is_array($log_files)) ? db_fetch_lance_log_keyswitch_status($item, 0, "", $end_period, array($log_files[sizeof($log_files)-1])) : ""),
|
||
array(item => GPS,
|
||
report_txt => "GPS position",
|
||
cap => "gps",
|
||
param => "",
|
||
def => "",
|
||
log_rt_sts => (is_array($log_rt)) ? interpret_log_rt($log_rt[sizeof($log_rt)-1]) : "",
|
||
log_zkl_sts => (is_array($log_files)) ? db_fetch_lance_log_gps_info($item, 0, "", $end_period, 1, array($log_files[sizeof($log_files)-1])) : ""));
|
||
|
||
//
|
||
// Add number of batteries to LKS array
|
||
//
|
||
if ($type['nr_batterijen']) {
|
||
for ($i = 0; $i < $type['nr_batterijen']; $i++) {
|
||
array_push($LKS, array(item => BATTERY,
|
||
report_txt => _("Battery") . " " . ($i+1) . " " . _("status"),
|
||
cap => "",
|
||
param => $i,
|
||
def => "removed",
|
||
log_rt_sts => (is_array($log_rt)) ? db_fetch("log_realtime", "*", "zkl='" . $item . "' and batt" . ($i + 1) . "_niveau is not NULL ORDER by id DESC LIMIT 1") : "",
|
||
log_zkl_sts => (is_array($log_files)) ? array(array(status => db_fetch_lance_log_battery_status($item, $i, 1, "", $end_period, array($log_files[sizeof($log_files)-1])),
|
||
V => db_fetch_lance_log_battery_info($item, $i, 1, "", $end_period, array($log_files[sizeof($log_files)-1])))) : ""));
|
||
}
|
||
}
|
||
|
||
// For debug purposes => store entries & logfiles
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Restart session
|
||
SessionStart();
|
||
|
||
$_SESSION[$_PAGE_INFO['id']]['LKS'] = $LKS;
|
||
|
||
// Stop session
|
||
SessionStop();
|
||
}
|
||
|
||
// Handle params item by item
|
||
foreach($LKS as $LKS_item) {
|
||
// Valid or no capability required
|
||
if ((!strlen($LKS_item['cap'])) || (db_check_system_device_capabilities($type['id'], $LKS_item['cap']))) {
|
||
// Initial values
|
||
$status = "";
|
||
$timestamp = "";
|
||
$hyperlink = "";
|
||
$default = "";
|
||
|
||
//
|
||
// LOG_ZKL (LKS)
|
||
//
|
||
if (is_array($LKS_item['log_zkl_sts'])) {
|
||
// Check items
|
||
foreach($LKS_item['log_zkl_sts'] as $log_zkl_sts) {
|
||
switch($LKS_item['item']) {
|
||
case MEASUREMENT:
|
||
// Parse major
|
||
switch($log_zkl_sts['major']) {
|
||
case MAJ_MEAS_ON:
|
||
$status['zkl'] = "switched on";
|
||
break;
|
||
// This includes no measure log entry and power up entry
|
||
default:
|
||
$status['zkl'] = "switched off";
|
||
break;
|
||
}
|
||
break;
|
||
case DETECTION:
|
||
// Parse majors (not possible to detect only last because of skipping errors)
|
||
switch($log_zkl_sts['major']) {
|
||
case MAJ_SHORTCIR_OK:
|
||
$status['zkl'] = "ok";
|
||
break;
|
||
// Only for debug purposes
|
||
case MAJ_SHORTCIR_ERROR:
|
||
break;
|
||
// This includes measurement faults
|
||
default:
|
||
$status['zkl'] = "nok";
|
||
break;
|
||
}
|
||
break;
|
||
case KEYSWITCH:
|
||
// Parse minors
|
||
switch($log_zkl_sts['minor']) {
|
||
case MIN_SWITCH3000_KEY_OP_ON:
|
||
$status['zkl'] = "On (overruled)";
|
||
break;
|
||
case MIN_SWITCH3000_KEY_OP_OFF:
|
||
$status['zkl'] = "Off (overruled)";
|
||
break;
|
||
default:
|
||
$status['zkl'] = "Operational";
|
||
break;
|
||
}
|
||
break;
|
||
case GPS:
|
||
$status['zkl'] = $log_zkl_sts['latitude'] . ", " . $log_zkl_sts['longitude'];
|
||
$hyperlink['zkl'] = array("",array(type => "link", data => GOOGLE_MAPS . "maps?q=" . $status['zkl'],""));
|
||
break;
|
||
case BATTERY:
|
||
if (is_array($log_zkl_sts['status'])) {
|
||
$status['zkl'] = _($log_zkl_sts['status'][0]['status']);
|
||
}
|
||
else {
|
||
$status['zkl'] = _($LKS_item['def']);
|
||
|
||
// Set flag
|
||
$default['zkl'] = TRUE;
|
||
}
|
||
|
||
if ($status['zkl'] != _("removed")) {
|
||
if (is_array($log_zkl_sts['V'])) {
|
||
$status['zkl'] .= " / " . $log_zkl_sts['V'][0]['niveau'] . " [V]";
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Fetch last log file entry
|
||
$last_entry = db_fetch_lance_log_file_last_entry($item, $log_files[sizeof($log_files)-1]);
|
||
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($last_entry['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['zkl'] = convert_datetime($last_entry['t'], TRUE);
|
||
|
||
// Clear log time flag
|
||
$log_time = FALSE;
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['zkl'] = convert_datetime($last_entry['t_log'], TRUE);
|
||
|
||
// Set log time flag
|
||
$log_time = TRUE;
|
||
}
|
||
|
||
// Exceed end of selected period?
|
||
// We can do this because then the begin is before the end of selected period, otherwhise this log files was not selected
|
||
if (strlen($end_period)) {
|
||
if (convert_datetime($timestamp['zkl']) > convert_datetime($end_period)) {
|
||
$timestamp['zkl'] = $end_period;
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Perform extra action LOG_ZKL?
|
||
//
|
||
switch($LKS_item['item']) {
|
||
case DETECTION:
|
||
// Be sure that the measurement was on!
|
||
if ((strlen($status['zkl'])) && ($status['zkl'] == "ok")) {
|
||
// Find out if the measurement was on (last entry before the requested timestamp in the same log file)
|
||
$measure_status = db_fetch_lance_log_measurement_status($item, 1, 7, "", $timestamp['zkl'], array($log_files[sizeof($log_files)-1]));
|
||
|
||
// Check measurement status
|
||
$status['zkl'] = ((is_array($measure_status)) && ($measure_status[0]['major'] == MAJ_MEAS_ON)) ? $status['zkl'] : "nok";
|
||
}
|
||
|
||
// Be sure the switch was on!
|
||
if ((strlen($status['zkl'])) && ($status['zkl'] == "ok") && (db_check_system_device_capabilities($type['id'], "kortsluiting schakelen"))) {
|
||
// Find out if the switch 3000 was on (last entry before the requested timestamp)
|
||
$switch_status = db_fetch_lance_switch3000_state($item, 1 , "", $timestamp['zkl']);
|
||
|
||
// Check redundant sections
|
||
$status['zkl'] = (($switch_status['state'] & 0x06 == 0x06) || ($switch_status['state'] & 0x09 == 0x09)) ? $status['zkl'] : "nok";
|
||
}
|
||
// No break on purpose => handle also default state
|
||
default:
|
||
// No array in the last log file => Default value (when available)
|
||
if ((is_array($log_files)) && (!is_array($LKS_item['log_zkl_sts']))) {
|
||
if (strlen($LKS_item['def'])) {
|
||
// Use default value
|
||
$status['zkl'] = $LKS_item['def'];
|
||
|
||
// Set flag
|
||
$default['zkl'] = TRUE;
|
||
|
||
// Fetch last log file entry
|
||
$last_entry = db_fetch_lance_log_file_last_entry($item, $log_files[sizeof($log_files)-1]);
|
||
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($last_entry['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['zkl'] = convert_datetime($last_entry['t'], TRUE);
|
||
|
||
// Clear log time flag
|
||
$log_time = FALSE;
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['zkl'] = convert_datetime($last_entry['t_log'], TRUE);
|
||
|
||
// Set log time flag
|
||
$log_time = TRUE;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
|
||
//
|
||
// LOG_REALTIME (LKS)
|
||
//
|
||
if (is_array($LKS_item['log_rt_sts'])) {
|
||
switch($LKS_item['item']) {
|
||
case MEASUREMENT:
|
||
$status['rt'] = $LKS_item['log_rt_sts']['detection']['active'] ? "switched on" : "switched off";
|
||
break;
|
||
case DETECTION:
|
||
$status['rt'] = ($LKS_item['log_rt_sts']['detection']['active'] && $LKS_item['log_rt_sts']['detection']['ok'] && (($LKS_item['log_rt_sts']['switch3000']['on']) || (!db_check_system_device_capabilities($type['id'], "kortsluiting schakelen")))) ? "ok" : "nok";
|
||
break;
|
||
case KEYSWITCH:
|
||
$status['rt'] = $LKS_item['def'];
|
||
$status['rt'] = ($LKS_item['log_rt_sts']['switch3000']['key']['on']) ? "On (overruled)" : $status['rt'];
|
||
$status['rt'] = ($LKS_item['log_rt_sts']['switch3000']['key']['off']) ? "Off (overruled)" : $status['rt'];
|
||
// Default value used?
|
||
if ((!$LKS_item['log_rt_sts']['switch3000']['key']['on']) && (!$LKS_item['log_rt_sts']['switch3000']['key']['off'])) {
|
||
// Set flag
|
||
$default['rt'] = TRUE;
|
||
}
|
||
break;
|
||
case GPS:
|
||
// Last entry log realtime has valid GPS?
|
||
if (($LKS_item['log_rt_sts']['gps']['fix']) && ($LKS_item['log_rt_sts']['gps']['latitude']) && ($LKS_item['log_rt_sts']['gps']['longitude'])) {
|
||
$status['rt'] = $LKS_item['log_rt_sts']['gps']['latitude'] . ", " . $LKS_item['log_rt_sts']['gps']['longitude'];
|
||
$hyperlink['rt'] = array("",array(type => "link", data => GOOGLE_MAPS . "maps?q=" . $status['rt'],""));
|
||
}
|
||
else {
|
||
// We check for the last valid GPS
|
||
foreach($log_rt as $log_rt_item) {
|
||
if (($log_rt_item['gps_fix']) && ($log_rt_item['latitude']) && ($log_rt_item['longitude'])) {
|
||
$status['rt'] = $log_rt_item['latitude'] . ", " . $log_rt_item['longitude'];
|
||
$hyperlink['rt'] = array("",array(type => "link", data => GOOGLE_MAPS . "maps?q=" . $status['rt'],""));
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
case BATTERY:
|
||
if (is_array($LKS_item['log_rt_sts'][0])) {
|
||
switch($LKS_item['param']) {
|
||
case 0:
|
||
$mask = 0x0F00;
|
||
$shift = 8;
|
||
break;
|
||
case 1:
|
||
$mask = 0xF000;
|
||
$shift = 12;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
switch(($LKS_item['log_rt_sts'][0]['mcu_state'] & $mask) >> $shift) {
|
||
case 7:
|
||
$status['rt'] = _("verwijderd");
|
||
break;
|
||
case 3:
|
||
$status['rt'] = _("leeg");
|
||
break;
|
||
case 1:
|
||
$status['rt'] = _("alarm");
|
||
break;
|
||
case 0:
|
||
$status['rt'] = _("ok");
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if ($status['rt'] != _("verwijderd")) {
|
||
$status['rt'] .= " / " . $LKS_item['log_rt_sts'][0]["batt" . ($LKS_item['param'] + 1) . "_niveau"] . " [V]";
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if (strlen($status['rt'])) {
|
||
// Get timestamp
|
||
$timestamp['rt'] = convert_datetime($log_rt[sizeof($log_rt)-1]['t'], TRUE);
|
||
|
||
// Next log_realtime entry available?
|
||
if (is_array($next_log_rt)) {
|
||
// Next log_tcp entry available?
|
||
if ((!is_array($next_log_tcp)) || ($next_log_tcp['t'] > $next_log_rt[0]['t'])) {
|
||
// No changes within this the session or session still active
|
||
$timestamp['rt'] = (strlen($end_period)) ? $end_period : $datetime;
|
||
}
|
||
}
|
||
else {
|
||
// No next log_tcp entry available?
|
||
if (!is_array($next_log_tcp)) {
|
||
// No end selected
|
||
if (!strlen($end_period)) {
|
||
// Get last known tcp status
|
||
$last_log_tcp = db_fetch_lance_tcp_status($item, $datetime, FALSE);
|
||
|
||
if ($last_log_tcp['event'] == "connect") {
|
||
// Session still active?
|
||
$timestamp['rt'] = $datetime;
|
||
}
|
||
}
|
||
else {
|
||
// Session still active?
|
||
$timestamp['rt'] = $end_period;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Perform extra action LOG_REALTIME?
|
||
//
|
||
switch($LKS_item['item']) {
|
||
default:
|
||
break;
|
||
}
|
||
|
||
//
|
||
// Valid status/timestamp => Write data
|
||
//
|
||
if ((is_array($timestamp)) && (is_array($status))) {
|
||
// Detect which is the newest, log_realtime or log_zkl
|
||
// Most of the time the Log_realtime can be used, the exception are devices without sim card (uploading log files not yet implemented)
|
||
// Real values are preferable above "default" values
|
||
if ((is_array($default)) && (sizeof($default) == 1) && (strlen($timestamp['zkl'])) && (strlen($timestamp['rt']))) {
|
||
if (isset($default['rt'])) {
|
||
$use_table = "zkl";
|
||
}
|
||
else {
|
||
$use_table = "rt";
|
||
}
|
||
}
|
||
else if ((strlen($timestamp['zkl'])) && (strlen($timestamp['rt']))) {
|
||
// log_zkl newer or a invalid timestamp?
|
||
if ((convert_datetime($timestamp['zkl']) > convert_datetime($timestamp['rt'])) && ((convert_datetime($timestamp['zkl'])) < convert_datetime($datetime))) {
|
||
$use_table = "zkl";
|
||
}
|
||
else {
|
||
$use_table = "rt";
|
||
}
|
||
}
|
||
else if (strlen($timestamp['rt'])) {
|
||
$use_table = "rt";
|
||
}
|
||
else if (strlen($timestamp['zkl'])) {
|
||
$use_table = "zkl";
|
||
}
|
||
|
||
// For debug purposes => store table which will be used for last known status items
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Restart session
|
||
SessionStart();
|
||
|
||
$_SESSION[$_PAGE_INFO['id']]['LKS']['use_table'][$LKS_item['item']] = $use_table;
|
||
|
||
// Stop session
|
||
SessionStop();
|
||
}
|
||
|
||
// Check whether log file time was used
|
||
if (($log_time) && ($use_table == "zkl")) {
|
||
// Add note
|
||
$timestamp[$use_table] .= "\xC2\xB9";
|
||
|
||
// Set overall flag (needed for footnote)
|
||
$log_time_overall = TRUE;
|
||
}
|
||
|
||
// Write to report
|
||
report_data(array(value => array($LKS_item['report_txt'], ucfirst(_($status[$use_table])), $timestamp[$use_table]),
|
||
border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(70,55,55) ,
|
||
check_page_end => 1 ,
|
||
ishtml => $hyperlink[$use_table] ));
|
||
}
|
||
else {
|
||
// No valid data => status unknown
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array(value => array($LKS_item['report_txt'],"-","-") ,
|
||
border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(70,55,55) ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/************************************/
|
||
/* Owner history */
|
||
/************************************/
|
||
// Item selected?
|
||
if (isset($report_info["history_" . $type['id']])) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Only owner can see this history
|
||
if ($info['eigenaar'] == $_PAGE_INFO['login']['customer']['id']) {
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array(value => array(_("Owner") . " " . _("geschiedenis") . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _("Owner") . " " . _("geschiedenis") . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 2 ));
|
||
}
|
||
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("L","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(63,62,55) ,
|
||
check_page_end => 1 );
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("Owner", "Rent to", "Timestamp"), bold => array(1,1,1), new_page_hdr => 1)));
|
||
}
|
||
|
||
// Initial values
|
||
$owner_log = "";
|
||
$owner_report = "";
|
||
$user_log = "";
|
||
$user_begin = "";
|
||
$user_report = "";
|
||
$in_use = FALSE;
|
||
$counter = 0;
|
||
|
||
// Fetch all log_versienummer info
|
||
$log_versionnumber = db_fetch_lance_versionnumber($info['id'], array(array("eigenaar", "gebruiker")));
|
||
|
||
if (is_array($log_versionnumber)) {
|
||
foreach($log_versionnumber as $log) {
|
||
$changes = explode(",", $log['wijzigingen']);
|
||
|
||
if (is_array($changes)) {
|
||
foreach($changes as $change) {
|
||
switch($change) {
|
||
case "eigenaar":
|
||
// Check valid timestamp
|
||
$converted_time = convert_timeperiod(convert_datetime($log['t'], TRUE), "", $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time)) {
|
||
// We could miss first owner entry
|
||
if ((!$counter) && (is_array($owner_log))) {
|
||
// Check valid timestamp
|
||
$converted_time_first = convert_timeperiod(convert_datetime($owner_log['t'], TRUE), convert_datetime($log['t'], TRUE), $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time_first)) {
|
||
// Unassigned?
|
||
if (!is_null($owner_log['eigenaar'])) {
|
||
// Get customer info
|
||
$cust = db_fetch_customer($owner_log['eigenaar'], 1);
|
||
}
|
||
|
||
// Write info to report
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array((is_null($owner_log['eigenaar'])) ? _("Unassigned") : $cust['bedrijfsnaam'], "", $converted_time_first[0]), ishtml => (($in_use) ? array(array(type => "image", left => 63, width => 25, filename => "rent_arrow_middle.png")) : ""))));
|
||
}
|
||
|
||
// Store owner id
|
||
$owner_report = $owner_log['eigenaar'];
|
||
|
||
// Increment counter
|
||
$counter++;
|
||
}
|
||
}
|
||
|
||
// Unassigned?
|
||
if (!is_null($log['eigenaar'])) {
|
||
// Get customer info
|
||
$cust = db_fetch_customer($log['eigenaar'], 1);
|
||
}
|
||
|
||
// No duplicated entries
|
||
if ($log['eigenaar'] != $owner_report) {
|
||
// User became owner?
|
||
if ((!$in_use) || ($user_log['gebruiker'] != $log['eigenaar'])) {
|
||
// Write info to report
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array((is_null($log['eigenaar'])) ? _("Unassigned") : $cust['bedrijfsnaam'], "", $converted_time[0]), ishtml => (($in_use) ? array(array(type => "image", left => 63, width => 25, filename => "rent_arrow_middle.png")) : ""))));
|
||
}
|
||
}
|
||
else {
|
||
// Write info to report
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array($cust['bedrijfsnaam'], " " . _("Duration") . ": " . CalculateDuration(convert_datetime($user_begin, TRUE), convert_datetime($log['t'], TRUE)), $converted_time[0]), ishtml => array(array(type => "image", left => 47, width => 98, filename => "rent_arrow_end.png")))));
|
||
}
|
||
|
||
// Clear flag
|
||
$in_use = FALSE;
|
||
}
|
||
|
||
// Store owner id
|
||
$owner_report = $log['eigenaar'];
|
||
|
||
// Increment counter
|
||
$counter++;
|
||
}
|
||
}
|
||
|
||
// Store log
|
||
$owner_log = $log;
|
||
break;
|
||
case "gebruiker":
|
||
// Check valid timestamp
|
||
$converted_time = convert_timeperiod(convert_datetime($log['t'], TRUE), "", $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time)) {
|
||
// We could miss first owner entry
|
||
if ((!$counter) && (is_array($owner_log))) {
|
||
// Check valid timestamp
|
||
$converted_time_first = convert_timeperiod(convert_datetime($owner_log['t'], TRUE), convert_datetime($log['t'], TRUE), $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time_first)) {
|
||
// Unassigned?
|
||
if (!is_null($owner_log['eigenaar'])) {
|
||
// Get customer info
|
||
$cust = db_fetch_customer($owner_log['eigenaar'], 1);
|
||
}
|
||
|
||
// Write info to report
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array((is_null($owner_log['eigenaar'])) ? _("Unassigned") : $cust['bedrijfsnaam'], "", $converted_time_first[0]), ishtml => (($in_use) ? array(array(type => "image", left => 63, width => 25, filename => "rent_arrow_middle.png")) : ""))));
|
||
}
|
||
|
||
// Store owner id
|
||
$owner_report = $owner_log['eigenaar'];
|
||
|
||
// Increment counter
|
||
$counter++;
|
||
}
|
||
}
|
||
|
||
// Unassigned?
|
||
if (!is_null($log['gebruiker'])) {
|
||
// Get customer info
|
||
$cust = db_fetch_customer($log['gebruiker'], 1);
|
||
}
|
||
|
||
// No duplicated entries
|
||
if ($log['gebruiker'] != $user_report) {
|
||
// Write info to report
|
||
if (!is_null($log['gebruiker'])) {
|
||
if (!$in_use) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("", " " . $cust['bedrijfsnaam'], $converted_time[0]), ishtml => array(array(type => "image", left => 0, width => 210, filename => "rent_arrow_start.png")))));
|
||
}
|
||
|
||
// Set flag
|
||
$in_use = TRUE;
|
||
|
||
// Store timestamp
|
||
$user_begin = $log['t'];
|
||
}
|
||
}
|
||
else {
|
||
if ($in_use) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("", " " . _("Duration") . ": " . CalculateDuration(convert_datetime($user_begin, TRUE), convert_datetime($log['t'], TRUE)), $converted_time[0]), ishtml => array(array(type => "image", left => 47, width => 98, filename => "rent_arrow_end.png")))));
|
||
}
|
||
|
||
// Clear flag
|
||
$in_use = FALSE;
|
||
}
|
||
}
|
||
|
||
// Store user id
|
||
$user_report = $log['gebruiker'];
|
||
|
||
// Increment counter
|
||
$counter++;
|
||
}
|
||
}
|
||
|
||
// Store log
|
||
$user_log = $log;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Still rented? => Adapt last entry
|
||
if ($in_use) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("", " " . _("Duration") . ": " . CalculateDuration(convert_datetime($user_begin, TRUE), $datetime), $datetime), ishtml => array(array(type => "image", left => 51, width => 98, filename => "rent_arrow_busy.png")))));
|
||
}
|
||
}
|
||
|
||
// Empty line
|
||
if (!$counter) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("-", "-", "-"))));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/************************************/
|
||
/* Overview changes */
|
||
/************************************/
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
|
||
// Check if overview changes is selected
|
||
if (isset($report_info["changes_" . $type['id']])) {
|
||
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
report_data(array(value => array(ucfirst(_("logbook")). " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => ucfirst(_("logbook")). " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 3 ));
|
||
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0,0) ,
|
||
align => array("C","L","L","L") ,
|
||
font_size => array(8,8,8,8) ,
|
||
cell_width => array(15,40,70,55) ,
|
||
check_page_end => 1 );
|
||
|
||
report_data(array_merge($report_data, array(value => array("Index", "Change","Changed to","Timestamp"), bold => array(1,1,1,1), new_page_hdr => 1)));
|
||
|
||
// Check if there is an end time. no end time take current time
|
||
$end_time = (empty($orig_end_period)) ? convert_datetime($last_contact[$use_table]) : convert_datetime($orig_end_period);
|
||
|
||
// Get all changes of the lance with $lance['id'] between begin and end time
|
||
$zkl_changes = db_fetch_lance_log_versionnumber($lance['id'],convert_datetime($orig_begin_period), $end_time);
|
||
|
||
// Check if there where changes
|
||
if (!empty($zkl_changes)) {
|
||
|
||
$counter_changes=1;
|
||
|
||
// Loop by all changes
|
||
foreach ( $zkl_changes as $zkl_change ) {
|
||
|
||
// Split all changes
|
||
$change_items= explode(",", $zkl_change['wijzigingen']);
|
||
|
||
if (!empty($change_items)) {
|
||
|
||
// Loop by multiple changes
|
||
foreach ($change_items as $change_item) {
|
||
|
||
// Switch to check if the change has to be printed
|
||
switch ($change_item) {
|
||
case 'eigenaar':
|
||
case 'gebruiker':
|
||
case 'secure_key':
|
||
case 'bedrag':
|
||
case 'valuta':
|
||
case 'secure_server':
|
||
case 'wavecom_versie':
|
||
case 'wavecom_serienr':
|
||
case 'wavecom_revisie':
|
||
case 'mcu_revisie':
|
||
case 'facturatie';
|
||
case 'device':
|
||
case 'lans_status':
|
||
case 'klant_status':
|
||
case 'imsi':
|
||
case 'gprs_apn':
|
||
break;
|
||
|
||
default:
|
||
// Switch to get the correct translation for in the pdf
|
||
switch ($change_item) {
|
||
case 'serienr':
|
||
$change_item_name = _('ID code')." ".ucfirst(_($owner['bedrijfsnaam']));
|
||
break;
|
||
|
||
case 'fabrieksnr':
|
||
$change_item_name = _('Factory number');
|
||
break;
|
||
|
||
case 'productie':
|
||
$change_item_name = _('Production date');
|
||
break;
|
||
|
||
case 'mcu_versie':
|
||
$change_item_name = _('Version MCU');
|
||
break;
|
||
|
||
case 'wcpu_versie':
|
||
$change_item_name = _('Version WCPU');
|
||
break;
|
||
|
||
case 'pcb_versie':
|
||
$change_item_name = _('Version PCB');
|
||
break;
|
||
|
||
case 'pcb_revisie':
|
||
$change_item_name = _('Revision PCB');
|
||
break;
|
||
|
||
case 'mech_versie':
|
||
$change_item_name = _('Version mechanic');
|
||
break;
|
||
|
||
case 'sw3000_dversie':
|
||
$change_item_name = _('Version SWITCH 3000 (D)');
|
||
break;
|
||
|
||
case 'sw3000_mversie':
|
||
$change_item_name = _('Version SWITCH 3000 (M)');
|
||
break;
|
||
|
||
case 'ualfat_versie':
|
||
$change_item_name = _('Version ualfat');
|
||
break;
|
||
|
||
case 'idcode':
|
||
$change_item_name = _('ID code'). " "._('owner');
|
||
break;
|
||
|
||
case 'telefoonnr':
|
||
$change_item_name = _('Telephone');
|
||
break;
|
||
|
||
case 'sim':
|
||
$change_item_name = _('Sim number');
|
||
break;
|
||
|
||
case 'pin':
|
||
$change_item_name = _('Pin');
|
||
break;
|
||
|
||
case 'puk':
|
||
$change_item_name = _('Puk');
|
||
break;
|
||
|
||
case 'imei':
|
||
$change_item_name = _('Modem IMEI');
|
||
break;
|
||
|
||
case 'tcp_server':
|
||
$change_item_name = _('Tcp-server');
|
||
break;
|
||
|
||
case 'sms_server':
|
||
$change_item_name = _('Sms-server');
|
||
break;
|
||
|
||
case 'parent':
|
||
$change_item_name = _('gateway');
|
||
break;
|
||
|
||
case 'opmerking':
|
||
$change_item_name = _('Remark');
|
||
break;
|
||
|
||
case 'i18n':
|
||
$change_item_name = _('SMS language');
|
||
break;
|
||
|
||
case 'tz':
|
||
$change_item_name = _('Timezone');
|
||
break;
|
||
|
||
default:
|
||
$change_item_name = _($change_item);
|
||
break;
|
||
}
|
||
|
||
// Parse value?
|
||
switch($change_item) {
|
||
case 'tcp_server':
|
||
case 'sms_server':
|
||
$server = db_fetch("server", "*","id=" . $zkl_change[$change_item]);
|
||
$value = (is_array($server)) ? $server[0]['adres'] : "";
|
||
break;
|
||
|
||
case 'parent':
|
||
$gateway = db_fetch_lance($zkl_change[$change_item], "" , 1);
|
||
$value = (is_array($gateway)) ? $gateway['idcode'] : "";
|
||
break;
|
||
|
||
case 'i18n':
|
||
$value = "";
|
||
$languages = db_fetch_system_lang();
|
||
|
||
if (is_array($languages)) {
|
||
$value = _($languages[$zkl_change[$change_item]]);
|
||
}
|
||
break;
|
||
|
||
default:
|
||
$value = $zkl_change[$change_item];
|
||
break;
|
||
}
|
||
|
||
// Calculate number of lines needed for the text
|
||
$lines_changes = nmr_lines($value, 50);
|
||
|
||
for ($j = 0; $j < sizeof($lines_changes); $j++) {
|
||
// Get text
|
||
$text_changes = $lines_changes[$j];
|
||
if (sizeof($lines_changes) > 1) {
|
||
if (!$j) {
|
||
report_data(array_merge($report_data, array(value => array(($counter_changes), $change_item_name ,$text_changes,convert_datetime($zkl_change['t'],1)), border => array("LRT","LRT","LRT","LRT"), nr_lines => sizeof($lines_changes))));
|
||
}
|
||
else {
|
||
if (($j + 1) == sizeof($lines_changes)) {
|
||
report_data(array_merge($report_data, array(value => array("", "" ,$text_changes,""), border => array("LRB","LRB","LRB","LRB"))));
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array("", "" ,$text_changes,""), border => array("LR","LR","LR","LR"))));
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array(($counter_changes), $change_item_name ,$value ,convert_datetime($zkl_change['t'],1)))));
|
||
}
|
||
}
|
||
|
||
$counter_changes++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
else {
|
||
// No changes
|
||
report_data(array_merge($report_data, array(value => array('1','-','-','-'))));
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
/************************************/
|
||
/* Overview measurement on/off */
|
||
/* detection ok/nok */
|
||
/* shortcircuit switching */
|
||
/* battery status */
|
||
/* sms */
|
||
/************************************/
|
||
//
|
||
// Array containing report items
|
||
//
|
||
$report_items = array(array(item => MEASUREMENT,
|
||
report_txt => "Overview measurement on",
|
||
sel => "switch_status_" . $type['id'],
|
||
period => TRUE,
|
||
table => array("log_zkl", "log_realtime")),
|
||
array(item => DETECTION,
|
||
report_txt => "Overview detection status",
|
||
sel => "short_circuit_status_" . $type['id'],
|
||
period => TRUE,
|
||
table => array("log_zkl", "log_realtime")),
|
||
array(item => SHORTCIRCUIT,
|
||
report_txt => "Overview short circuit switching",
|
||
sel => "relais_status_" . $type['id'],
|
||
period => FALSE,
|
||
table => array("log_zkl", "log_realtime")),
|
||
array(item => BATTERY,
|
||
report_txt => "Overview battery status",
|
||
sel => "battery_status_" . $type['id'],
|
||
period => FALSE,
|
||
table => array("log_zkl", "log_realtime")),
|
||
array(item => SMS,
|
||
report_txt => "Overview sms",
|
||
sel => "sms_" . $type['id'],
|
||
period => FALSE,
|
||
table => array("log_zkl")));
|
||
|
||
foreach ($report_items as $report_item) {
|
||
// Item selected?
|
||
if (isset($report_info[$report_item['sel']])) {
|
||
if ((strtolower($_PAGE_INFO['report_type']) == "pdf") || ($report_item['item'] != SMS)) {
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Print empty line
|
||
empty_line();
|
||
}
|
||
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Determine log action
|
||
switch($report_item['item']) {
|
||
case MEASUREMENT:
|
||
$log_action = "MEASUREMENT";
|
||
break;
|
||
case DETECTION:
|
||
$log_action = "DETECTION";
|
||
break;
|
||
case SHORTCIRCUIT:
|
||
$log_action = "SHORTCIRCUIT";
|
||
break;
|
||
case BATTERY:
|
||
$log_action = "BATTERY";
|
||
break;
|
||
case SMS:
|
||
$log_action = "SMS";
|
||
break;
|
||
default:
|
||
$log_action = "";
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Header
|
||
report_data(array(value => array(_($report_item['report_txt']) . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _($report_item['report_txt']) . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 3 ));
|
||
|
||
// Define table fields (index, timestamps, etc)
|
||
switch($report_item['item']) {
|
||
case MEASUREMENT:
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0,0) ,
|
||
align => array("C","L","L","L") ,
|
||
font_size => array(8,8,8,8) ,
|
||
cell_width => array(15,55,55,55) ,
|
||
check_page_end => 1 );
|
||
|
||
report_data(array_merge($report_data, array(value => array("Index", "Measurement on", "Measurement off", "Duration"), bold => array(1,1,1,1), new_page_hdr => 1)));
|
||
break;
|
||
case DETECTION:
|
||
// Gps capabilities?
|
||
if (db_check_system_device_capabilities($type['id'],"gps")) {
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0,0,0) ,
|
||
align => array("C","L","L","L","L") ,
|
||
font_size => array(8,8,8,8,8) ,
|
||
cell_width => array(15,41,41,28,55) ,
|
||
check_page_end => 1 );
|
||
|
||
$ok_value = db_fetch_system_device_status($type['id'], $report_info['i18n'], "", "ok");
|
||
$nok_value = db_fetch_system_device_status($type['id'], $report_info['i18n'], "", "nok");
|
||
report_data(array_merge($report_data, array(value => array("Index", $ok_value['display'], $nok_value['display'], "Duration", "Coordinate"), bold => array(1,1,1,1,1), new_page_hdr => 1)));
|
||
}
|
||
else {
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0,0) ,
|
||
align => array("C","L","L","L") ,
|
||
font_size => array(8,8,8,8) ,
|
||
cell_width => array(15,55,55,55) ,
|
||
check_page_end => 1 );
|
||
|
||
|
||
report_data(array_merge($report_data, array(value => array("Index", "Detection ok", "Detection nok", "Duration"), bold => array(1,1,1,1), new_page_hdr => 1)));
|
||
}
|
||
break;
|
||
case SHORTCIRCUIT:
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("C","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(15,110,55) ,
|
||
check_page_end => 1 );
|
||
|
||
report_data(array_merge($report_data, array(value => array("Index", "State", "Timestamp"), bold => array(1,1,1), new_page_hdr => 1)));
|
||
break;
|
||
case BATTERY:
|
||
// Default table layout
|
||
$value = array("Index");
|
||
$border = array("LRBT");
|
||
$bold_h = array(1);
|
||
$bold_t = array(0);
|
||
$align = array("C");
|
||
$font_size = array(8);
|
||
$cell_width = array(15);
|
||
$total_width = 110;
|
||
$total = 0;
|
||
|
||
for($i = 0; $i < $type['nr_batterijen']; $i++) {
|
||
if ($i < ($type['nr_batterijen'] - 1)) {
|
||
$width = round($total_width/$type['nr_batterijen']);
|
||
}
|
||
else {
|
||
$width = $total_width - $total;
|
||
}
|
||
|
||
// Total width
|
||
$total += $width;
|
||
|
||
array_push($value , "Status" . " " . _("battery") . " " . ($i + 1));
|
||
array_push($border , "LRBT");
|
||
array_push($bold_h , 1);
|
||
array_push($bold_t , 0);
|
||
array_push($align , "L");
|
||
array_push($font_size , 8);
|
||
array_push($cell_width , $width);
|
||
}
|
||
|
||
array_push($value , "Timestamp");
|
||
array_push($border , "LRBT");
|
||
array_push($bold_h , 1);
|
||
array_push($bold_t , 0);
|
||
array_push($align , "L");
|
||
array_push($font_size , 8);
|
||
array_push($cell_width , 55);
|
||
|
||
$report_data = array(value => $value ,
|
||
border => $border ,
|
||
bold => $bold_t ,
|
||
align => $align ,
|
||
font_size => $font_size ,
|
||
cell_width => $cell_width ,
|
||
check_page_end => 1 );
|
||
|
||
report_data(array_merge($report_data, array(value => $value, bold => $bold_h, new_page_hdr => 1)));
|
||
break;
|
||
case SMS:
|
||
// Default table layout
|
||
$report_data = array(border => array("LRBT","LRBT","LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0,0,0) ,
|
||
align => array("C","L","L","L","L") ,
|
||
font_size => array(8,8,8,8,8) ,
|
||
cell_width => array(15,35,33,17,80) ,
|
||
check_page_end => 1 );
|
||
|
||
report_data(array_merge($report_data, array(value => array("Index", "Timestamp", "Telephone", "Status", ucfirst(_("message"))), bold => array(1,1,1,1,1), new_page_hdr => 1)));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// When only log_zkl => use log_files_corrupt array (all log files included the corrupted ones)
|
||
if ((in_array("log_zkl", $report_item['table'])) && (sizeof($report_item['table']) == 1)) {
|
||
$log_files = $log_files_corrupt;
|
||
}
|
||
|
||
// Initial values
|
||
$valid_entries = array();
|
||
$skip_first = FALSE;
|
||
$remove_first = FALSE;
|
||
|
||
// log_zkl settings
|
||
$zkl['cnt'] = 0;
|
||
$zkl['log'] = "";
|
||
|
||
// log_realtime settings
|
||
$rt['begin'] = convert_datetime($begin_period);
|
||
$rt['end'] = convert_datetime($end_period);
|
||
|
||
// Valid data?
|
||
if ((is_array($log_files)) || (is_array($log_rt))) {
|
||
// Check whether log_realtime begins before log_zkl when both tables required
|
||
if ((in_array("log_zkl", $report_item['table'])) && (in_array("log_realtime", $report_item['table']))) {
|
||
if ((is_array($log_files)) && (is_array($log_rt))) {
|
||
if ($log_files[0]['tmin'] > $log_rt[0]['t']) {
|
||
// End of log_realtime is start of "first" log file
|
||
$rt['end'] = $log_files[0]['tmin'];
|
||
|
||
// Add dummy log_file entry to log_files array => and skip log files check
|
||
$log_files = array_merge(array("Dummy"), $log_files);
|
||
|
||
// Set skip and remove flag
|
||
$skip_first = TRUE;
|
||
$remove_first = TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Parse log_files/log_realtime entries
|
||
do
|
||
{
|
||
// "Reset" state
|
||
// We can do this because a new log file was found
|
||
$state = ($report_item['period']) ? FIND_BEGIN : FIND_EVENT;
|
||
$sts = OK;
|
||
$detection = FALSE;
|
||
$measurement = FALSE;
|
||
$switch3000 = (db_check_system_device_capabilities($type['id'], "kortsluiting schakelen")) ? FALSE : TRUE;
|
||
$keyswitch = OPERATIONAL;
|
||
$batt[$type['nr_batterijen']] = "";
|
||
$valid_entries = array();
|
||
|
||
// Initial values
|
||
$stored_data = null;
|
||
$overruled_time = FALSE;
|
||
|
||
//
|
||
// LOG_ZKL
|
||
//
|
||
if ((is_array($log_files)) && (in_array("log_zkl", $report_item['table'])) && (!$skip_first)) {
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get starting time
|
||
$log_start = microtime_float();
|
||
}
|
||
|
||
// Retrieve data
|
||
switch($report_item['item']) {
|
||
case MEASUREMENT:
|
||
$zkl['items'] = db_fetch_lance_log_measurement_status($item, 0, 7, "", "", array($log_files[$zkl['cnt']]));
|
||
break;
|
||
case DETECTION:
|
||
// Fetch all short circuit status
|
||
$zkl['items'] = db_fetch_lance_log_shortcircuit_status($item, 0, "", "", array($log_files[$zkl['cnt']]));
|
||
|
||
// Fetch all measurement on/off and power up event
|
||
$measurement_status = db_fetch_lance_log_measurement_status($item, 0, 7, "", "", array($log_files[$zkl['cnt']]));
|
||
|
||
// Fetch all switch3000 on/off events
|
||
if (db_check_system_device_capabilities($type['id'], "kortsluiting schakelen")) {
|
||
$switch_status = db_fetch_lance_switch3000_state($item, 0, "", "", array($log_files[$zkl['cnt']]));
|
||
}
|
||
|
||
// Merge measurement events and sort on datetime
|
||
if ((is_array($zkl['items'])) && (is_array($measurement_status))) {
|
||
$zkl['items'] = array_sort(array_merge($zkl['items'], $measurement_status), "t");
|
||
}
|
||
|
||
// Merge switch3000 events and sort on datetime
|
||
if ((is_array($zkl['items'])) && (is_array($switch_status))) {
|
||
$zkl['items'] = array_sort(array_merge($zkl['items'], $switch_status), "t");
|
||
}
|
||
break;
|
||
case SHORTCIRCUIT:
|
||
// Fetch all key switch and switch 3000 changes
|
||
$zkl['items'] = db_fetch_lance_log_switch3000_status($item, 0, "", "", array($log_files[$zkl['cnt']]));
|
||
break;
|
||
case BATTERY:
|
||
// Fetch all battery changes
|
||
$bat = array();
|
||
for($i = 0; $i < $type['nr_batterijen']; $i++) {
|
||
array_push($bat, $i);
|
||
}
|
||
$zkl['items'] = db_fetch_lance_log_battery_status($item, $bat, 0, "", "", array($log_files[$zkl['cnt']]));
|
||
break;
|
||
case SMS:
|
||
// Fetch all sms logged
|
||
$zkl['items'] = db_fetch_lance_log_sms($item, 0, "", "", array($log_files[$zkl['cnt']]));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get end time
|
||
$log_end = microtime_float();
|
||
|
||
if (strlen($log_action)) {
|
||
// Debug info
|
||
DBG("Fetch " . $lance['idcode'] . " LOG_ZKL: " . $log_action . " " . ($log_end - $log_start) . "[s], items: " . sizeof($zkl['items'] . ", (sdcard: " . $log_files[$zkl['cnt']]['sdcard'] . ", startup: " . $log_files[$zkl['cnt']]['startup'] . ", rpgm: " . $log_files[$zkl['cnt']]['rpgmcount'] . ")"));
|
||
}
|
||
|
||
// Get starting time
|
||
$log_start = microtime_float();
|
||
}
|
||
|
||
if (is_array($zkl['items'])) {
|
||
foreach($zkl['items'] as $zkl['item']) {
|
||
switch($state) {
|
||
//
|
||
// Find begin event
|
||
//
|
||
case FIND_BEGIN:
|
||
switch($report_item['item']) {
|
||
// Find measurement on event
|
||
case MEASUREMENT:
|
||
$found = ($zkl['item']['major'] == MAJ_MEAS_ON);
|
||
break;
|
||
// Find detection ok event
|
||
case DETECTION:
|
||
switch($zkl['item']['major']) {
|
||
case MAJ_SHORTCIR_OK:
|
||
$detection = TRUE;
|
||
break;
|
||
case MAJ_SHORTCIR_ALARM:
|
||
$detection = FALSE;
|
||
break;
|
||
case MAJ_MEAS_ON:
|
||
$measurement = TRUE;
|
||
break;
|
||
case MAJ_MEAS_OFF:
|
||
$measurement = FALSE;
|
||
$detection = FALSE;
|
||
break;
|
||
case MAJ_SWITCH:
|
||
$switch3000 = (($zkl['item']['state'] & 0x06 == 0x06) || ($zkl['item']['state'] & 0x09 == 0x09));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Detection ok?
|
||
$found = ($detection && $measurement && $switch3000);
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if ($found) {
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($zkl['item']['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['begin'] = convert_datetime($zkl['item']['t'], TRUE);
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['begin'] = convert_datetime($zkl['item']['t_log'], TRUE);
|
||
|
||
// Server time used
|
||
$sts |= SERVER_TIME_BEG;
|
||
}
|
||
|
||
// Check for unfinished begin (check for unfinished begin)
|
||
// We do this here because the END could be a log_realtime entry and then this check is skipped
|
||
if ((!$zkl['cnt']) && (strlen($begin_period)) && (convert_datetime($begin_period) > convert_datetime($timestamp['begin']))) {
|
||
$sts |= UNFINISHED_BEG;
|
||
}
|
||
|
||
// Store log file values (needed for the thick line!)
|
||
$zkl['log'] = array(sdcard => $zkl['item']['sdcard'], startup => $zkl['item']['startup'], rpgmcount => $zkl['item']['rpgmcount']);
|
||
|
||
// Next state => Find end
|
||
$state = FIND_END;
|
||
}
|
||
break;
|
||
//
|
||
// Find end event
|
||
//
|
||
case FIND_END:
|
||
switch($report_item['item']) {
|
||
// Find measurement off event
|
||
case MEASUREMENT:
|
||
$found = ($zkl['item']['major'] == MAJ_MEAS_OFF);
|
||
break;
|
||
// Find detection nok event
|
||
case DETECTION:
|
||
switch($zkl['item']['major']) {
|
||
case MAJ_SHORTCIR_OK:
|
||
$detection = TRUE;
|
||
break;
|
||
case MAJ_SHORTCIR_ALARM:
|
||
$detection = FALSE;
|
||
break;
|
||
case MAJ_MEAS_ON:
|
||
$measurement = TRUE;
|
||
break;
|
||
case MAJ_MEAS_OFF:
|
||
$measurement = FALSE;
|
||
$detection = FALSE;
|
||
break;
|
||
case MAJ_SWITCH:
|
||
$switch3000 = (($zkl['item']['state'] & 0x06 == 0x06) || ($zkl['item']['state'] & 0x09 == 0x09));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Detection nok?
|
||
$found = (!$detection || !$measurement || !$switch3000);
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if ($found) {
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($zkl['item']['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['end'] = convert_datetime($zkl['item']['t'], TRUE);
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['end'] = convert_datetime($zkl['item']['t_log'], TRUE);
|
||
|
||
// Server time used
|
||
$sts |= SERVER_TIME_END;
|
||
}
|
||
|
||
// Begin time may not exceed end time previous entry
|
||
// This to remove duplicated entries/timestamps
|
||
if ((is_array($valid_entries)) && (!empty($valid_entries))) {
|
||
$start_value = (convert_datetime($timestamp['begin']) >= convert_datetime($valid_entries[sizeof($valid_entries)-1]['end'])) ? $timestamp['begin'] : convert_datetime((convert_datetime($valid_entries[sizeof($valid_entries)-1]['end']) + 1), TRUE);
|
||
}
|
||
else {
|
||
$start_value = $timestamp['begin'];
|
||
}
|
||
|
||
// Check begin/end times
|
||
$converted_time = convert_timeperiod($start_value, $timestamp['end'], $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time)) {
|
||
// valid timespan
|
||
if (convert_datetime($converted_time[1]) > convert_datetime($converted_time[0])) {
|
||
// Unfinished begin?
|
||
if ((!$zkl['cnt']) && (strlen($begin_period)) && (convert_datetime($begin_period) > convert_datetime($timestamp['begin']))) {
|
||
$sts |= UNFINISHED_BEG;
|
||
}
|
||
// Unfinished end?
|
||
if ((strlen($end_period)) && (convert_datetime($timestamp['end']) < convert_datetime($converted_time[1]))) {
|
||
$sts |= UNFINISHED_END;
|
||
}
|
||
|
||
// New times
|
||
$timestamp['begin'] = $converted_time[0];
|
||
$timestamp['end'] = $converted_time[1];
|
||
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $timestamp['begin'], end => $timestamp['end'], sts => $sts, log => $zkl['log'], src => "log_zkl"));
|
||
}
|
||
}
|
||
|
||
// Reset status
|
||
$sts = OK;
|
||
|
||
// Next state => Find begin ("restart")
|
||
$state = FIND_BEGIN;
|
||
}
|
||
break;
|
||
//
|
||
// Find (non-period) event
|
||
//
|
||
case FIND_EVENT:
|
||
// Valid timestamp? timestamp does not exceed end time?
|
||
if ((valid_gps_timestamp(convert_datetime($zkl['item']['t'], TRUE))) && ((!strlen($end_period)) || (convert_datetime($end_period) >= $zkl['item']['t']))) {
|
||
switch($report_item['item']) {
|
||
// Find switch on/off event
|
||
case SHORTCIRCUIT:
|
||
// Initial value
|
||
$data = "";
|
||
|
||
// Determine status
|
||
switch($zkl['item']['minor']) {
|
||
case MIN_SWITCH3000_KEY_OFF:
|
||
if ($key != OFF) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched off") . " (" . _("Key switch") . " " . _("off") . ")";
|
||
$key = OFF;
|
||
$switch3000 = FALSE;
|
||
}
|
||
break;
|
||
case MIN_SWITCH3000_KEY_ON:
|
||
if ($key != ON) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched on") . " (" . _("Key switch") . " " . _("on") . ")";
|
||
$key = ON;
|
||
$switch3000 = TRUE;
|
||
}
|
||
break;
|
||
case MIN_SWITCH3000_MTINFO_OFF:
|
||
if ($switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched off") . " (" . "MTinfo/RS3000" . ")";
|
||
$switch3000 = FALSE;
|
||
}
|
||
break;
|
||
case MIN_SWITCH3000_MTINFO_ON:
|
||
if (!$switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched on") . " (" . "MTinfo/RS3000" . ")";
|
||
$switch3000 = TRUE;
|
||
}
|
||
break;
|
||
case MIN_SWITCH3000_REBOOT:
|
||
if (!$switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched on") . " (" . "Reboot" . ")";
|
||
$switch3000 = TRUE;
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
$found = (strlen($data));
|
||
break;
|
||
// Find battery event
|
||
case BATTERY:
|
||
// Battery status changed?
|
||
if ($batt[$zkl['item']['batterij']] != $zkl['item']['status']) {
|
||
// Store new status
|
||
$batt[$zkl['item']['batterij']] = $zkl['item']['status'];
|
||
|
||
$found = TRUE;
|
||
for($i=0; $i < $type['nr_batterijen']; $i++) {
|
||
// All valid?
|
||
$found = (strlen($batt[$i])) ? $found : FALSE;
|
||
}
|
||
}
|
||
else {
|
||
$found = FALSE;
|
||
}
|
||
|
||
// Last entry? and no other entries available?
|
||
if (($zkl['item']['id'] == $zkl['items'][sizeof($zkl['items']) - 1]['id']) && (empty($valid_entries))) {
|
||
if (!$found) {
|
||
$found = TRUE;
|
||
|
||
for($i=0; $i < $type['nr_batterijen']; $i++) {
|
||
// All valid?
|
||
$found = (strlen($batt[$i])) ? $found : FALSE;
|
||
}
|
||
}
|
||
|
||
if ($found) {
|
||
// Set flag
|
||
$overruled_time = TRUE;
|
||
}
|
||
}
|
||
|
||
// Parse status
|
||
$data = $batt;
|
||
break;
|
||
// Find SMS event
|
||
case SMS:
|
||
// Store telephone number
|
||
$data[0] = $zkl['item']['telefoonnr'];
|
||
// Store status
|
||
$data[1] = $zkl['item']['type'];
|
||
// Store message
|
||
$data[2] = utf8_encode($zkl['item']['tekst']);
|
||
|
||
$found = TRUE;
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if (($found) || ($overruled_time)) {
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($zkl['item']['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['begin'] = convert_datetime($zkl['item']['t'], TRUE);
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['begin'] = convert_datetime($zkl['item']['t_log'], TRUE);
|
||
|
||
// Server time used
|
||
$sts |= SERVER_TIME_BEG;
|
||
}
|
||
|
||
// Store log file values (needed for the thick line!)
|
||
$zkl['log'] = array(sdcard => $zkl['item']['sdcard'], startup => $zkl['item']['startup'], rpgmcount => $zkl['item']['rpgmcount']);
|
||
|
||
// Store value, needed for the overruled time value
|
||
if ($found) {
|
||
// Event before
|
||
if ((strlen($begin_period)) && (convert_datetime($timestamp['begin']) <= convert_datetime($begin_period))) {
|
||
// Store values
|
||
$stored_data['data'] = $data;
|
||
$stored_data['log'] = $zkl['log'];
|
||
$stored_data['sts'] = $sts;
|
||
}
|
||
}
|
||
|
||
// Check time
|
||
if (((!strlen($begin_period)) || (convert_datetime($timestamp['begin']) >= convert_datetime($begin_period))) &&
|
||
((!strlen($end_period)) || (convert_datetime($timestamp['begin']) <= convert_datetime($end_period)))) {
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $timestamp['begin'], sts => $sts, data => $data, log => $zkl['log'], src => "log_zkl"));
|
||
}
|
||
// Overruled time?
|
||
// For example no valid battery event during this period => Show last known before
|
||
// We can do this because this log_file has been valid for a part of this period, otherwhise it won't be selected
|
||
else if (($overruled_time) && (!is_null($stored_data))) {
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $begin_period, sts => $stored_data['sts'], data => $stored_data['data'], log => $stored_data['log'], src => "log_zkl"));
|
||
}
|
||
|
||
// Reset status
|
||
$sts = OK;
|
||
}
|
||
}
|
||
break;
|
||
//
|
||
// Undefined state
|
||
//
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get end time
|
||
$log_end = microtime_float();
|
||
|
||
if (strlen($log_action)) {
|
||
// Debug info
|
||
DBG("Parse " . $lance['idcode'] . " LOG_ZKL: " . $log_action . " " . ($log_end - $log_start) . "[s], (sdcard: " . $log_files[$zkl['cnt']]['sdcard'] . ", startup: " . $log_files[$zkl['cnt']]['startup'] . ", rpgm: " . $log_files[$zkl['cnt']]['rpgmcount'] . ")");
|
||
}
|
||
}
|
||
|
||
// Valid entries found? Or searching for the end?
|
||
if ((!empty($valid_entries)) || ($state == FIND_END)) {
|
||
// End of this log file is begin of log realtime
|
||
$rt['begin'] = $log_files[$zkl['cnt']]['tmax'];
|
||
}
|
||
else {
|
||
// No valid entries found => Retry with the log realtime, could be a "bug"
|
||
$rt['begin'] = $log_files[$zkl['cnt']]['tmin'];
|
||
}
|
||
|
||
// Last log file => end of period, else begin of next log file
|
||
$rt['end'] = (($zkl['cnt'] + 1) == sizeof($log_files)) ? convert_datetime($end_period) : $log_files[$zkl['cnt'] + 1]['tmin'];
|
||
|
||
// Check if end is not before begin
|
||
if ((strlen($rt['begin'])) && (strlen($rt['end']))) {
|
||
$rt['end'] = ($rt['end'] > $rt['begin']) ? $rt['end'] : $rt['begin'];
|
||
}
|
||
}
|
||
|
||
// Reset flag
|
||
$skip_first = FALSE;
|
||
|
||
//
|
||
// LOG_REALTIME
|
||
//
|
||
if ((is_array($log_rt)) && (in_array("log_realtime", $report_item['table']))) {
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get starting time
|
||
$log_start = microtime_float();
|
||
}
|
||
|
||
// Initial values
|
||
$rt['last_valid'] = "";
|
||
for ($i = 0; (($i < sizeof($log_rt)) && !((strlen($rt['end'])) && ($log_rt[$i]['t'] > $rt['end']))); $i++) {
|
||
// Valid timeframe?
|
||
if ((($log_rt[$i]['t'] >= $rt['begin']) || (!$rt['begin'])) && (($log_rt[$i]['t'] <= $rt['end']) || (!$rt['end']))) {
|
||
switch($state) {
|
||
//
|
||
// Find begin event
|
||
//
|
||
case FIND_BEGIN:
|
||
switch($report_item['item']) {
|
||
// Find measurement on event
|
||
case MEASUREMENT:
|
||
$found = ($log_rt[$i]['mcu_state'] & 0x0001);
|
||
break;
|
||
// Find detection ok event
|
||
case DETECTION:
|
||
// Measurement
|
||
if ($log_rt[$i]['mcu_state'] & 0x0001) {
|
||
$measurement = TRUE;
|
||
}
|
||
else {
|
||
$measurement = FALSE;
|
||
$detection = FALSE;
|
||
}
|
||
|
||
// Detection
|
||
if ($log_rt[$i]['mcu_state'] & 0x0002) {
|
||
$detection = TRUE;
|
||
}
|
||
else {
|
||
$detection = FALSE;
|
||
}
|
||
|
||
// Switch 3000 (when supported)
|
||
if ((!is_null($log_rt[$i]['sw3000_state'])) && ($log_rt[$i]['sw3000_state'])) {
|
||
if ((($log_rt[$i]['sw3000_state'] & 0x06) == 0x06) || (($log_rt[$i]['sw3000_state'] & 0x09) == 0x09)) {
|
||
$switch3000 = TRUE;
|
||
}
|
||
else {
|
||
$switch3000 = FALSE;
|
||
}
|
||
}
|
||
|
||
// Detection ok?
|
||
$found = ($detection && $measurement && $switch3000);
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if ($found) {
|
||
// Store timestamp
|
||
$timestamp['begin'] = convert_datetime($log_rt[$i]['t'], TRUE);
|
||
|
||
// On going begin?
|
||
// Only possible when starting with the log_realtime and the first entry valid
|
||
if (($timestamp['begin'] == convert_datetime($log_rt[0]['t'], TRUE)) && (strlen($begin_period)) && (is_array($prev_log_rt)) && (is_array($prev_log_tcp))) {
|
||
// Previous log_tcp before previous log_realtime
|
||
if ($prev_log_tcp['t'] < $prev_log_rt[0]['t']) {
|
||
// No changes within this the session
|
||
$timestamp['begin'] = $begin_period;
|
||
|
||
// On going at the begin
|
||
$sts |= UNFINISHED_BEG;
|
||
}
|
||
}
|
||
|
||
// Next state => Find end
|
||
$state = FIND_END;
|
||
}
|
||
break;
|
||
//
|
||
// Find end event
|
||
//
|
||
case FIND_END:
|
||
switch($report_item['item']) {
|
||
// Find measurement off event
|
||
case MEASUREMENT:
|
||
$found = (!($log_rt[$i]['mcu_state'] & 0x0001));
|
||
break;
|
||
// Find detection nok event
|
||
case DETECTION:
|
||
// Measurement
|
||
if ($log_rt[$i]['mcu_state'] & 0x0001) {
|
||
$measurement = TRUE;
|
||
}
|
||
else {
|
||
$measurement = FALSE;
|
||
$detection = FALSE;
|
||
}
|
||
|
||
// Detection
|
||
if ($log_rt[$i]['mcu_state'] & 0x0002) {
|
||
$detection = TRUE;
|
||
}
|
||
else {
|
||
$detection = FALSE;
|
||
}
|
||
|
||
// Switch 3000 (when supported)
|
||
if ((!is_null($log_rt[$i]['sw3000_state'])) && ($log_rt[$i]['sw3000_state'])) {
|
||
if ((($log_rt[$i]['sw3000_state'] & 0x06) == 0x06) || (($log_rt[$i]['sw3000_state'] & 0x09) == 0x09)) {
|
||
$switch3000 = TRUE;
|
||
}
|
||
else {
|
||
$switch3000 = FALSE;
|
||
}
|
||
}
|
||
|
||
// Detection nok?
|
||
$found = (!$detection || !$measurement || !$switch3000);
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if ($found) {
|
||
// We now check the tcp connection during this period
|
||
$log_tcp = db_fetch_lance_tcp_status($item, $timestamp['begin'], TRUE);
|
||
|
||
if ((is_array($log_tcp)) && ($log_tcp['t'] < $log_rt[$i]['t'])) {
|
||
// Connection hick-up => Mark
|
||
$sts |= CON_HICKUP;
|
||
}
|
||
|
||
// Valid timestamp
|
||
if ($log_rt[$i]['t'] > convert_datetime($timestamp['begin'])) {
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $timestamp['begin'], end => convert_datetime($log_rt[$i]['t'], TRUE), sts => $sts, log => $zkl['log'], src => "log_realtime"));
|
||
}
|
||
|
||
// Reset status
|
||
$sts = OK;
|
||
|
||
// Next state => Find begin ("restart")
|
||
$state = FIND_BEGIN;
|
||
}
|
||
break;
|
||
//
|
||
// Find (non-periodic) event
|
||
//
|
||
case FIND_EVENT:
|
||
switch($report_item['item']) {
|
||
// Find shortcircuit event
|
||
case SHORTCIRCUIT:
|
||
// Initial values
|
||
$data = "";
|
||
|
||
// Key changed?
|
||
if (($log_rt[$i]['rc_state'] & 0x0C) != $key) {
|
||
// Determine status
|
||
switch($log_rt[$i]['rc_state'] & 0x0C) {
|
||
case OFF:
|
||
// Changed?
|
||
if ($switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched off") . " (" . _("Key switch") . " " . _("off") . ")";
|
||
}
|
||
$switch3000 = FALSE;
|
||
break;
|
||
case ON:
|
||
// Changed?
|
||
if (!$switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched on") . " (" . _("Key switch") . " " . _("on") . ")";
|
||
}
|
||
$switch3000 = TRUE;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Update key
|
||
$key = ($log_rt[$i]['rc_state'] & 0x0C);
|
||
}
|
||
// Switch3000 on/off changed?
|
||
else if (($log_rt[$i]['sw3000_state'] != 0xFFFF) && (((($log_rt[$i]['sw3000_state'] & 0x06) == 0x06) || (($log_rt[$i]['sw3000_state'] & 0x09) == 0x09)) != $switch3000)) {
|
||
// Determine status
|
||
switch((($log_rt[$i]['sw3000_state'] & 0x06) == 0x06) || (($log_rt[$i]['sw3000_state'] & 0x09) == 0x09)) {
|
||
case FALSE:
|
||
// Changed?
|
||
if ($switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched off");
|
||
$data .= ($log_rt[$i]['rc_state'] & 0x01) ? " (" . "MTinfo/RS3000" . ")" : " (" . _("Key switch") . " " . _("off") . ")";
|
||
}
|
||
$switch3000 = FALSE;
|
||
break;
|
||
case TRUE:
|
||
// Changed?
|
||
if (!$switch3000) {
|
||
$data = ucfirst(_("short circuit")) . " " . _("switched on");
|
||
$data .= ($log_rt[$i]['rc_state'] & 0x01) ? " (" . "MTinfo/RS3000" . ")" : " (" . _("Key switch") . " " . _("on") . ")";
|
||
}
|
||
$switch3000 = TRUE;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
$found = (strlen($data));
|
||
|
||
// Check first entry? Could be initial values
|
||
if ((!$i) && (is_array($prev_log_rt))) {
|
||
// Detection changed
|
||
$found = (($prev_log_rt[0]['rc_state'] & 0x0C) != $key) ? $found : FALSE;
|
||
|
||
// Switch3000 changed?
|
||
$found = (($found) && (((($prev_log_rt[0]['sw3000_state'] & 0x06) == 0x06) || (($prev_log_rt[0]['sw3000_state'] & 0x09) == 0x09)) != $switch3000)) ? $found : FALSE;
|
||
}
|
||
break;
|
||
case BATTERY:
|
||
// Initial values
|
||
$found = FALSE;
|
||
|
||
for($j = 0; $j < $type['nr_batterijen']; $j++) {
|
||
switch($j) {
|
||
case 0:
|
||
$mask = 0x0F00;
|
||
$shift = 8;
|
||
break;
|
||
case 1:
|
||
$mask = 0xF000;
|
||
$shift = 12;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Store old value
|
||
$old_value = $batt[$j];
|
||
|
||
switch(($log_rt[$i]['mcu_state'] & $mask) >> $shift) {
|
||
case 7:
|
||
$batt[$j] = "verwijderd";
|
||
break;
|
||
case 3:
|
||
$batt[$j] = "leeg";
|
||
break;
|
||
case 1:
|
||
$batt[$j] = "alarm";
|
||
break;
|
||
case 0:
|
||
$batt[$j] = "ok";
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Parse data
|
||
$data[$j] = $batt[$j];
|
||
|
||
// Values changed/or first value (and no log_zkl values)
|
||
$found = (($batt[$j] != $old_value) || ((!$i) && (empty($valid_entries)))) ? TRUE : $found;
|
||
}
|
||
break;
|
||
default:
|
||
$found = FALSE;
|
||
break;
|
||
}
|
||
|
||
if ($found) {
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => convert_datetime($log_rt[$i]['t'], TRUE), sts => $sts, data => $data, log => $zkl['log'], src => "log_realtime"));
|
||
}
|
||
|
||
// Reset status
|
||
$sts = OK;
|
||
break;
|
||
//
|
||
// Undefined state
|
||
//
|
||
default:
|
||
break;
|
||
}
|
||
|
||
// Valid log realtime entry found
|
||
$rt['last_valid'] = array(index => $i);
|
||
}
|
||
}
|
||
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get end time
|
||
$log_end = microtime_float();
|
||
|
||
if (strlen($log_action)) {
|
||
// Debug info
|
||
DBG("Parse " . $lance['idcode'] . " LOG_RT : " . $log_action . " " . ($log_end - $log_start) . "[s]");
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
// Waiting for a measurement off/detecion nok event (only needed for period search)?
|
||
// - Valid log_realtime entry after end of logfile (or no log file)? => Detect connection hickup
|
||
// - No valid log_realtime entry after end of log file => use last log file entry
|
||
if ($state == FIND_END) {
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get starting time
|
||
$log_start = microtime_float();
|
||
}
|
||
|
||
// Valid log_realtime entry?
|
||
if ((is_array($rt['last_valid'])) && (is_array($log_rt)) && (in_array("log_realtime", $report_item['table']))) {
|
||
// Get timestamp last valid entry
|
||
$timestamp['end'] = convert_datetime($log_rt[$rt['last_valid']['index']]['t'], TRUE);
|
||
|
||
// We now check the tcp connection during this period
|
||
$log_tcp = db_fetch_lance_tcp_status($item, $timestamp['begin'], TRUE);
|
||
|
||
if ((is_array($log_tcp)) && ($log_tcp['t'] < $log_rt[$rt['last_valid']['index']]['t'])) {
|
||
// Connection hick-up => Mark
|
||
$sts |= CON_HICKUP;
|
||
}
|
||
|
||
// Last requested entry?
|
||
if (($rt['last_valid']['index'] + 1) == sizeof($log_rt)) {
|
||
// Next log_realtime entry available?
|
||
if (is_array($next_log_rt)) {
|
||
// Next log_tcp entry available?
|
||
if ((!is_array($next_log_tcp)) || ($next_log_tcp['t'] > $next_log_rt[0]['t'])) {
|
||
// No changes within this the session or session still active
|
||
$timestamp['end'] = (strlen($end_period)) ? $end_period : $datetime;
|
||
|
||
// On going
|
||
$sts |= UNFINISHED_END;
|
||
}
|
||
}
|
||
else {
|
||
// No next log_tcp entry available?
|
||
if (!is_array($next_log_tcp)) {
|
||
// No end selected
|
||
if (!strlen($end_period)) {
|
||
// Get last known tcp status
|
||
$last_log_tcp = db_fetch_lance_tcp_status($item, $datetime, FALSE);
|
||
|
||
if ($last_log_tcp['event'] == "connect") {
|
||
// Session still active?
|
||
$timestamp['end'] = $datetime;
|
||
|
||
// On going
|
||
$sts |= UNFINISHED_END;
|
||
}
|
||
}
|
||
else {
|
||
// Session still active?
|
||
$timestamp['end'] = $end_period;
|
||
|
||
// On going
|
||
$sts |= UNFINISHED_END;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (convert_datetime($timestamp['end']) > convert_datetime($timestamp['begin'])) {
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $timestamp['begin'], end => $timestamp['end'], sts => $sts, log => $zkl['log'], src => "log_realtime"));
|
||
}
|
||
}
|
||
// No valid log_realtime entries => use end of log file
|
||
else {
|
||
// Fetch last log file entry
|
||
$last_entry = db_fetch_lance_log_file_last_entry($item, $log_files[$zkl['cnt']]);
|
||
|
||
// Valid timestamp => use log time
|
||
if (valid_gps_timestamp(convert_datetime($last_entry['t'], TRUE))) {
|
||
// Get last entry timestamp
|
||
$timestamp['end'] = convert_datetime($last_entry['t'], TRUE);
|
||
}
|
||
else {
|
||
// Get last entry timestamp
|
||
$timestamp['end'] = convert_datetime($last_entry['t_log'], TRUE);
|
||
|
||
// Server time used
|
||
$sts |= SERVER_TIME;
|
||
}
|
||
|
||
// Check begin/end times
|
||
$converted_time = convert_timeperiod($timestamp['begin'], $timestamp['end'], $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time)) {
|
||
// valid timespan
|
||
if (convert_datetime($converted_time[1]) > convert_datetime($converted_time[0])) {
|
||
// Unfinished begin?
|
||
if ((!$zkl['cnt']) && (strlen($begin_period)) && (convert_datetime($begin_period) > convert_datetime($timestamp['begin']))) {
|
||
$sts |= UNFINISHED_BEG;
|
||
}
|
||
|
||
// Unfinished end?
|
||
if ((strlen($end_period)) && (convert_datetime($timestamp['end']) < convert_datetime($converted_time[1]))) {
|
||
$sts |= UNFINISHED_END;
|
||
}
|
||
|
||
// New times
|
||
$timestamp['begin'] = $converted_time[0];
|
||
$timestamp['end'] = $converted_time[1];
|
||
// Store entry
|
||
array_push($valid_entries, array(begin => $timestamp['begin'], end => $timestamp['end'], sts => $sts, log => $zkl['log'], src => "log_zkl"));
|
||
}
|
||
}
|
||
}
|
||
|
||
// For debug purposes => Get execution times
|
||
if ($_SESSION[$_PAGE_INFO['id']]['dbg']['mask'] & 0x01) {
|
||
// Get end time
|
||
$log_end = microtime_float();
|
||
|
||
if (strlen($log_action)) {
|
||
// Debug info
|
||
DBG("Parse " . $lance['idcode'] . " FIND_END : " . $log_action . " " . ($log_end - $log_start) . "[s]");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
while ((is_array($log_files)) && (++$zkl['cnt'] < sizeof($log_files)));
|
||
}
|
||
|
||
// Extra action?
|
||
if ((is_array($valid_entries)) && (!empty($valid_entries))) {
|
||
switch($report_item['item']) {
|
||
case DETECTION:
|
||
// Detect jitter => Alarm => Within second
|
||
$saved_valid_entries = $valid_entries;
|
||
$valid_entries = array();
|
||
|
||
// Initial values
|
||
$begin = "";
|
||
|
||
for ($i=0; $i<sizeof($saved_valid_entries); $i++) {
|
||
if (!strlen($begin)) {
|
||
$begin = $saved_valid_entries[$i]['begin'];
|
||
$log = $saved_valid_entries[$i]['log'];
|
||
$sts = $saved_valid_entries[$i]['sts'];
|
||
$src = $saved_valid_entries[$i]['src'];
|
||
}
|
||
|
||
// Store values
|
||
$end = $saved_valid_entries[$i]['end'];
|
||
$sts |= $saved_valid_entries[$i]['sts'];
|
||
|
||
// Last entry
|
||
if (($i + 1) == sizeof($saved_valid_entries)) {
|
||
array_push($valid_entries, array(begin => $begin, end => $end, sts => $sts, log => $log, src => $src));
|
||
}
|
||
// New log file?
|
||
else if ($saved_valid_entries[$i + 1]['log'] != $log) {
|
||
array_push($valid_entries, array(begin => $begin, end => $end, sts => $sts, log => $log, src => $src));
|
||
|
||
// Clean up stored values
|
||
$begin = "";
|
||
}
|
||
// Next entry not within 3 seconds
|
||
else if (abs(convert_datetime($saved_valid_entries[$i + 1]['begin']) - convert_datetime($end)) > 3) {
|
||
array_push($valid_entries, array(begin => $begin, end => $end, sts => $sts, log => $log, src => $src));
|
||
|
||
// Clean up stored values
|
||
$begin = "";
|
||
}
|
||
else {
|
||
// Add measure hickup to status
|
||
$sts |= MEAS_HICKUP;
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Valid entries? => Write to report
|
||
if ((is_array($valid_entries)) && (!empty($valid_entries))) {
|
||
// Initial values
|
||
$offset_id = null;
|
||
$offset_t = "";
|
||
|
||
for($i = 0; $i < sizeof($valid_entries); $i++) {
|
||
// New log file => thick line
|
||
if (($i) && ($valid_entries[$i]['log'] != $valid_entries[$i - 1]['log'])) {
|
||
// Print thick line
|
||
empty_line(1, 1);
|
||
}
|
||
|
||
// Calculate duration when possible
|
||
if (strlen($valid_entries[$i]['begin']) && strlen($valid_entries[$i]['end'])) {
|
||
$duration = CalculateDuration($valid_entries[$i]['begin'], $valid_entries[$i]['end']);
|
||
}
|
||
|
||
// Store begin/end values before actions are taken
|
||
$begin = $valid_entries[$i]['begin'];
|
||
$end = $valid_entries[$i]['end'];
|
||
|
||
// Check whether log file time was used or an hickup in the data connection
|
||
if ($valid_entries[$i]['sts'] != OK) {
|
||
// Unfinished begin
|
||
if ($valid_entries[$i]['sts'] & UNFINISHED_BEG) {
|
||
$valid_entries[$i]['begin'] = "\x3C\x3C\x3C";
|
||
}
|
||
|
||
// Unfinished end
|
||
if ($valid_entries[$i]['sts'] & UNFINISHED_END) {
|
||
$valid_entries[$i]['end'] = "\x3E\x3E\x3E";
|
||
}
|
||
|
||
// Server time used begin
|
||
if ($valid_entries[$i]['sts'] & SERVER_TIME_BEG) {
|
||
$valid_entries[$i]['begin'] .= "\xC2\xB9";
|
||
$log_time_overall = TRUE;
|
||
}
|
||
|
||
// Server time used end
|
||
if ($valid_entries[$i]['sts'] & SERVER_TIME_END) {
|
||
$valid_entries[$i]['end'] .= "\xC2\xB9";
|
||
$log_time_overall = TRUE;
|
||
}
|
||
|
||
// Connection hickup
|
||
if ($valid_entries[$i]['sts'] & CON_HICKUP) {
|
||
$valid_entries[$i]['end'] .= "\xC2\xB2";
|
||
$con_hickup_overall = TRUE;
|
||
}
|
||
|
||
// Measurement hickup
|
||
if ($valid_entries[$i]['sts'] & MEAS_HICKUP) {
|
||
$valid_entries[$i]['end'] .= "\xC2\xB3";
|
||
$meas_hickup_overall = TRUE;
|
||
}
|
||
}
|
||
|
||
|
||
$csv_serial_nr = db_fetch_lance($item, "", 1);
|
||
$csv_owner = db_fetch_customer($info['eigenaar'], 1);
|
||
$csv_info = db_fetch_lance($item, "", 1);
|
||
|
||
|
||
switch($report_item['item']) {
|
||
case MEASUREMENT:
|
||
// Check if output is pdf or csv
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['begin'], $valid_entries[$i]['end'], $duration))));
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
// Check if there is a begin time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['begin'] != "\x3C\x3C\x3C") ? convert_datetime($valid_entries[$i]['begin']) : $valid_entries[$i]['begin'];
|
||
|
||
// Add record for measurment on
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code"). " " .ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> ucfirst(_('on')),_('Duration')." ".strtolower(_('Measurement'))=> "" ,'detection'=> "" ,_('Duration')." "._('detection')=> "" ,'short circuit'=> "" ,
|
||
'Battery'=> "" ,'Gps'=> ""));
|
||
|
||
// Check if there is a end time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['end'] != "\x3E\x3E\x3E") ? convert_datetime($valid_entries[$i]['end']) : $valid_entries[$i]['end'];
|
||
|
||
// Add record for measurment off
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code"). " " .ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> ucfirst(_('off')),_('Duration')." ".strtolower(_('Measurement'))=> $duration ,'detection'=> "" ,_('Duration')." "._('detection')=> "" ,'short circuit'=> "" ,
|
||
'Battery'=> "" ,'Gps'=> ""));
|
||
|
||
}
|
||
break;
|
||
case DETECTION:
|
||
if (db_check_system_device_capabilities($type['id'],"gps")) {
|
||
// Initial values
|
||
$gps_info = "-";
|
||
$gps_info_link = "";
|
||
|
||
// Find next GPS coordinate & create link
|
||
if ($valid_entries[$i]['src'] == "log_zkl") {
|
||
$gps = db_fetch_lance_gps_entry_between($item, "", "", $offset_t, $end);
|
||
}
|
||
else {
|
||
$gps = db_fetch_lance_log_gps_info($item, 1, "", $end, 1, "", TRUE, $offset_id);
|
||
|
||
// Fix array offset
|
||
$gps = $gps[0];
|
||
}
|
||
|
||
// No new entry?
|
||
if ((!is_array($gps)) && (is_array($stored_gps))) {
|
||
$gps = $stored_gps;
|
||
}
|
||
else {
|
||
// Starting id/time offset?
|
||
$offset_id = $gps['id'];
|
||
$offset_t = convert_datetime($gps['t'], TRUE);
|
||
$stored_gps = $gps;
|
||
}
|
||
|
||
if (is_array($gps)) {
|
||
$gps_info_link = GOOGLE_MAPS . "maps?q=" . $gps['latitude'] . ", " . $gps['longitude'];
|
||
$gps_info = $gps['latitude'] . ", " . $gps['longitude'];
|
||
}
|
||
|
||
// Check if output is pdf or csv
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['begin'], $valid_entries[$i]['end'],$duration, $gps_info), ishtml => array("","","","", array(type => link, data => $gps_info_link)))));
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv"){
|
||
// Check if there is a begin time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['begin'] != "\x3C\x3C\x3C") ? convert_datetime($valid_entries[$i]['begin']) : $valid_entries[$i]['begin'];
|
||
|
||
// Add record for detection on
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code")." ".ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> "",_('Duration')." ".strtolower(_('Measurement'))=> "" ,'detection'=> ucfirst(_('on')) ,_('Duration')." "._('detection')=> "" ,'short circuit'=> "" ,'Battery'=> "" ,'Gps'=> $gps_info));
|
||
|
||
// Check if there is a end time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['end'] != "\x3E\x3E\x3E") ? convert_datetime($valid_entries[$i]['end']) : $valid_entries[$i]['end'];
|
||
|
||
// Add record for detection off
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code"). " " .ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> "",_('Duration')." ".strtolower(_('Measurement'))=> "" ,'detection'=> ucfirst(_('off')) ,_('Duration')." "._('detection')=> $duration ,'short circuit'=> "" ,'Battery'=> "" ,'Gps'=> $gps_info));
|
||
}
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['begin'], $valid_entries[$i]['end'], $duration))));
|
||
}
|
||
break;
|
||
case SHORTCIRCUIT:
|
||
// Check if output is pdf or csv
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['data'], $valid_entries[$i]['begin']))));
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv"){
|
||
// Check if there is a begin time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['begin'] != "\x3C\x3C\x3C") ? convert_datetime($valid_entries[$i]['begin']) : $valid_entries[$i]['begin'];
|
||
|
||
|
||
// Get short circuit value
|
||
$space_pos = strpos($valid_entries[$i]['data'], " ");
|
||
$csv_shortcircuit=substr($valid_entries[$i]['data'],$space_pos + 1);
|
||
|
||
// Add record for short circuit
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code"). " " .ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> "",_('Duration')." ".strtolower(_('Measurement'))=> "" ,'detection'=> "" ,_('Duration')." "._('detection')=> "" ,'short circuit'=> ucfirst($csv_shortcircuit) ,'Battery'=> "" ,'Gps'=> ""));
|
||
}
|
||
break;
|
||
case BATTERY:
|
||
// Check if output is pdf or csv
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
$value = array($i + 1);
|
||
for($j = 0; $j < $type['nr_batterijen']; $j++) {
|
||
array_push($value, $valid_entries[$i]['data'][$j]);
|
||
}
|
||
array_push($value, $valid_entries[$i]['begin']);
|
||
report_data(array_merge($report_data, array(value => $value)));
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv"){
|
||
// Check if there is a begin time and convert it to unix time
|
||
$csv_time = ($valid_entries[$i]['begin'] != "\x3C\x3C\x3C") ? convert_datetime($valid_entries[$i]['begin']) : $valid_entries[$i]['begin'];
|
||
|
||
$battery_status="";
|
||
for($j = 0; $j < $type['nr_batterijen']; $j++) {
|
||
// Get Battery status
|
||
$battery_status .= _('Battery')." ".$j.": ".$valid_entries[$i]['data'][$j]." ";
|
||
}
|
||
|
||
// Add record Battery status
|
||
array_push($csv_data, array('Timestamp'=> $csv_time ,'Company'=> $csv_owner['bedrijfsnaam'],_("ID code"). " " .ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name'])=> $csv_info['idcode'] ,_("ID code")." "._("owner")=> $csv_serial_nr['serienr'],'Equipment type'=> $type['naam'],'Measurement'=> "",_('Duration')." ".strtolower(_('Measurement'))=> "" ,'detection'=> "" ,_('Duration')." "._('detection')=> "" ,'short circuit'=> "" ,'Battery'=> $battery_status ,'Gps'=> ""));
|
||
|
||
}
|
||
break;
|
||
case SMS:
|
||
// Calculate number of lines needed for the text
|
||
$lines = nmr_lines($valid_entries[$i]['data'][2], 48);
|
||
|
||
for ($j = 0; $j < sizeof($lines); $j++) {
|
||
// Get text
|
||
$text = $lines[$j];
|
||
if (sizeof($lines) > 1) {
|
||
if (!$j) {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['begin'], $valid_entries[$i]['data'][0], $valid_entries[$i]['data'][1], $text), border => array("LRT","LRT","LRT","LRT","LRT"), nr_lines => sizeof($lines))));
|
||
}
|
||
else {
|
||
if (($j + 1) == sizeof($lines)) {
|
||
report_data(array_merge($report_data, array(value => array("", "", "", "", $text), border => array("LRB","LRB", "LRB","LRB","LRB"))));
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array("", "", "", "", $text), border => array("LR","LR", "LR","LR","LR"))));
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array(($i + 1), $valid_entries[$i]['begin'], $valid_entries[$i]['data'][0], $valid_entries[$i]['data'][1], $valid_entries[$i]['data'][2]))));
|
||
}
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
// No (valid) log files => No (valid) log_realtime entries => Nothing to display
|
||
else if (empty($valid_entries)) {
|
||
switch($report_item['item']) {
|
||
case MEASUREMENT:
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("1","-","-","-"))));
|
||
}
|
||
break;
|
||
case DETECTION:
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
if (db_check_system_device_capabilities($type['id'],"gps")) {
|
||
report_data(array_merge($report_data, array(value => array("1","-","-","-","-"))));
|
||
}
|
||
else {
|
||
report_data(array_merge($report_data, array(value => array("1","-","-","-"))));
|
||
}
|
||
}
|
||
break;
|
||
case SHORTCIRCUIT:
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
report_data(array_merge($report_data, array(value => array("1","-","-"))));
|
||
}
|
||
break;
|
||
case BATTERY:
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
$value = array("1");
|
||
for($i = 0; $i < $type['nr_batterijen']; $i++) {
|
||
array_push($value, "-");
|
||
}
|
||
array_push($value, "-");
|
||
report_data(array_merge($report_data, array(value => $value)));
|
||
}
|
||
break;
|
||
case SMS:
|
||
report_data(array_merge($report_data, array(value => array("1","-","-","-","-"))));
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Clear new page header
|
||
$_PAGE_INFO['new_page_hdr'] = "";
|
||
|
||
// Remove array entry when dummy was added
|
||
if ($remove_first) {
|
||
$log_files = array_slice($log_files, 1);
|
||
|
||
// Clear flag
|
||
$remove_first = FALSE;
|
||
}
|
||
|
||
// When only log_zkl => restore log_files_non_corrupt array (all log files excluded the corrupted ones)
|
||
if ((in_array("log_zkl", $report_item['table'])) && (sizeof($report_item['table']) == 1)) {
|
||
$log_files = $log_files_non_corrupt;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Print data to csv file
|
||
// Check if output is csv
|
||
if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
if (is_array($csv_data) && !empty($csv_data)) {
|
||
|
||
// Sort data at time ascending
|
||
$csv_data = array_sort($csv_data, "Timestamp", SORT_NUMERIC, SORT_ASC);
|
||
|
||
// Create array for the merged csv_data
|
||
$csv_data_compared = array();
|
||
|
||
// Variable for how many the same timestamps there are behind each other
|
||
$j=1;
|
||
|
||
// If there is data at the same timestamp then merge the data
|
||
for ($x=0; $x < sizeof($csv_data); $x++) {
|
||
|
||
// The first element have nothing to compare with
|
||
if ($x > 0) {
|
||
// Compare if timestamp of element is the same as the timestamp of the element before and merge the data of the two elements
|
||
if ($csv_data[$x]['Timestamp'] === $csv_data[$x-1]['Timestamp']) {
|
||
$sameData=FALSE;
|
||
|
||
// Copy Timestamp
|
||
$csv_data_compared[$x-$j]['Timestamp'] = $csv_data[$x]['Timestamp'];
|
||
|
||
// Copy Measurement only if Measurement in $csv_data_compared is empty or $csv_data contains Measurement data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j]['Measurement'])){
|
||
$csv_data_compared[$x-$j]['Measurement'] = $csv_data[$x]['Measurement'];
|
||
}
|
||
else if(!empty($csv_data[$x]['Measurement'])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1]['Measurement'] = $csv_data[$x]['Measurement'];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
// Copy Duration measurement only if Duration measurement in $csv_data_compared is empty or $csv_data contains Duration measurement data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j][_('Duration')." ".strtolower(_('Measurement'))])){
|
||
$csv_data_compared[$x-$j][_('Duration')." ".strtolower(_('Measurement'))] = $csv_data[$x][_('Duration')." ".strtolower(_('Measurement'))];
|
||
}
|
||
else if(!empty($csv_data[$x][_('Duration')." ".strtolower(_('Measurement'))])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1][_('Duration')." ".strtolower(_('Measurement'))] = $csv_data[$x][_('Duration')." ".strtolower(_('Measurement'))];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
// Copy detection only if detection in $csv_data_compared is empty or $csv_data contains detection data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j]['detection'])){
|
||
$csv_data_compared[$x-$j]['detection'] = $csv_data[$x]['detection'];
|
||
}
|
||
else if(!empty($csv_data[$x]['detection'])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1]['detection'] = $csv_data[$x]['detection'];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
// Copy Duration detection only if Duration detection in $csv_data_compared is empty or $csv_data contains Duration detection data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j][_('Duration')." "._('detection')])){
|
||
$csv_data_compared[$x-$j][_('Duration')." "._('detection')] = $csv_data[$x][_('Duration')." "._('detection')];
|
||
}
|
||
else if(!empty($csv_data[$x][_('Duration')." "._('detection')])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1][_('Duration')." "._('detection')] = $csv_data[$x][_('Duration')." "._('detection')];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
// Copy Battery only if Battery in $csv_data_compared is empty or $csv_data contains Battery data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j]['Battery'])){
|
||
$csv_data_compared[$x-$j]['Battery'] = $csv_data[$x]['Battery'];
|
||
}
|
||
else if(!empty($csv_data[$x]['Battery'])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1]['Battery'] = $csv_data[$x]['Battery'];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
// Copy short circuit only if short circuit in $csv_data_compared is empty or $csv_data contains short circuit data => make new record in $csv_data_compared
|
||
if(empty($csv_data_compared[$x-$j]['short circuit'])){
|
||
$csv_data_compared[$x-$j]['short circuit'] = $csv_data[$x]['short circuit'];
|
||
}
|
||
else if(!empty($csv_data[$x]['short circuit'])){
|
||
// Only copy the first 5 elements of the array
|
||
$csv_data_compared[$x-$j+1] = array_slice($csv_data_compared[$x-$j], 0, 5, true);
|
||
$csv_data_compared[$x-$j+1]['short circuit'] = $csv_data[$x]['short circuit'];
|
||
$sameData=TRUE;
|
||
}
|
||
|
||
if (!$sameData) {
|
||
$j++;
|
||
}
|
||
|
||
// The fields : Company, ID Dual Inventive, Id relation, Equipement are always the same by the same equipment.
|
||
// The field gps is linked to the field detection (gps won't change in the same timestamp)
|
||
// Don't merge these fields
|
||
|
||
}
|
||
else {
|
||
// Copy the csv_data in a new element of csv_data_compared
|
||
$csv_data_compared[$x] = $csv_data[$x];
|
||
$j=1;
|
||
}
|
||
}
|
||
else {
|
||
// Copy the csv_data in a new element of csv_data_compared
|
||
$csv_data_compared[$x] = $csv_data[$x];
|
||
}
|
||
}
|
||
|
||
foreach ($csv_data_compared as $cvs_value) {
|
||
if ($cvs_value['Timestamp'] == '<<<') {
|
||
$cvs_value['Timestamp'] = $begin_period;
|
||
}
|
||
else if ($cvs_value['Timestamp'] == '>>>') {
|
||
$cvs_value['Timestamp'] = $end_period;
|
||
}
|
||
else {
|
||
// Convert unix time to real time if timestamp is a unix time
|
||
$cvs_value['Timestamp'] = (($cvs_value['Timestamp'] == '<<<') || ($cvs_value['Timestamp'] == '>>>')) ? $cvs_value['Timestamp'] :convert_datetime($cvs_value['Timestamp'],1);
|
||
}
|
||
$headers = array();
|
||
|
||
// Make the header
|
||
foreach ($cvs_value as $key => $item_csv) {
|
||
array_push($headers, $key);
|
||
}
|
||
|
||
// Use array_values() to make from an associative array an index array. report_data_field needs an index array
|
||
report_data_field($all_fields, array(value => array_values($cvs_value)), $headers);
|
||
}
|
||
}
|
||
}
|
||
|
||
/************************************/
|
||
/* Overview gps */
|
||
/************************************/
|
||
if (isset($report_info["gps_" . $type['id']])) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Initial values
|
||
$counter = 0;
|
||
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
report_data(array(value => array(_("Overview gps tracks") . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _("Overview gps tracks") . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 3 ));
|
||
|
||
// Only log_zkl used at the moment
|
||
if (is_array($log_files_corrupt)) {
|
||
// Get kml track
|
||
include("kml.php");
|
||
}
|
||
|
||
// Clear new page header
|
||
$_PAGE_INFO['new_page_hdr'] = "";
|
||
|
||
// Add kml as attachment
|
||
if ((isset($_PAGE_INFO['kml'])) && (file_exists($_PAGE_INFO['kml']))) {
|
||
report_data(array(value => array(" Gps track kml " . _("attachment")) ,
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "attachment", data => "", filename => $_PAGE_INFO['kml'], mimetype => "application/vnd.google-earth.kml+xml"))));
|
||
|
||
// Remove file (later on!)
|
||
array_push($_PAGE_INFO['delete'], $_PAGE_INFO['kml']);
|
||
unset($_PAGE_INFO['kml']);
|
||
}
|
||
else {
|
||
report_data(array(value => array("-") ,
|
||
border => array("LRBT") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => array(180) ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
}
|
||
|
||
/************************************/
|
||
/* Overview temperatures */
|
||
/************************************/
|
||
if (isset($report_info["temp_" . $type['id']])) {
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
report_data(array(value => array(_("Overview") . " " . _("temperature") . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _("Overview") . " " . _("temperature") . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 27 ));
|
||
|
||
|
||
if ((is_array($log_files)) || (is_array($log_rt))) {
|
||
// Plot graph
|
||
plot_temp_graph($info['id'], $begin_period, $end_period, $log_files, $log_rt, "temp_plot" . "_" . date('Y-m-d') . "_" . $info['id'] . ".png");
|
||
}
|
||
|
||
if ((isset($_PAGE_INFO['plot_temp'])) && (file_exists($_PAGE_INFO['plot_temp']))) {
|
||
pdf_print_image("temp_image", $_PAGE_INFO['plot_temp'], 432);
|
||
|
||
// Remove file (later on!)
|
||
array_push($_PAGE_INFO['delete'], $_PAGE_INFO['plot_temp']);
|
||
unset($_PAGE_INFO['plot_temp']);
|
||
}
|
||
else {
|
||
report_data(array(value => array("-") ,
|
||
border => array("LRBT") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => array(180) ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
else if (strtolower($_PAGE_INFO['report_type']) == "csv") {
|
||
for($i=0; $i < 2; $i++) {
|
||
// on-board(0)/extern(1)
|
||
switch($i) {
|
||
case 0:
|
||
$header = "temperature on-board";
|
||
$cap = "temperatuursensor on-board";
|
||
break;
|
||
case 1:
|
||
$header = "temperature external";
|
||
$cap = "temperatuursensor extern";
|
||
break;
|
||
}
|
||
|
||
// Check capability
|
||
if ((db_check_system_device_capabilities($type['id'], $cap)) ||
|
||
($cap == "temperatuursensor on-board") &&
|
||
!db_check_system_device_capabilities($type['id'],"temperatuursensor on-board") &&
|
||
db_check_system_device_capabilities($type['id'], "temperatuursensor extern") &&
|
||
db_system_device_nr_tempsensors($type['id']) > 1) {
|
||
|
||
// Print empty line
|
||
empty_line();
|
||
|
||
// Header
|
||
report_data(array(value => array(_("Overview") . " " . _($header) . " " . $info['idcode'] . $period),
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => "" ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => _("Overview") . " " . _($header) . " " . $info['idcode'], parent => $_PAGE_INFO['bookmark_handle'], bold => 0)),
|
||
nr_lines => 3 ));
|
||
|
||
// Fetch all temp
|
||
$temp_status = db_fetch_lance_log_temp($item, $i, 0, "", "");
|
||
|
||
// Initial values
|
||
$counter = 0;
|
||
$store_log = "";
|
||
$last_value = -128;
|
||
|
||
if (is_array($temp_status)) {
|
||
foreach ($temp_status as $entry) {
|
||
// Reset log_time
|
||
$log_time = FALSE;
|
||
|
||
// New valid value
|
||
if (($last_value != (int)$entry['temp']) && (int)$entry['temp'] > (int)-10 && (int)$entry['temp'] < 50) {
|
||
|
||
// Store value
|
||
$last_value = $entry['temp'];
|
||
|
||
// Valid gps time?
|
||
$extra_comma = "";
|
||
if (valid_gps_timestamp(convert_datetime($entry['t'], TRUE))) {
|
||
$timestamp = convert_datetime($entry['t'], TRUE);
|
||
}
|
||
else {
|
||
$timestamp = convert_datetime($entry['t_log'], TRUE);
|
||
$log_time = TRUE;
|
||
}
|
||
|
||
// Check begin/end times
|
||
$converted_time = convert_timeperiod($timestamp, "", $begin_period, $end_period);
|
||
|
||
if (is_array($converted_time)) {
|
||
// New times
|
||
$timestamp = $converted_time[0];
|
||
|
||
// Add comma?
|
||
if ($log_time) {
|
||
$extra_comma = ",\xC2\xB9";
|
||
$log_time_overall = TRUE;
|
||
}
|
||
|
||
// Get log_file info
|
||
$start_log = array(sdcard => $entry['sdcard'], startup => $entry['startup'], rpgmcount => $entry['rpgmcount']);
|
||
|
||
// New log file => thick line
|
||
if (is_array($store_log)) {
|
||
if ($store_log != $start_log) {
|
||
// Print thick line
|
||
empty_line(1, 1);
|
||
}
|
||
}
|
||
|
||
// Store new start_log
|
||
$store_log = $start_log;
|
||
|
||
// Print new line report
|
||
$value = array(++$counter, $last_value . " <20>C", $timestamp);
|
||
array_push($value, $extra_comma);
|
||
report_data(array(value => $value ,
|
||
border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("C","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(15,110,55) ,
|
||
check_page_end => 1 ));
|
||
|
||
// Log time used?
|
||
$log_time_overall = ($log_time) ? 1 : $log_time_overall;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// No entries
|
||
if (!$counter) {
|
||
// Print new line report
|
||
report_data(array(value => array(++$counter, "-", "-") ,
|
||
border => array("LRBT","LRBT","LRBT") ,
|
||
bold => array(0,0,0) ,
|
||
align => array("C","L","L") ,
|
||
font_size => array(8,8,8) ,
|
||
cell_width => array(15,110,55) ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
|
||
// Clear new page header
|
||
$_PAGE_INFO['new_page_hdr'] = "";
|
||
}
|
||
}
|
||
}
|
||
|
||
/************************************/
|
||
/* Notes/remarks */
|
||
/************************************/
|
||
if (strtolower($_PAGE_INFO['report_type']) == "pdf") {
|
||
if ($log_time_overall) {
|
||
report_data(array(value => array("\xC2\xB9 Due an invalid GPS time, the database log time has been used"),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => "" ,
|
||
check_page_end => 0 ));
|
||
|
||
// Clear flag
|
||
$log_time_overall = FALSE;
|
||
}
|
||
|
||
if ($con_hickup_overall) {
|
||
report_data(array(value => array("\xC2\xB2 These results can differ, due limited data connections"),
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => "" ,
|
||
check_page_end => 0 ));
|
||
|
||
// Clear flag
|
||
$con_hickup_overall = FALSE;
|
||
}
|
||
|
||
if ($meas_hickup_overall) {
|
||
report_data(array(value => array("\xC2\xB3 There has been a possible GSM interruption") ,
|
||
border => array("") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(8) ,
|
||
cell_width => "" ,
|
||
check_page_end => 0 ));
|
||
|
||
// Clear flag
|
||
$meas_hickup_overall = FALSE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Restore database connection
|
||
db_connect();
|
||
|
||
// Generate document
|
||
return report_generate();
|
||
}
|
||
|
||
/**
|
||
* Create the gps track report
|
||
*/
|
||
function report_gps_track($report_info) {
|
||
GLOBAL $_PAGE_INFO;
|
||
|
||
// Initial values
|
||
$equipment = array();
|
||
|
||
// Begin and end of report period
|
||
$begin_period = "";
|
||
$end_period = "";
|
||
if (strlen($report_info['begin_datum'])) {
|
||
$begin_period = $report_info['begin_datum'] . " " . $report_info['begin_tijd'];
|
||
}
|
||
if (strlen($report_info['eind_datum'])) {
|
||
$end_period = $report_info['eind_datum'] . " " . $report_info['eind_tijd'];
|
||
}
|
||
if (strlen($report_info['speed'])) {
|
||
$speed_post = "&speed";
|
||
}
|
||
|
||
// Retrieve all device types
|
||
$types = db_fetch_system_devices($_PAGE_INFO['i18n']);
|
||
|
||
if (is_array($types)) {
|
||
foreach($types as $type) {
|
||
if (strlen($report_info[$type['id']])) {
|
||
$items = split(",", $report_info[$type['id']]);
|
||
if (is_array($items)) {
|
||
foreach($items as $item) {
|
||
array_push($equipment, $item);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Generate kml file
|
||
header("Location: ?id=" . $_PAGE_INFO['id'] . "&redirect=include/kml.php&begin_period=" . $begin_period . "&end_period=" . $end_period . $speed_post . "&equipment=" . implode("," ,$equipment) . "");
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the mtinfo hierarchy overview
|
||
*/
|
||
function report_hierarchy() {
|
||
global $_PAGE_INFO;
|
||
|
||
// Retrieve info
|
||
$date = date('Y-m-d');
|
||
$datetime = date('Y-m-d / H:i:s');
|
||
$user = db_fetch_user($_PAGE_INFO['login']['user']['id'], "", 1);
|
||
$customer = db_fetch_customer($_PAGE_INFO['login']['customer']['id'], 1);
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = "pdf";
|
||
$_PAGE_INFO['dest'] = "D";
|
||
$_PAGE_INFO['file'] = str_replace(" ", "_", _("MTinfo hierarchy")) . "_" . str_replace("-", "", $date) . ".pdf";
|
||
|
||
// Create header info
|
||
report_header(array(subject => "MTinfo hierarchy" ,
|
||
header => _("MTinfo hierarchy") ,
|
||
data => array( array("Date", $datetime) ,
|
||
array("MTinfo", VERSION . (is_ReleaseCandidate() ? " - " . $_SESSION[$_PAGE_INFO['id']]['release_dir'] : "")),
|
||
array("User", getUser($user['id'])))));
|
||
|
||
// Determine all childs
|
||
$relations = array();
|
||
$_PAGE_INFO['childs'] = array($customer);
|
||
|
||
childs_recursive($_PAGE_INFO['login']['customer']['id']);
|
||
|
||
/************************************/
|
||
/* Company hierarchy */
|
||
/************************************/
|
||
if (!empty($_PAGE_INFO['childs'])) {
|
||
// Add title to report
|
||
report_data(array(value => array("Company hierarchy") ,
|
||
border => array("B") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(11) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => "Company hierarchy", parent => 0, bold => 1)),));
|
||
|
||
for($i=0; $i<sizeof($_PAGE_INFO['childs']); $i++) {
|
||
$value = array();
|
||
$border = array();
|
||
$bold = array();
|
||
$align = array();
|
||
$font_size = array();
|
||
$cell_width = array();
|
||
|
||
// Relation?
|
||
$pos = 0;
|
||
if (is_array($relations)) {
|
||
for ($j=0; $j<sizeof($relations); $j++) {
|
||
if (array_search($_PAGE_INFO['childs'][$i]['primaire_klant'], $relations[$j]) !== FALSE) {
|
||
$pos = $j + 1;
|
||
}
|
||
}
|
||
}
|
||
|
||
// extra tabs
|
||
if ($pos) {
|
||
for ($j=0; $j<$pos; $j++) {
|
||
// Add tabs
|
||
array_push($value ,"");
|
||
array_push($border ,(!$j) ? "L" : "");
|
||
array_push($bold ,0);
|
||
array_push($align ,"L");
|
||
array_push($font_size ,9);
|
||
array_push($cell_width ,5);
|
||
}
|
||
|
||
// Add relation
|
||
if (!is_array($relations[$pos])) {
|
||
$relations[$pos] = array();
|
||
}
|
||
array_push($relations[$pos], $_PAGE_INFO['childs'][$i]['id']);
|
||
|
||
}
|
||
else {
|
||
// Add relation
|
||
if (!is_array($relations[0])) {
|
||
$relations[0] = array();
|
||
}
|
||
array_push($relations[0], $_PAGE_INFO['childs'][$i]['id']);
|
||
}
|
||
|
||
// Next child => child?
|
||
$parent = 0;
|
||
if (($i + 1) < sizeof($_PAGE_INFO['childs'])) {
|
||
$parent = ($_PAGE_INFO['childs'][$i+ 1]['primaire_klant'] == $_PAGE_INFO['childs'][$i]['id']) ? 1 : $parent;
|
||
}
|
||
|
||
// Add child
|
||
report_data(array(value => array_merge($value ,array("",$_PAGE_INFO['childs'][$i]['bedrijfsnaam'] . " " . "(" . $_PAGE_INFO['childs'][$i]['klantnaam'] . ")")),
|
||
border => array_merge($border ,(!$i) ? array("L","R") : array("","R")),
|
||
bold => array_merge($bold ,array(0,0)) ,
|
||
align => array_merge($align ,array("L","L")) ,
|
||
font_size => array_merge($font_size ,array(9,9)) ,
|
||
cell_width => array_merge($cell_width ,array(4,176 - ($pos * 5))) ,
|
||
cell_height => 18 ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "image", left => 2 + ($pos * 5), width => 6, filename => ($parent) ? "icon_plus.png" : "dot.png"))));
|
||
}
|
||
|
||
// end line
|
||
report_data(array(value => array("") ,
|
||
border => array("T") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 0 ));
|
||
}
|
||
|
||
/************************************/
|
||
/* Company Info */
|
||
/************************************/
|
||
if (!empty($_PAGE_INFO['childs'])) {
|
||
for($i=0; $i<sizeof($_PAGE_INFO['childs']); $i++) {
|
||
// Check user rights
|
||
if (db_ver_rights_user_one_valid($_PAGE_INFO['login']['user']['id'], "menu:gebruikers&menu:gebruikers:zoeken,menu:gebruikers:root,menu:lansen&menu:lansen:zoeken,menu:lansen:root")) {
|
||
// Add title to report
|
||
report_data(array(value => array($_PAGE_INFO['childs'][$i]['bedrijfsnaam'] . " " . "(" . $_PAGE_INFO['childs'][$i]['klantnaam'] . ")") ,
|
||
border => array("") ,
|
||
bold => array(1) ,
|
||
align => array("L") ,
|
||
font_size => array(11) ,
|
||
cell_width => "" ,
|
||
cell_height => 16 ,
|
||
check_page_end => 0 ,
|
||
ishtml => array(array(type => "bookmark", data => $_PAGE_INFO['childs'][$i]['bedrijfsnaam'] . " " . "(" . $_PAGE_INFO['childs'][$i]['klantnaam'] . ")", parent => 0, bold => 1)),
|
||
nr_lines => 4 ));
|
||
}
|
||
|
||
/************************************/
|
||
/* Users */
|
||
/************************************/
|
||
if (db_ver_rights_user_one_valid($_PAGE_INFO['login']['user']['id'], "menu:gebruikers&menu:gebruikers:zoeken,menu:gebruikers:root")) {
|
||
// Add child users
|
||
$users = db_fetch_users($_PAGE_INFO['childs'][$i]['id']);
|
||
|
||
// Fetch project leaders
|
||
$project_leaders_id = array();
|
||
$project_leaders = db_fetch_projectleaders($_PAGE_INFO['childs'][$i]['id']);
|
||
|
||
if (is_array($project_leaders)) {
|
||
foreach($project_leaders as $project_leader) {
|
||
array_push($project_leaders_id, $project_leader['id']);
|
||
}
|
||
}
|
||
|
||
// Add user header
|
||
report_data(array(value => array("Users") ,
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("LRBT") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => "Users", parent => $_PAGE_INFO['bookmark_handle'], bold => 1)),
|
||
nr_lines => 3 ));
|
||
|
||
// Add user header
|
||
report_data(array(value => array("Username", "Initials", "First name", "Last name", "Alarm number", _("Project leader") . "(RC)"),
|
||
border => array("LRBT","LRBT","LRBT","LRBT","LRBT", "LRBT") ,
|
||
bold => array(1,1,1,1,1,1) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ,
|
||
new_page_hdr => 1 ));
|
||
|
||
if (is_array($users)) {
|
||
foreach($users as $user) {
|
||
// Add users
|
||
report_data(array(value => array($user['gebruikersnaam'], $user['voorletters'], $user['voornaam'], $user['achternaam'], $user['alarmnr'], (in_array($user['id'],$project_leaders_id)) ? "X" : ""),
|
||
border => array("LRBT","LRBT","LRBT","LRBT","LRBT", "LRBT") ,
|
||
bold => array(0,0,0,0,0,0) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
else {
|
||
report_data(array(value => array("-", "-", "-", "-", "-","-") ,
|
||
border => array("LRBT","LRBT","LRBT","LRBT", "LRBT", "LRBT") ,
|
||
bold => array(0,0,0,0,0) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
// end line
|
||
report_data(array(value => array("") ,
|
||
border => array("T") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(18) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 0 ));
|
||
|
||
// Clear new page header
|
||
$_PAGE_INFO['new_page_hdr'] = "";
|
||
}
|
||
|
||
/************************************/
|
||
/* Equipment */
|
||
/************************************/
|
||
if (db_ver_rights_user_one_valid($_PAGE_INFO['login']['user']['id'], "menu:lansen&menu:lansen:offline_status,menu:lansen:root")) {
|
||
// Add child lances (own equipment)
|
||
$lances = db_fetch_lances($_PAGE_INFO['childs'][$i]['id'], "", "", 6);
|
||
|
||
// Add equipment header
|
||
report_data(array(value => array("Equipment") ,
|
||
border => array("LRBT") ,
|
||
bold => array(1) ,
|
||
align => array("LRBT") ,
|
||
font_size => array(9) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ,
|
||
ishtml => array(array(type => "bookmark", data => "Equipment", parent => $_PAGE_INFO['bookmark_handle'], bold => 1)),
|
||
nr_lines => 3 ));
|
||
|
||
// Add equipment header
|
||
report_data(array(value => array("ID code", _("ID code") . " " . _("owner"), "Status", "Telephone", "Equipment type", "Rented"),
|
||
border => array("LRBT","LRBT","LRBT","LRBT", "LRBT", "LRBT") ,
|
||
bold => array(1,1,1,1,1,1) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ,
|
||
new_page_hdr => 1 ));
|
||
|
||
if (is_array($lances)) {
|
||
foreach($lances as $lance) {
|
||
// Add equipment
|
||
$type = db_fetch_system_devices($_PAGE_INFO['i18n'],$lance['device']);
|
||
$rented = (($lance['eigenaar'] == $lance['gebruiker']) || (is_null($lance['gebruiker']))) ? "" : "X";
|
||
report_data(array(value => array($lance['serienr'], $lance['idcode'], $lance['lans_status'], $lance['telefoonnr'], $type[0]['naam'], $rented),
|
||
border => array("LRBT","LRBT","LRBT","LRBT", "LRBT", "LRBT") ,
|
||
bold => array(0,0,0,0,0,0) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
}
|
||
else {
|
||
report_data(array(value => array("-", "-", "-", "-", "-", "-") ,
|
||
border => array("LRBT","LRBT","LRBT","LRBT", "LRBT", "LRBT") ,
|
||
bold => array(0,0,0,0,0,0) ,
|
||
align => array("L","L","L","L","L","C") ,
|
||
font_size => array(8,8,8,8,8,8) ,
|
||
cell_width => array(31,31,31,31,31,25) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 1 ));
|
||
}
|
||
|
||
// end line
|
||
report_data(array(value => array("") ,
|
||
border => array("T") ,
|
||
bold => array(0) ,
|
||
align => array("L") ,
|
||
font_size => array(18) ,
|
||
cell_width => array(180) ,
|
||
cell_height => 16 ,
|
||
check_page_end => 0 ));
|
||
|
||
// Clear new page header
|
||
$_PAGE_INFO['new_page_hdr'] = "";
|
||
}
|
||
}
|
||
}
|
||
|
||
// Generate document
|
||
report_generate();
|
||
}
|
||
|
||
|
||
/**
|
||
* Create the users report
|
||
*/
|
||
function report_user() {
|
||
GLOBAL $_PAGE_INFO;
|
||
|
||
// Give the script some extra memory and execution time
|
||
ini_set("memory_limit","2048M");
|
||
ini_set("max_execution_time","120");
|
||
|
||
// Define voor default action
|
||
define("DEFAULT_EMPTY_VALUE" ,'-');
|
||
|
||
// Get log data from the "report" database
|
||
db_connect("report", "log");
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = "csv";
|
||
$_PAGE_INFO['dest'] = "D";
|
||
$_PAGE_INFO['file'] = str_replace(" ", "_", _("User report")) . "_" . str_replace("-", "", date('Y-m-d')) . ".csv";
|
||
|
||
// Define header
|
||
$all_fields = array("Timestamp", "User", "Company name", "Mobile number","Emergency number", "Interface","Page menu","Ip",_("ID code")." ".ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name']),_("ID code")." "._("owner"),"GPS","Project","Action");
|
||
|
||
// An array for the log user data
|
||
$array_log_user = array();
|
||
|
||
// Create document header
|
||
report_header();
|
||
|
||
// Create first line header
|
||
report_data(array(value => $all_fields));
|
||
|
||
// Search all users down the pyramid
|
||
$users = db_search_users();
|
||
|
||
// Get all user info
|
||
if (is_array($users)) {
|
||
foreach ($users as $user) {
|
||
// Get user company
|
||
$company = db_fetch_customer($user['klant'], 1);
|
||
|
||
// Get alarm number of the user
|
||
$phone_nr = $user['alarmnr'];
|
||
|
||
// Get mobile number of the user
|
||
$mobile_number = $user['mobielnr'];
|
||
|
||
if (empty($mobile_number)) {
|
||
$mobile_number = DEFAULT_EMPTY_VALUE;
|
||
}
|
||
|
||
// Get user id
|
||
$ids = $user['id'];
|
||
|
||
// Initialisation values
|
||
$session[$session_id]['RSID']=DEFAULT_EMPTY_VALUE;
|
||
|
||
// Get log user entries for each user
|
||
$log_users = db_fetch_user_log($ids);
|
||
if (is_array($log_users)) {
|
||
foreach ($log_users as $log_user) {
|
||
// Get session_id
|
||
$session_id = $log_user['session_id'];
|
||
|
||
// Check if the log user have an session id
|
||
if (!empty($session_id)) {
|
||
// Get time
|
||
$timestamp = $log_user['tijd'];
|
||
|
||
// Get page
|
||
$page_menu = $log_user['menu'];
|
||
|
||
// Default value for action
|
||
$action=DEFAULT_EMPTY_VALUE;
|
||
|
||
// Get an action if menu is `menu:lans...`, `menu:klanten...`, `menu:gebruikers...`, `menu:projecten...`
|
||
if (fnmatch('menu:lans*',$page_menu) || fnmatch('menu:projecten*',$page_menu)|| fnmatch('menu:lans:relais_aansturing*',$page_menu) || fnmatch('menu:realtime_status*',$page_menu)) {
|
||
// Get the idcode
|
||
$action = db_fetch_user_log_zkl($log_user['id']);
|
||
|
||
if (!empty($action)) {
|
||
$temp = "";
|
||
for ($i=0; $i<sizeof($action); $i++) {
|
||
if (strlen($temp)) { $temp .= " "; }
|
||
|
||
// Check if there is any change of equipment
|
||
if (!empty($action[$i]['change']) && $action[$i]['change'] == TRUE) {
|
||
$temp.=_('Save')." ".strtolower(_('Equipment')).": ".$action[$i]['idcode'];
|
||
}
|
||
else {
|
||
$temp.=_('Equipment').": ".$action[$i]['idcode']." ".strtolower(_('Selected'));
|
||
}
|
||
}
|
||
$action=$temp;
|
||
}
|
||
else {
|
||
$action=DEFAULT_EMPTY_VALUE;
|
||
}
|
||
|
||
$getFormdata = $log_user['formdata'];
|
||
if (strlen($getFormdata)) {
|
||
|
||
$getFormdata_Array = unserialize($getFormdata);
|
||
if (is_array($getFormdata_Array)) {
|
||
switch ($page_menu) {
|
||
// Get filename of opened equipment report
|
||
case 'menu:lansen:materieel_documentatie:overzicht':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['filename'];
|
||
break;
|
||
|
||
// Get filename of new equipment report
|
||
case 'menu:lansen:materieel_documentatie:nieuw':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['filename'];
|
||
if($getFormdata_Array['filename'] !== $getFormdata_Array['omschrijving']){
|
||
$action .="("._('Description').": ".$getFormdata_Array['omschrijving'].")";
|
||
}
|
||
break;
|
||
|
||
// Get filename of removed equipment report
|
||
case 'menu:lansen:materieel_documentatie:verwijderen':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['filename'];
|
||
break;
|
||
|
||
// Get filename of changed equipment report
|
||
case 'menu:lansen:materieel_documentatie:verwijderen':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['omschrijving'];
|
||
break;
|
||
|
||
// Get filename of changed project report
|
||
case 'menu:projecten:project_documentatie:nieuw':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['filename'];
|
||
break;
|
||
|
||
// Get filename of changed project report
|
||
case 'menu:projecten:project_documentatie:verwijderen':
|
||
// Get filename
|
||
$action .=" "._('Filename').": ".$getFormdata_Array['filename'];
|
||
break;
|
||
|
||
// Get language of open maintenance report
|
||
case 'menu:lansen:onderhoudsrapporten:overzicht':
|
||
$currentLanguage = $getFormdata_Array['filename'];
|
||
$languageSplit = split('-', $currentLanguage);
|
||
$action .= " "._('Language').": "._($languageSplit[3]);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (fnmatch('menu:klanten*',$page_menu)) {
|
||
// Get the company name
|
||
$action = db_fetch_user_log_customer($log_user['id']);
|
||
|
||
if (!empty($action)) {
|
||
// Check if there is any change of company
|
||
if (!empty($action[0]['change']) && $action[0]['change'] == TRUE) {
|
||
$action=_('Save')." ".strtolower(_('Company')).": ".$action[0]['bedrijfsnaam'];
|
||
}
|
||
else {
|
||
$action=_('Company').": ".$action[0]['bedrijfsnaam']." ".strtolower(_('Selected'));
|
||
}
|
||
}
|
||
else {
|
||
$action=DEFAULT_EMPTY_VALUE;
|
||
}
|
||
}
|
||
else if (fnmatch('menu:gebruikers*',$page_menu)) {
|
||
// Get the user
|
||
$action = db_fetch_user_log_user($log_user['id']);
|
||
|
||
if (!empty($action)) {
|
||
// Check if there is any change of user
|
||
if (!empty($action[0]['change']) && $action[0]['change'] == TRUE) {
|
||
$action=_('Save')." ".strtolower(_('User')).": ".getUser($action[0]['gebruiker']);
|
||
}
|
||
else {
|
||
$action=_('User').": ".getUser($action[0]['gebruiker'])." ".strtolower(_('Selected'));
|
||
}
|
||
}
|
||
else {
|
||
$action=DEFAULT_EMPTY_VALUE;
|
||
}
|
||
}
|
||
else if (fnmatch('menu:project*',$page_menu)) {
|
||
// Get the name of the project/period
|
||
$action = db_fetch_user_log_project($log_user['id']);
|
||
|
||
if (!empty($action)) {
|
||
if (is_null($action[0]['parent'])) {
|
||
$action = (strlen($action[0]['naam'])) ? _('Project').": ".$action[0]['naam'] : "-";
|
||
}
|
||
else {
|
||
// Split the name so there is a project and periode name
|
||
$actionSplit = split('_',$action[0]['naam']);
|
||
$action=_('Project').": ".$action[0]['parent']." "._('Period').": ".$actionSplit[1];
|
||
}
|
||
}
|
||
else {
|
||
$action=DEFAULT_EMPTY_VALUE;
|
||
}
|
||
}
|
||
|
||
// Default value of new session
|
||
$newSession = FALSE;
|
||
|
||
// Check if user is logged in
|
||
if ($page_menu == 'login') {
|
||
// Default values $session
|
||
$session[$session_id]['PROJECT'] = DEFAULT_EMPTY_VALUE;
|
||
$session[$session_id]['INTERFACE'] = 'MTinfo';
|
||
$session[$session_id]['RSID'] = DEFAULT_EMPTY_VALUE;
|
||
$session[$session_id]['SERIAL_NUMBER'] = DEFAULT_EMPTY_VALUE;
|
||
$session[$session_id]['IP'] = DEFAULT_EMPTY_VALUE;
|
||
$session[$session_id]['NEW_WINDOW'] = DEFAULT_EMPTY_VALUE;
|
||
$session[$session_id]['ORIGINAL_SESSION_ID'] = '';
|
||
$session[$session_id]['EXTENDED'] = FALSE;
|
||
|
||
$newWindow=FALSE;
|
||
|
||
// Get formdata
|
||
$formdata = $log_user['formdata'];
|
||
|
||
// Define start of search GPS
|
||
$previous_timestamp = convert_datetime(convert_datetime($timestamp) - 300,1);
|
||
|
||
// Clear old gps info
|
||
$previous_gps = NULL;
|
||
|
||
if (strlen($formdata)) {
|
||
// Unserialize formdata
|
||
$formdata_array = unserialize($formdata);
|
||
|
||
// Check if it is a login or a new session
|
||
if (is_array($formdata_array) && !stristr($formdata, "original_session_id")) {
|
||
// Get ip address
|
||
$session[$session_id]['IP'] = (isset($formdata_array['HTTP_X_FORWARDED_FOR'])) ? $formdata_array['HTTP_X_FORWARDED_FOR'] : $formdata_array['REMOTE_ADDR'];
|
||
|
||
// Check if interface is MTinfo or MTINFO_RS3000
|
||
if ($formdata_array['HTTP_USER_AGENT'] == 'MTINFO_RS3000') {
|
||
// Get the idcode
|
||
$zkl_info = db_fetch_user_log_zkl($log_user['id']);
|
||
$session[$session_id]['RSID'] = (!empty($zkl_info)) ? $zkl_info[0]['idcode'] : DEFAULT_EMPTY_VALUE ;
|
||
|
||
// Get the serial number
|
||
$serial_number = db_fetch_user_log_zkl($log_user['id']);
|
||
$session[$session_id]['SERIAL_NUMBER'] = (!empty($serial_number)) ? $serial_number[0]['serienr'] : DEFAULT_EMPTY_VALUE;
|
||
|
||
// Set interface into session array
|
||
$session[$session_id]['INTERFACE'] = 'RS3000';
|
||
}
|
||
}
|
||
else {
|
||
// Get original session_ip
|
||
$original_session_id_array = split(' ',$formdata);
|
||
|
||
// Copy IP,RS3000,PROJECT,PERIOD to the new session
|
||
$session[$session_id] = $session[$original_session_id_array[1]];
|
||
$session[$session_id]['ORIGINAL_SESSION_ID'] = $original_session_id_array[1];
|
||
$newSession=TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
// to show if page is opened in a new window
|
||
if ($session[$session_id]['ORIGINAL_SESSION_ID']) {
|
||
if ($newWindow == FALSE) {
|
||
switch($page_menu) {
|
||
case "login":
|
||
break;
|
||
|
||
case "menu:realtime_status:extended":
|
||
$session[$session_id]['EXTENDED'] = TRUE;
|
||
$newWindow = FALSE;
|
||
break;
|
||
|
||
default:
|
||
$newWindow = TRUE;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if user is logged in on a project or period for MTinfo and RS3000
|
||
if ($page_menu == 'menu_project' || $page_menu =='menu:lans:periode' || fnmatch('menu:lans:relais_aansturing*',$page_menu) || fnmatch('menu:realtime_status*',$page_menu)) {
|
||
// Get the name of project/period
|
||
$project = db_fetch_user_log_project($log_user['id']);
|
||
|
||
if (!empty($project)) {
|
||
if (is_null($project[0]['parent'])) {
|
||
$session[$session_id]['PROJECT'] = (strlen($project[0]['naam'])) ? _('Project').": ".$project[0]['naam'] : DEFAULT_EMPTY_VALUE;
|
||
}
|
||
else {
|
||
// Split the name so there is a project and periode name
|
||
$projectSplit = split('_',$project[0]['naam']);
|
||
$session[$session_id]['PROJECT']=_('Project').": ".$project[0]['parent']." "._('Period').": ".$projectSplit[1];
|
||
}
|
||
}
|
||
}
|
||
|
||
// Check if user is logged off on a project or period
|
||
if ($page_menu == 'menu' || $page_menu == 'projecten' ) {
|
||
// Default value of PROJECT
|
||
$session[$session_id]['PROJECT'] = DEFAULT_EMPTY_VALUE;
|
||
}
|
||
|
||
// Get GPS if interface is an RS3000
|
||
if ($session[$session_id]['INTERFACE'] == 'RS3000' && !empty($zkl_info)) {
|
||
// Get ID of zkl (lance_id)
|
||
$lance_id = $zkl_info[0]['id'];
|
||
|
||
// Define start of GPS search
|
||
$begin = (!is_null($previous_gps)) ? convert_datetime($previous_gps['t'], TRUE) : $previous_timestamp;
|
||
|
||
// Define start of GPS search if there is no previous GPS for the next loop
|
||
$previous_timestamp = $timestamp;
|
||
|
||
// Get GPS
|
||
$gps = db_fetch_lance_log_gps_info($lance_id, 1, $begin, $timestamp);
|
||
if ((is_array($gps)) && (!is_null($gps[0]['latitude']) && !is_null($gps[0]['longitude']))) {
|
||
$previous_gps = $gps[0];
|
||
}
|
||
}
|
||
else $previous_gps = null;
|
||
|
||
// If there is GPS fill $gps_info with the coordinates else file $gps_info with "-"
|
||
$gps_info = (!is_null($previous_gps)) ? $previous_gps['latitude'] . ";" . $previous_gps['longitude'] : DEFAULT_EMPTY_VALUE;
|
||
|
||
// Check if the session is an extended view menu
|
||
$showExtendedInUserLog = FALSE;
|
||
if ($session[$session_id]['EXTENDED'] == TRUE) {
|
||
// Don't show extended view menu in user log
|
||
if ($page_menu == 'menu:realtime_status:extended') {
|
||
$showExtendedInUserLog = TRUE;
|
||
}
|
||
else {
|
||
// Paste (extended view menu) behind the page name
|
||
$page_menu = ucfirst(getPagename($page_menu))." (".strtolower(_('h:menu:realtime_status:extended')).")";
|
||
}
|
||
}
|
||
|
||
// Don't log the record when the log in is from a new session and don't log extended view menu
|
||
if (!($newSession == TRUE)) {
|
||
if (!($showExtendedInUserLog == TRUE)) {
|
||
// Add one line to the array
|
||
array_push($array_log_user, array($timestamp, getUser($ids), $company['bedrijfsnaam'], $mobile_number,$phone_nr, $session[$session_id]['INTERFACE'], ucfirst(getPagename($page_menu)), $session[$session_id]['IP'], $session[$session_id]['RSID'], $session[$session_id]['SERIAL_NUMBER'], $gps_info,$session[$session_id]['PROJECT'],$action));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Write the array to the csv file
|
||
if (is_array($array_log_user)) {
|
||
for ($i=sizeof($array_log_user)-1; $i >= 0; $i--) {
|
||
// Add line to report
|
||
report_data_field($all_fields,
|
||
array(value => $array_log_user[$i]),
|
||
array("Timestamp", "User", "Company name","Mobile number", "Emergency number", "Interface","Page menu","Ip",_("ID code")." ".ucwords($_SESSION[$_PAGE_INFO['id']]['skin_name']),_("ID code")." "._("owner"),"GPS","Project","Action"));
|
||
}
|
||
}
|
||
}
|
||
|
||
// Generate document
|
||
report_generate();
|
||
}
|
||
|
||
|
||
/**
|
||
* Get Page name
|
||
*/
|
||
function getPagename($pagename){
|
||
|
||
$result = _('h:'.$pagename);
|
||
if ($result == 'h:'.$pagename){
|
||
|
||
$result=_('h2:'.$pagename);
|
||
if($result == 'h2:'.$pagename){
|
||
$result = _($pagename);
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
|
||
/*
|
||
* Determine childs recursive
|
||
*/
|
||
function childs_recursive($parent) {
|
||
GLOBAL $_PAGE_INFO;
|
||
|
||
$childs = db_fetch_customer_childs($parent);
|
||
|
||
if (is_array($childs)) {
|
||
// sort array
|
||
$childs = array_sort($childs, "bedrijfsnaam");
|
||
|
||
foreach($childs as $child) {
|
||
// Store result
|
||
array_push($_PAGE_INFO['childs'], $child);
|
||
|
||
// Find childs
|
||
childs_recursive($child['id']);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Create report overview
|
||
*/
|
||
function report_overview($params) {
|
||
global $_PAGE_INFO;
|
||
|
||
// Initial value
|
||
$index = 0;
|
||
|
||
// Find all equipment
|
||
$equipment = db_fetch_all_lances();
|
||
|
||
// Retreive generic information
|
||
$date = date('Y-m-d');
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = $params['report_type'];
|
||
$_PAGE_INFO['dest'] = $params['dest'];
|
||
$_PAGE_INFO['file'] = _("Report") . "_" . str_replace("-", "",$date) . "." . $_PAGE_INFO['report_type'];
|
||
$_PAGE_INFO['document'] = "";
|
||
|
||
// Create header info (when required)
|
||
report_header();
|
||
|
||
// Get requested items
|
||
if (is_array($equipment)) {
|
||
foreach ($equipment as $item) {
|
||
// Is this equipment which can measure => New calibration
|
||
if ((!isset($params['capability'])) || (db_check_system_device_capabilities($item['device'], $params['capability']))) {
|
||
// Reset value
|
||
$line = array();
|
||
$header = array();
|
||
|
||
// Add index
|
||
array_push($header, "index");
|
||
array_push($line, ++$count);
|
||
|
||
foreach ($item as $key => $value) {
|
||
if ((!isset($params['ReqItems'])) || ((is_array($params['ReqItems'])) && (in_array($key, $params['ReqItems'])))) {
|
||
switch($key) {
|
||
case "onderhoud":
|
||
// Check whether the sw3000_onderhoud has been filled
|
||
$date = strip_time(NextService($value,$item['sw3000_onderhoud']));
|
||
|
||
array_push($header, $key);
|
||
array_push($line, $date);
|
||
break;
|
||
case "device":
|
||
if (!is_null($value)) {
|
||
// Get all types
|
||
$types = db_fetch_system_devices($params['i18n']);
|
||
|
||
if (is_array($types)) {
|
||
foreach($types as $type) {
|
||
if ($type['id'] == $value) {
|
||
array_push($header, "Device");
|
||
array_push($line, $type['naam']);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
array_push($header, "Device");
|
||
array_push($line, "-");
|
||
}
|
||
break;
|
||
case "eigenaar":
|
||
// Get customer info
|
||
$cust_info = db_fetch_customer($value, 1);
|
||
|
||
array_push($header, $key);
|
||
array_push($line, $cust_info['bedrijfsnaam']);
|
||
break;
|
||
case "gebruiker":
|
||
if (!is_null($value)) {
|
||
// Get customer info
|
||
$cust_info = db_fetch_customer($value, 1);
|
||
|
||
array_push($header, $key);
|
||
array_push($line, $cust_info['bedrijfsnaam']);
|
||
}
|
||
else {
|
||
array_push($header, $key);
|
||
array_push($line, "-");
|
||
}
|
||
break;
|
||
case "idcode":
|
||
array_push($header, "Relatie ID code");
|
||
array_push($line, $value);
|
||
break;
|
||
case "serienr":
|
||
array_push($header, "Dual Inventive ID code ");
|
||
array_push($line, $value);
|
||
break;
|
||
default:
|
||
// Do nothing (no checks, conversions etc.)
|
||
array_push($header, $key);
|
||
array_push($line, $value);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Add header
|
||
if ($count == 1) {
|
||
// Write info to report
|
||
Report_Data(array(value => $header));
|
||
}
|
||
|
||
// Write info to report
|
||
Report_Data(array(value => $line));
|
||
}
|
||
}
|
||
}
|
||
// Generate document
|
||
return report_generate();
|
||
}
|
||
|
||
/**
|
||
* Create live report
|
||
*/
|
||
function report_live($params) {
|
||
global $_PAGE_INFO;
|
||
|
||
// Find all equipment
|
||
$equipment = db_search_lances();
|
||
|
||
// Sort by id
|
||
$equipment = array_sort($equipment, "id", SORT_NUMERIC);
|
||
|
||
// Retreive generic information
|
||
$date = date('Y-m-d');
|
||
|
||
// Set file info
|
||
$_PAGE_INFO['report_type'] = $params['report_type'];
|
||
$_PAGE_INFO['dest'] = $params['dest'];
|
||
$_PAGE_INFO['file'] = ucfirst(_("live")) . "_" . strtolower(_("Report")) . "_" . (isset($params['customer']) ? strtoupper($params['customer']['klantnaam']) . "_" : "") . str_replace("-", "",$date) . "." . $_PAGE_INFO['report_type'];
|
||
$_PAGE_INFO['report_separator'] = ';';
|
||
$_PAGE_INFO['document'] = "";
|
||
|
||
// Create header info (when required)
|
||
report_header();
|
||
|
||
// Get requested items
|
||
if (is_array($equipment)) {
|
||
foreach ($equipment as $item) {
|
||
// Is this equipment which can switch and measure?
|
||
if (db_check_system_device_capabilities($item['device'], array("meting", "kortsluiting schakelen"))) {
|
||
// Reset value
|
||
$line = array();
|
||
|
||
// Fetch last log_rt entry
|
||
$log_rt = db_fetch_lance_logrt($item['id']);
|
||
|
||
// Fetch last detection ok from cache
|
||
$det_ok = db_fetch_cache($item['id'], 'det ok');
|
||
|
||
foreach ($params['ReqItems'] as $req_item) {
|
||
// Default value
|
||
$value = "";
|
||
switch($req_item) {
|
||
case "batt1_niveau":
|
||
case "batt2_niveau":
|
||
// Default value
|
||
$value = "0,000";
|
||
|
||
if ((is_array($log_rt)) && (isset($log_rt[0][$req_item]))) {
|
||
$value = str_replace('.', ',', $log_rt[0][$req_item]);
|
||
}
|
||
break;
|
||
case "temp_onboard":
|
||
// Default value
|
||
$value = "0,0";
|
||
|
||
if ((is_array($log_rt)) && (isset($log_rt[0][$req_item]))) {
|
||
$value = str_replace('.', ',', $log_rt[0][$req_item]);
|
||
}
|
||
break;
|
||
case "t":
|
||
// Default value
|
||
$date = "1970-01-01";
|
||
$value = "00:00:00";
|
||
|
||
if ((is_array($log_rt)) && (isset($log_rt[0][$req_item]))) {
|
||
$date = strip_time(convert_datetime($log_rt[0][$req_item], TRUE));
|
||
$value = strip_date(convert_datetime($log_rt[0][$req_item], TRUE), FALSE);
|
||
}
|
||
|
||
// Add date to line
|
||
array_push($line, $date);
|
||
break;
|
||
case "det_ok_quality":
|
||
$value = sprintf("%.2f", CalcShortCircuitQuality($det_ok['b_a_autocal'], $det_ok['b_a'])) . "%";
|
||
break;
|
||
case "det_ok_b_a":
|
||
// Default value
|
||
$value = "0,000";
|
||
|
||
if ((is_array($det_ok)) && (isset($det_ok['b_a']))) {
|
||
$value = str_replace('.', ',', $det_ok['b_a']);
|
||
}
|
||
break;
|
||
case "det_ok_b_a_limit":
|
||
// Default value
|
||
$value = "0,000";
|
||
|
||
if ((is_array($det_ok)) && (isset($det_ok['b_a_autocal']))) {
|
||
$value = str_replace('.', ',', $det_ok['b_a_autocal']);
|
||
}
|
||
break;
|
||
case "det_ok_timestamp":
|
||
// Default value
|
||
$date = "1970-01-01";
|
||
$value = "00:00:00";
|
||
|
||
if ((is_array($det_ok)) && (isset($det_ok['t']))) {
|
||
$date = strip_time(convert_datetime($det_ok['t'], TRUE));
|
||
$value = strip_date(convert_datetime($det_ok['t'], TRUE), FALSE);
|
||
}
|
||
|
||
// Add date to line
|
||
array_push($line, $date);
|
||
break;
|
||
default:
|
||
$value = $item[$req_item];
|
||
// Do nothing (no checks, conversions etc.)
|
||
break;
|
||
}
|
||
|
||
// Add to line
|
||
array_push($line, $value);
|
||
}
|
||
|
||
// Write info to report
|
||
Report_Data(array(value => $line));
|
||
}
|
||
}
|
||
}
|
||
|
||
// Generate document
|
||
return report_generate();
|
||
}
|
||
?>
|