DerDu/SPHERE-Framework

View on GitHub
Application/Billing/Inventory/Import/ImportControl.php

Summary

Maintainability
B
5 hrs
Test Coverage
<?php
namespace SPHERE\Application\Billing\Inventory\Import;

use SPHERE\Application\Transfer\Gateway\Converter\AbstractConverter;
use SPHERE\Application\Transfer\Gateway\Converter\FieldPointer;

/**
 * Class ImportControl
 * @package SPHERE\Application\Billing\Inventory\Import
 */
class ImportControl extends AbstractConverter
{

    private $Compare = false;
    private $DifferenceList = array();
    private $ScanResult = array();
    private $ColumnNeeded = array(
        'Zählung',
        'Beitragsverursacher Vorname',
        'Beitragsverursacher Nachname',
//        'Beitragsverursacher Geburtstag',
        'Individueller Preis',
        'Preis-Variante',
        'Beitragsart',
        'Mandatsreferenznummer',
//        'Mandatsref Beschreibung',
        'Mandatsreferenznummer gültig ab',
        'Datum beitragspflichtig von',
//        'Datum beitragspflichtig bis',
        'Beitragszahler Vorname',
        'Beitragszahler Nachname',
//        'Debitorennummer',
        'IBAN',
        'BIC',
//        'Bank Name',
    );

    // Suchen nach
    //        'Ersatz(Religion|Sport)[1-4]?'
    private $ColumnScan = array(
        'Zählung',
        'Beitragsverursacher Vorname',
        'Beitragsverursacher Nachname',
        'Beitragsverursacher Geburtstag',
        'Individueller Preis',
        'Preis-Variante',
        'Beitragsart',
        'Mandatsreferenznummer',
        'Mandatsref Beschreibung',
        'Mandatsreferenznummer gültig ab',
        'Datum beitragspflichtig von',
        'Datum beitragspflichtig bis',
        'Beitragszahler Vorname',
        'Beitragszahler Nachname',
        'Debitorennummer',
        'IBAN',
        'BIC',
        'Bank Name',
    );

    /**
     * @param string $LowerBound
     * @param string $UpperBound
     *
     * @return \Generator
     */
    private function excelColumnRangeGenerator($LowerBound, $UpperBound)
    {
        ++$UpperBound;
        for ($Run = $LowerBound; $Run !== $UpperBound; ++$Run) {
            yield $Run;
        }
    }

    /**
     * LectureshipGateway constructor.
     *
     * @param string $File '.xlsx
     */
    public function __construct($File)
    {
        $this->loadFile($File);

        $this->addSanitizer(array($this, 'sanitizeFullTrim'));

        foreach ($this->excelColumnRangeGenerator('A', 'ZZ') as $Column ) {
            $this->setPointer(new FieldPointer($Column, 'Field'));
        }

        $this->scanFile(2, 1);
    }

    /**
     * @return bool
     */
    public function getCompare()
    {
        return $this->Compare;
    }

    /**
     * @return array
     */
    public function getDifferenceList()
    {
        return $this->DifferenceList;
    }

    /**
     * @return array
     */
    public function getScanResult()
    {
        return $this->ScanResult;
    }

    /**
     * @param array $Row
     *
     * @return void
     */
    public function runConvert($Row)
    {

        $ColumnMatch = array(
            // Muster in Spalte ?? gefunden
            // Match (Spaltenname) => Index (Spalte)
        );

        $this->ColumnScan;
        foreach ($Row as $Column => $Part) {
            foreach ($this->ColumnScan as $Pattern) {
                if (preg_match('!^('.$Pattern.')$!is', $Part['Field'], $Match)) {
                    $ColumnMatch[$Match[0]] = $Column;
                }
            }
        }

        $Preset = array_values($this->ColumnNeeded);
        $Analysis = array_keys($ColumnMatch);
        $this->DifferenceList = array_diff($Preset, $Analysis);

        if (empty($this->DifferenceList)) {
            // Alle notwendigen Spalten gefunden
            $this->Compare = true;
            $this->ScanResult = $ColumnMatch;
        } else {
            // Datei enthält nicht alle notwendigen Spalten
            $this->Compare = false;
            $this->ScanResult = array();
        }
    }
}