require '../../bin/vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
use PhpOffice\PhpSpreadsheet\Style\Color;
$datum_von                    = $_GET["datum_von"] ?? "2020-01-01";
$datum_bis                    = $_GET["datum_bis"] ?? "2020-12-31";
$leistungen_arrays = Array();
$leistungen_arrays[0] = unserialize($_SESSION["serialized_data_abgerechnet"]);
$leistungen_arrays[1] = unserialize($_SESSION["serialized_data_nicht_abgerechnet"]);
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load("../excel/Leistungsstatistik.xlsx");
foreach($leistungen_arrays as $key=>$array_leistungen) {
    // Überschrift
    $spreadsheet->getSheet($key)
                ->setCellValue('A1', "Leistungsstatistik für den Zeitraum ".date_to_datum($datum_von)." bis ".date_to_datum($datum_bis))
                ->getStyle('A1')->getFont()->setSize(18);
    $spreadsheet->getSheet($key)->getStyle('A1')->getFont()->setName('ArialBlack');
    $zeile = 3;
    // Ausgabe der Leistungen unterteilt 1. nach ARtikeln 2. nach Ertragskonto
    $zeilen_summen_per_konto = Array();
    foreach($array_leistungen as $id=>$artikel) {
        // Externe Umsätze werden ausgelassen, da die Leistungsstatistik sich per Definition nur auf die eigenen Umsätze bezieht
        if($id != 0) {
            $volle_artikelbezeichnung = gesuchter_wert($id, "abrechnung_artikel", "text_rechnung");
            $spreadsheet->getSheet($key)
                        ->setCellValue('A'.$zeile, utf8_encode($artikel["artikelbezeichnung"]." / ".$volle_artikelbezeichnung))
                        ->getStyle('A'.$zeile)->getFont()->setSize(18);
            $zeile = $zeile + 2;
            // An dieser Stelle werden die Leistungen noch nach Ertragskonto sortiert
            $konten = leistungen::nach_ertragskonto_ordnen($artikel["leistungen"]);
            foreach($konten as $id_ertragskonto=>$konto) {
                $kontonummer = gesuchter_wert($id_ertragskonto, "kontenplan", "nr");
                $spreadsheet->getSheet($key)
                        ->setCellValue('A'.$zeile, utf8_encode("Konto ".$kontonummer." - ".$konto["ertragskonto"]))
                        ->getStyle('A'.$zeile)->getFont()->setSize(18);
                $zeile++;
                $spreadsheet->getSheet($key)
                            ->setCellValue('A'.$zeile, "Datum")
                            ->setCellValue('B'.$zeile, "Kunde")
                            ->setCellValue('C'.$zeile, "Menge")
                            ->setCellValue('D'.$zeile, "Preis")
                            ->setCellValue('E'.$zeile, "Summe")
                            ->setCellValue('F'.$zeile, "Kostenstelle")
                            ->setCellValue('G'.$zeile, "Rechnung")
                            ->setCellValue('H'.$zeile, "Konto")
                            ->setCellValue('I'.$zeile, "Artikel")
                            ->getStyle('A'.$zeile.':I'.$zeile)->getFont()->setSize(12);
                // Farbiger Hintergrund für die Zeile mit Überschriften
                $spreadsheet->getSheet($key)->getStyle('A'.$zeile.':I'.$zeile)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('00BFFF');
                $zeile++;
                $erste_zeile_des_blocks_konto = $zeile;
                foreach($konto["leistungen"] as $leistung) {
                    // Anzeige der einzelnen Leistungen nur wenn gewünscht
                    $menge       += $leistung->menge;
                    $gesamtpreis += $leistung->gesamtpreis;
                    if($key == 0) {
                        // Abgerechnete Leistungen
                        $rechnung_nr = gesuchter_wert($leistung->id_rechnung, "abrechnung_rechnungen".$leistung->id_firma, "rechnung_nr");
                    } else {
                        $rechnung_nr = "Proberechnung";
                    }
                    
                    $spreadsheet->getSheet($key)
                            ->setCellValue('A'.$zeile, date_to_datum($leistung->datum_von))
                            ->setCellValue('B'.$zeile, utf8_encode(kundenname($leistung->id_kunde)))
                            ->setCellValue('C'.$zeile, $leistung->menge)
                            ->setCellValue('D'.$zeile, $leistung->einzelpreis)
                            ->setCellValue('E'.$zeile, $leistung->gesamtpreis)
                            ->setCellValue('F'.$zeile, gesuchter_wert($leistung->id_kostenstelle, "Kostenstellen", "kostenstellen_nr")." ".gesuchter_wert($leistung->id_kostenstelle, "Kostenstellen", "kostenstellen_bezeichnung"))
                            ->setCellValue('G'.$zeile, $rechnung_nr)
                            ->setCellValue('H'.$zeile, gesuchter_wert($leistung->id_ertragskonto, "kontenplan", "nr"))
                            ->setCellValue('I'.$zeile, gesuchter_wert($leistung->id_artikel, "abrechnung_artikel", "artikel"))
                            ->getStyle('A'.$zeile.':I'.$zeile)->getFont()->setSize(12);
                    // Schriftgröße
                    $letzte_zeile = $zeile;
                    $zeile++;
                }
                // Summen der Menge und des Ertrags im jeweiligen Ertragskonto
                $spreadsheet->getSheet($key)
                    ->setCellValue('A'.$zeile, 'Summe der Mengen und Umsatz / Ertragskonto:')
                    ->setCellValue('C'.$zeile, '=SUM(C'.$erste_zeile_des_blocks_konto.':C'.$letzte_zeile.')')
                    ->setCellValue('E'.$zeile, '=SUM(E'.$erste_zeile_des_blocks_konto.':E'.$letzte_zeile.')');
                 // Farbiger Hintergrund für die Zeile mit dem Umsatz / Gesamtmenge per Ertragskonto
                $spreadsheet->getSheet($key)->getStyle('A'.$zeile.':I'.$zeile)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('7FFF00');
                // Die Zeilennummer merken wir uns in einem Array, um am Ende die Formel für die Gesamtsumme zu bilden
                $zeilen_summen_per_konto[] = $zeile;
                $zeile++;
            }
        }
    }
    $formel_summe_jahresumsatz = "=";
    foreach($zeilen_summen_per_konto as $nr=>$row) {
        if($nr == 0) {
            $formel_summe_jahresumsatz .= "E".$row;
        } else {
            $formel_summe_jahresumsatz .= "+E".$row;
        }
    }
    $spreadsheet->getSheet($key)
                    ->setCellValue('A'.$zeile, 'Jahresumsatz')
                    ->setCellValue('E'.$zeile, $formel_summe_jahresumsatz);
    // Farbiger Hintergrund für die Zeile mit dem Jahresumsatz
    $spreadsheet->getSheet($key)->getStyle('A'.$zeile.':I'.$zeile)->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB('FFFF00');
}
                
// set the header first, so the result will be treated as an xlsx file
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
// make it an attachment so we can define filename
header('Content-Disposition: attachment;filename="Leistungsstatistik.xlsx"');
// create IOFactory object
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');