ZeusService

Zurück zu Zeus

<?php

namespace Tools\Service;

use 
DateTime;
use 
DavaHome\Utils\StringUtils;

class 
ZeusService
{
    private function 
parse(string $field, array $lines): float
    
{
        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;
    }

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

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

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

        
$zeus = [
            
'AnspAkt' => $this->parse('AnspAkt'$zeusData),
            
'AnspGes' => $this->parse('AnspGes'$zeusData),
            
'GuthAkt' => $this->parse('GuthAkt'$zeusData),
            
'GuthRst' => $this->parse('GuthRst'$zeusData),
            
'VerfAlt' => $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,
        ];
    }
}