filterByAktiv(true)->find(); foreach ($ma_lst as $ma) { // check, if the mitarbeiter is already present $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->filterByMaId($ma->getId())->find(); if (count($lhn_abr_lst) == 0) { $lhn_abr = null; // check profil $lp = $ma->getLohnprofil(); switch ($lp->getLaTyp()->getValue()) { case LATyp::LAT_GERING: $lhn_abr = new LaGeringfugig(); break; case LATyp::LAT_KURZFR: $lhn_abr = new LaKurzfrist(); break; case LATyp::LAT_NORMAL: $lhn_abr = new LaNormal(); break; case LATyp::LAT_SOZ_BEFR: $lhn_abr = new LaSozialbefreit(); break; default: throw new Exception("Lohnprofil unbekannt: ".$lp->getName()); } $lhn_abr->setMitarbeiter($ma); $lhn_abr->setMonat($month); $lhn_abr->setLohnprofil($lp); $lhn_abr->save(); } } } public static function bruttoBerechnen ($month) { // check parameter if (strlen($month) != 6) throw new Exception ("Invalid month format. yyyymm expected."); // lese Abrechnungsliste $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->find(); foreach ($lhn_abr_lst as $lhn_abr) { if ($lhn_abr->getLohnprofil()->getPeriode()->getValue() == Periode::PE_HOUR) { $lhn_abr->setBrutto( $lhn_abr->getMitarbeiter()->getBasisBetrag() * $lhn_abr->getArbeitsstunden() + $lhn_abr->getZulage() ); } else { $lhn_abr->setBrutto( $lhn_abr->getMitarbeiter()->getBasisBetrag() + $lhn_abr->getZulage() ); } $lhn_abr->save(); } } public static function calculateMonth ($month) { // check parameter if (strlen($month) != 6) throw new Exception ("Invalid month format. yyyymm expected."); // lese Abrechnungsliste $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->find(); foreach ($lhn_abr_lst as $lhn_abr) { // lese Lohnprofil $lhn_prf = $lhn_abr->getLohnProfil(); // setze Brutto für Netto :-)) $lhn_abr->setNetto($lhn_abr->getBrutto()); $class = get_class($lhn_abr); switch ($class) { case "LaNormal": self::berechneSteuern($lhn_abr, $lhn_prf); self::berechneSozial($lhn_abr, $lhn_prf); break; case "LaSozialbefreit": case "LaKurzfrist": self::berechneSteuern($lhn_abr, $lhn_prf); break; case "LaGeringfugig": self::berechneGeringfugig($lhn_abr, $lhn_prf); break; default: throw new Exception("unknown class: $class"); } $lhn_abr->save(); } } public static function abrechnungenErstellen ($month) { // check parameter if (strlen($month) != 6) throw new Exception ("Invalid month format. yyyymm expected."); // Hole Konfigurationsdaten $config = Config::getInstance(); $tmp = $config->getConfig("TmpVerzeichnis", "/tmp"); // lese Abrechnungsliste $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->find(); foreach ($lhn_abr_lst as $lhn_abr) { // lese Motarbeiter und Profil $ma = $lhn_abr->getMitarbeiter(); $lhn_prf = $lhn_abr->getLohnProfil(); // TODO $isLohn berechnen $isLohn = false; $name = $ma->getName(); if ($isLohn) { $txt_path = "$tmp/Lohn_$name.txt"; $pdf_path = "$tmp/Lohn_$name.pdf"; } else { $txt_path = "$tmp/Gehalt_$name.txt"; $pdf_path = "$tmp/Gehalt_$name.pdf"; } Lohnzettel::printLohnzettel($ma, $lhn_abr, $txt_path); // PDF-Konvertierung $path = preg_replace("/mLohn.*/", "mLohn", __FILE__); exec("$path/Lohn/etc/mPrint -pdf $txt_path", $out, $ret); if ($ret > 0) throw new Exception("PDF conversion failed: ".$path. implode("\n", $out)); // PDF-Overlay erzeugen $letter = $config->getConfig("LohnAdministration::Briefpapier"); if ($letter) { // prüfe, ob Briefpapier vorhanden if (!file_exists($letter)) throw new Exception("Letter $letter not existing"); // prüfe, ob pdftk überhaupt installiert exec("which pdftk", $out, $ret); if ($ret > 0) throw new Exception("PDF overlay failed. pdftk not installed."); exec("pdftk $pdf_path background $letter output $tmp/tmp.pdf", $out, $ret); if ($ret > 0) throw new Exception("PDF overlay failed:\n". implode("\n", $out)); exec("mv $tmp/tmp.pdf $pdf_path", $out, $ret); if ($ret > 0) throw new Exception("PDF rename failed: ". implode("\n", $out)); } } } public static function verschicken ($month) { // check parameter if (strlen($month) != 6) throw new Exception ("Invalid month format. yyyymm expected."); // Hole Konfigurationsdaten $config = Config::getInstance(); $tmp = $config->getConfig("TmpVerzeichnis", "/tmp"); // lese Abrechnungsliste $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->find(); foreach ($lhn_abr_lst as $lhn_abr) { // lese Motarbeiter und Profil $ma = $lhn_abr->getMitarbeiter(); $lhn_prf = $lhn_abr->getLohnProfil(); // TODO $isLohn berechnen $isLohn = false; $name = $ma->getName(); if ($isLohn) $txt_path = "$tmp/Lohn_$name.txt"; else $txt_path = "$tmp/Gehalt_$name.txt"; // TODO Verschickung } } public static function agAnteileBerechnen ($month) { // check parameter if (strlen($month) != 6) throw new Exception ("Invalid month format. yyyymm expected."); // prüfe, ob Datensatz schon existiert $ag_btr = ArbeitgeberbtrQuery::create()->filterByPeriode($month)->findOne(); if ($ag_btr !== null) //reset content $ag_btr->reset(); else { // create new $ag_btr = new Arbeitgeberbtr(); $ag_btr->setPeriode($month); } // lese Abrechnungsliste $lhn_abr_lst = LohnabrechnungQuery::create()->filterByMonat($month)->find(); foreach ($lhn_abr_lst as $lhn_abr) { // lese Profil $lhn_prf = $lhn_abr->getLohnProfil(); if ($lhn_prf->getRentenversicherungAg() > 0) $ag_btr->setRentenversicherung($ag_btr->getRentenversicherung() + $lhn_prf->getRentenversicherungAg() * $lhn_abr->getBrutto() / 100); if ($lhn_prf->getKrankenversicherungAg() > 0) $ag_btr->setKrankenversicherung($ag_btr->getKrankenversicherung() + $lhn_prf->getKrankenversicherungAg() * $lhn_abr->getBrutto() / 100); if ($lhn_prf->getU1() > 0) $ag_btr->setU1($ag_btr->getU1() + $lhn_prf->getU1() * $lhn_abr->getBrutto() / 100); if ($lhn_prf->getU2() > 0) $ag_btr->setU2($ag_btr->getU2() + $lhn_prf->getU2() * $lhn_abr->getBrutto() / 100); if ($lhn_prf->getRentenversicherungAg() > 0) $ag_btr->setInso($ag_btr->getInso() + $lhn_prf->getInso() * $lhn_abr->getBrutto() / 100); if ($lhn_prf->getPauschalsteuer() > 0) $ag_btr->setPauschalsteuer($ag_btr->getPauschalsteuer() + $lhn_prf->getPauschalsteuer() * $lhn_abr->getBrutto() / 100); } $ag_btr->save(); } private static function berechneSteuern(Lohnabrechnung $lhn_abr, Lohnprofil $lhn_prf) { if (!$lhn_prf->getKirchensteuerEv()) $lhn_abr->setKirchensteuerEv(0); if (!$lhn_prf->getKirchensteuerRk()) $lhn_abr->setKirchensteuerRk(0); $netto = $lhn_abr->getNetto() - $lhn_abr->getLohnsteuer() - $lhn_abr->getKirchensteuerEv() - $lhn_abr->getKirchensteuerRk() - $lhn_abr->getSoli(); $lhn_abr->setNetto($netto); } private static function berechneSozial(Lohnabrechnung $lhn_abr, Lohnprofil $lhn_prf) { $brutto = $lhn_abr->getBrutto(); $lhn_abr->setRentenversicherung($brutto * $lhn_prf->getRentenversicherungAn()); $lhn_abr->setKrankenversicherung($brutto * $lhn_prf->getKrankenversicherungAn()); $netto = $lhn_abr->getNetto() - $lhn_abr->getRentenversicherung() - $lhn_abr->getKrankenversicherung(); $lhn_abr->setNetto($netto); } private static function berechneGeringfugig(Lohnabrechnung $lhn_abr, Lohnprofil $lhn_prf) { $brutto = $lhn_abr->getBrutto(); $lhn_abr->setRentenversicherung($brutto * ($lhn_prf->getRentenversicherungAn()) / 100); $netto = $lhn_abr->getNetto() - $lhn_abr->getRentenversicherung(); $lhn_abr->setNetto($netto); } }