Application/Document/Standard/EnrollmentDocument/EnrollmentDocument.php
<?php
namespace SPHERE\Application\Document\Standard\EnrollmentDocument;
use MOC\V\Core\FileSystem\FileSystem;
use SPHERE\Application\Contact\Address\Address;
use SPHERE\Application\Education\Lesson\Division\Division;
use SPHERE\Application\Education\Lesson\Term\Term;
use SPHERE\Application\IModuleInterface;
use SPHERE\Application\IServiceInterface;
use SPHERE\Application\People\Group\Group;
use SPHERE\Application\People\Meta\Common\Common;
use SPHERE\Application\People\Meta\Student\Student;
use SPHERE\Application\People\Person\Person;
use SPHERE\Application\Setting\Consumer\Consumer;
use SPHERE\Common\Frontend\Form\Repository\Button\Primary;
use SPHERE\Common\Frontend\Form\Repository\Field\DatePicker;
use SPHERE\Common\Frontend\Form\Repository\Field\HiddenField;
use SPHERE\Common\Frontend\Form\Repository\Field\TextField;
use SPHERE\Common\Frontend\Form\Structure\Form;
use SPHERE\Common\Frontend\Form\Structure\FormColumn;
use SPHERE\Common\Frontend\Form\Structure\FormGroup;
use SPHERE\Common\Frontend\Form\Structure\FormRow;
use SPHERE\Common\Frontend\Icon\Repository\ChevronLeft;
use SPHERE\Common\Frontend\Icon\Repository\Download;
use SPHERE\Common\Frontend\IFrontendInterface;
use SPHERE\Common\Frontend\Layout\Repository\Panel;
use SPHERE\Common\Frontend\Layout\Repository\Thumbnail;
use SPHERE\Common\Frontend\Layout\Repository\Title;
use SPHERE\Common\Frontend\Layout\Repository\Well;
use SPHERE\Common\Frontend\Layout\Structure\Layout;
use SPHERE\Common\Frontend\Layout\Structure\LayoutColumn;
use SPHERE\Common\Frontend\Layout\Structure\LayoutGroup;
use SPHERE\Common\Frontend\Layout\Structure\LayoutRow;
use SPHERE\Common\Frontend\Link\Repository\External;
use SPHERE\Common\Frontend\Link\Repository\Standard;
use SPHERE\Common\Frontend\Table\Structure\TableData;
use SPHERE\Common\Main;
use SPHERE\Common\Window\Navigation\Link;
use SPHERE\Common\Window\Stage;
use SPHERE\System\Extension\Extension;
/**
* Class EnrollmentDocument
*
* @package SPHERE\Application\Document\Standard\EnrollmentDocument
*/
class EnrollmentDocument extends Extension implements IModuleInterface
{
public static function registerModule()
{
Main::getDisplay()->addModuleNavigation(
new Link(new Link\Route(__NAMESPACE__), new Link\Name('Schulbescheinigung'))
);
Main::getDispatcher()->registerRoute(Main::getDispatcher()->createRoute(
__NAMESPACE__, __CLASS__.'::frontendAccidentReport'
));
Main::getDispatcher()->registerRoute(Main::getDispatcher()->createRoute(
__NAMESPACE__.'/Fill', __CLASS__.'::frontendFillAccidentReport'
));
}
/**
* @return IServiceInterface
*/
public static function useService()
{
// TODO: Implement useService() method.
}
/**
* @return IFrontendInterface
*/
public static function useFrontend()
{
// TODO: Implement useFrontend() method.
}
/**
* @return Stage
*/
public static function frontendAccidentReport()
{
$Stage = new Stage('Schulbescheinigung', 'Schüler auswählen');
$dataList = array();
if (($tblGroup = Group::useService()->getGroupByMetaTable('STUDENT'))) {
if (($tblPersonList = Group::useService()->getPersonAllByGroup($tblGroup))) {
foreach ($tblPersonList as $tblPerson) {
$tblAddress = $tblPerson->fetchMainAddress();
$dataList[] = array(
'Name' => $tblPerson->getLastFirstName(),
'Address' => $tblAddress ? $tblAddress->getGuiString() : '',
'Division' => Student::useService()->getDisplayCurrentDivisionListByPerson($tblPerson),
'Option' => new Standard('Erstellen', __NAMESPACE__.'/Fill', null,
array('PersonId' => $tblPerson->getId()))
// 'Option' => new External(
// 'Herunterladen',
// 'SPHERE\Application\Api\Document\Standard\EnrollmentDocument\Create',
// new Download(),
// array(
// 'PersonId' => $tblPerson->getId()
// ),
// 'Schulbescheinigung herunterladen')
);
}
}
}
$Stage->setContent(
new Layout(array(
new LayoutGroup(array(
new LayoutRow(array(
new LayoutColumn(array(
new TableData(
$dataList,
null,
array(
'Name' => 'Name',
'Address' => 'Adresse',
'Division' => 'Klasse',
'Option' => ''
),
array(
"columnDefs" => array(
array('type' => Consumer::useService()->getGermanSortBySetting(), 'targets' => 0),
),
)
)
)),
))
)),
))
);
return $Stage;
}
/**
* @param null $PersonId
*
* @return Stage
*/
public function frontendFillAccidentReport($PersonId = null)
{
$Stage = new Stage('Schulbescheinigung', 'Erstellen');
$Stage->addButton(new Standard('Zurück', '/Document/Standard/EnrollmentDocument', new ChevronLeft()));
$tblPerson = Person::useService()->getPersonById($PersonId);
$Global = $this->getGlobal();
$Gender = false;
if ($tblPerson) {
$Global->POST['Data']['PersonId'] = $PersonId;
$Global->POST['Data']['FirstLastName'] = $tblPerson->getFirstName().' '.$tblPerson->getLastName();
$Global->POST['Data']['Date'] = (new \DateTime())->format('d.m.Y');
if (($tblCommon = Common::useService()->getCommonByPerson($tblPerson))) {
if (($tblCommonBirthDates = $tblCommon->getTblCommonBirthDates())) {
$Global->POST['Data']['Birthday'] = $tblCommonBirthDates->getBirthday();
$Global->POST['Data']['Birthplace'] = $tblCommonBirthDates->getBirthplace();
if (($tblCommonGender = $tblCommonBirthDates->getTblCommonGender())) {
$Global->POST['Data']['Gender'] = $Gender = $tblCommonGender->getName();
}
}
}
// Prepare LeaveDate
$Now = new \DateTime('now');
// increase year if date after 31.07.20xx
if ($Now > new \DateTime('31.07.'.$Now->format('Y'))) {
$Now->add(new \DateInterval('P1Y'));
}
$MaxDate = new \DateTime('31.07.'.$Now->format('Y'));
$DateString = $MaxDate->format('d.m.Y');
$Global->POST['Data']['LeaveDate'] = $DateString;
$tblStudent = Student::useService()->getStudentByPerson($tblPerson);
if ($tblStudent) {
// Schuldaten der Schule des Schülers
$tblStudentTransferType = Student::useService()->getStudentTransferTypeByIdentifier('PROCESS');
$tblStudentTransfer = Student::useService()->getStudentTransferByType($tblStudent,
$tblStudentTransferType);
if ($tblStudentTransfer) {
$tblCompanySchool = $tblStudentTransfer->getServiceTblCompany();
if ($tblCompanySchool) {
$Global->POST['Data']['School'] = $tblCompanySchool->getName();
$Global->POST['Data']['SchoolExtended'] = $tblCompanySchool->getExtendedName();
$tblAddressSchool = Address::useService()->getAddressByCompany($tblCompanySchool);
if ($tblAddressSchool) {
$Global->POST['Data']['SchoolAddressStreet'] = $tblAddressSchool->getStreetName().' '.$tblAddressSchool->getStreetNumber();
$tblCitySchool = $tblAddressSchool->getTblCity();
if ($tblCitySchool) {
$Global->POST['Data']['SchoolAddressDistrict'] = $tblCitySchool->getDistrict();
$Global->POST['Data']['SchoolAddressCity'] = $tblCitySchool->getCode().' '.$tblCitySchool->getName();
$Global->POST['Data']['Place'] = $tblCitySchool->getName();
}
}
}
}
$tblStudentTransferType = Student::useService()->getStudentTransferTypeByIdentifier('LEAVE');
$tblStudentTransfer = Student::useService()->getStudentTransferByType($tblStudent,
$tblStudentTransferType);
if ($tblStudentTransfer) {
$transferDate = $tblStudentTransfer->getTransferDate();
if ($transferDate) {
if ($MaxDate > new \DateTime($transferDate)) {
$DateString = $transferDate;
// correct leaveDate if necessary
$Global->POST['Data']['LeaveDate'] = $DateString;
}
}
}
}
// Aktuelle Klasse
$tblYearList = Term::useService()->getYearByNow();
if ($tblYearList) {
foreach ($tblYearList as $tblYear) {
$tblDivision = Division::useService()->getDivisionByPersonAndYear($tblPerson, $tblYear);
if ($tblDivision && $tblDivision->getTblLevel() && $tblDivision->getTblLevel()->getName() != '') {
$Global->POST['Data']['Division'] = $tblDivision->getTblLevel()->getName();
}
}
}
// Hauptadresse Schüler
$tblAddress = Address::useService()->getAddressByPerson($tblPerson);
if ($tblAddress) {
$Global->POST['Data']['AddressStreet'] = $tblAddress->getStreetName().' '.$tblAddress->getStreetNumber();
$tblCity = $tblAddress->getTblCity();
if ($tblCity) {
$Global->POST['Data']['AddressPLZ'] = $tblCity->getCode();
$Global->POST['Data']['AddressCity'] = $tblCity->getName();
$Global->POST['Data']['AddressDistrict'] = $tblCity->getDistrict();
}
}
}
$Global->savePost();
$form = $this->formStudentDocument($Gender);
$HeadPanel = new Panel('Schüler', $tblPerson->getLastFirstName());
$Stage->addButton(new External('Blanko Schulbescheinigung herunterladen',
'SPHERE\Application\Api\Document\Standard\EnrollmentDocument\Create',
new Download(), array('Data' => array('empty')),
'Schulbescheinigung herunterladen'));
$Stage->setContent(
new Layout(
new LayoutGroup(array(
new LayoutRow(
new LayoutColumn(
$HeadPanel
, 7)
),
new LayoutRow(array(
new LayoutColumn(
$form
, 7),
new LayoutColumn(
new Title('Vorlage des Standard-Dokuments "Schulbescheinigung"')
.new Thumbnail(
FileSystem::getFileLoader('/Common/Style/Resource/Document/Schulbescheinigung.PNG')
, ''
)
, 5),
))
))
)
);
return $Stage;
}
/**
* @param $Gender
*
* @return Form
*/
private function formStudentDocument($Gender)
{
// $Data[] = 'BohrEy';
return new Form(
new FormGroup(array(
new FormRow(array(
new FormColumn(
new HiddenField('Data[PersonId]') //ToDO Hidden ersetzen
),
new FormColumn(
new Layout(
new LayoutGroup(
new LayoutRow(array(
new LayoutColumn(
new Title('Einrichtung')
),
new LayoutColumn(new Well(
new Layout(
new LayoutGroup(array(
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[School]', 'Schule',
'Schule')
, 6),
new LayoutColumn(
new TextField('Data[SchoolExtended]', 'Zusatz',
'Zusatz')
, 6)
)),
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[SchoolAddressDistrict]', 'Ortsteil',
'Ortsteil')
, 4),
new LayoutColumn(
new TextField('Data[SchoolAddressStreet]', 'Straße Nr.',
'Straße Hausnummer')
, 4),
new LayoutColumn(
new TextField('Data[SchoolAddressCity]', 'PLZ Ort',
'PLZ Ort')
, 4)
))
))
)
)),
new LayoutColumn(
new Title('Informationen Schüler')
),
new LayoutColumn(new Well(
new Layout(
new LayoutGroup(array(
new LayoutRow(
new LayoutColumn(
new TextField('Data[FirstLastName]', 'Vorname, Name',
'Vorname, Name '.
($Gender == 'Männlich'
? 'des Schülers'
: ($Gender == 'Weiblich'
? 'der Schülerin'
: 'des Schülers/der Schülerin')
))
, 12)
),
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[Birthday]', 'Geboren am',
'Geburtstag')
, 6),
new LayoutColumn(
new TextField('Data[Birthplace]', 'Geboren in',
'Geburtstag')
, 6),
)),
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[AddressDistrict]', 'Ortsteil',
'Ortsteil')
, 3),
new LayoutColumn(
new TextField('Data[AddressStreet]', 'Straße, Hausnummer',
'Straße, Hausnummer')
, 4),
new LayoutColumn(
new TextField('Data[AddressPLZ]', 'Postleitzahl',
'Postleitzahl')
, 2),
new LayoutColumn(
new TextField('Data[AddressCity]', 'Ort',
'Ort')
, 3),
)),
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[Division]', 'Besucht zur Zeit die Klasse',
'Besucht zur Zeit die Klasse')
, 6),
new LayoutColumn(
new TextField('Data[LeaveDate]', 'Voraussichtlich bis',
'Voraussichtlich bis')
, 6)
)),
))
)
)),
new LayoutColumn(
new Title('Dokument')
),
new LayoutColumn(new Well(
new Layout(
new LayoutGroup(
new LayoutRow(array(
new LayoutColumn(
new TextField('Data[Place]', 'Ort', 'Ort')
, 6),
new LayoutColumn(
new DatePicker('Data[Date]', 'Datum', 'Datum')
, 6)
))
)
)
)),
))
)
)
)
)),
))
, new Primary('Download', new Download(), true),
'\Api\Document\Standard\EnrollmentDocument\Create' // ToDo zusätzliche Daten mitgeben
);
}
}