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');