<?php

// imports
require_once 'GenericAdmin/GenericAdmin.php';
require_once 'util/Config.php';
require_once 'Lohn/impl/LAImpl.php';

class LohnAdministration extends GenericAdmin {

	function __construct() {
		// load common Configuration
		include 'Lohn/impl/ConfigurationData.php';
		Config::setConfiguration($configurationData);
		
		// Generic Administration configuration data
		include 'Lohn/impl/GenadData.php';
		parent::setDscrData($mocd_tab, $atdc_tab);
	}
	
	function createMonth($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "createMonth($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::createMonth($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
		
	}
	
	function bruttoBerechnen($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "bruttoBerechnen($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::bruttoBerechnen($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
		
	}

	function calculateMonth($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "calculateMonth($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::calculateMonth($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
		
	}

	function abrechnungenErstellen($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "abrechnungenErstellen($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::abrechnungenErstellen($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
	}
		
	function verschicken($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "verschicken($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::verschicken($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
	}
		
	function agAnteileBerechnen($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "agAnteileBerechnen($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
		
			LAImpl::agAnteileBerechnen($month);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
	}
	
	public function getMinijobBeitrage($month) {
		// logging
		$logger = Logger::getInstance();
		$logger->log(__CLASS__, "getMinijobBeitrage($month)");
		
		// call implementation via try/catch
		$ta = null;
		try {

			$ta = Transaction::getInstance($this->cur_app);
			$ta->startTA();
			
			// create output formatter
			$xmlFormatter = new XmlFormatter();
			
			LAImpl::getMinijobBeitrage($month, $xmlFormatter);

			$ta->commitTA();
		} catch (Exception $e) {
			$logger->logException(__CLASS__, $e);
			if ($ta) $ta->rollbackTA();
			throw $e;
		}
		return $xmlFormatter->printIt();
	}
}