ZeusService

Zurück zu Zeus

<?php

namespace Tools\Service;

use 
DateTime;
use 
DavaHome\Utils\StringUtils;

class 
ZeusService
{
    
/**
     * @param string $field
     * @param array  $lines
     *
     * @return float|int
     */
    
private function parse($field, array $lines)
    {
        foreach (
$lines as $line) {
            
$identifier sprintf('Urlaub (%s)'$field);
            
$i strpos($line$identifier);

            if (
$i !== false) {
                return (float)
str_replace(',''.'substr($line$i strlen($identifier)));
            }
        }

        return 
0.0;
    }

    
/**
     * @param string $dateString
     *
     * @return string
     */
    
private function formatLastUpdate($dateString 'now')
    {
        
$dateTime = ($dateString === 'now')
            ? new 
DateTime($dateString)
            : 
DateTime::createFromFormat('d.m.y'$dateString);

        return 
$dateTime
            
->format('D, d.m.Y (\K\W W)');
    }

    
/**
     * @param string $content
     *
     * @return array
     */
    
public function readZeusData(string $content): array
    {
        
$zeusData = [];
        foreach (
explode("\n"$content) as $line) {
            
$zeusData[] = rtrim($line);
        }

        
$zeus = [
            
'AnspAkt' => (float)$this->parse('AnspAkt'$zeusData),
            
'AnspGes' => (float)$this->parse('AnspGes'$zeusData),
            
'GuthAkt' => $this->parse('GuthAkt'$zeusData),
            
'GuthRst' => $this->parse('GuthRst'$zeusData),
            
'VerfAlt' => (float)$this->parse('VerfAlt'$zeusData),
        ];

        
// Determine days
        
$available max($zeus['AnspAkt'], $zeus['AnspGes']);
        
$planned $zeus['GuthAkt'] - $zeus['GuthRst'];
        
$took $available $zeus['GuthAkt'];
        
$used $planned $took;
        
$remaining $available $used;

        
// Determine last update
        
$lastUpdate 'Unknown';
        foreach (
$zeusData as $zeusLine) {
            if (
StringUtils::contains($zeusLine'Ausgabebereich:'true)) {
                
$zeusLine trim($zeusLine);
                
$i strpos($zeusLine'-');
                if (
$i !== false) {
                    
$lastUpdate $this->formatLastUpdate(trim(substr($zeusLine$i 1, -1)));
                }
                break;
            }
        }

        return [
            
'total'       => $zeus['AnspAkt'],
            
'available'   => $available,
            
'took'        => $took,
            
'planned'     => $planned,
            
'used'        => $used,
            
'remaining'   => $remaining,
            
'expireCount' => $zeus['VerfAlt'],
            
'lastUpdate'  => $lastUpdate,
        ];
    }
}