<?php
namespace ProjectBiz\CitiBizBundle\Controller;
use ProjectBiz\CitiBizBundle\Form\Type\KostenberechnungType;
use ProjectBiz\CitiBizBundle\Messages\Controller\OverviewController as BundleMessages;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaComparison;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaComposite;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaConstant;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaMappedColumn;
use ProjectBiz\DatabaseBundle\Database\Criteria\CriteriaUnmappedColumn;
use ProjectBiz\FormBundle\Form\Type\GenericTableType;
use ProjectBiz\PortalBundle\Controller\ControllerInterfaces\UnifiedOptionsConsumerInterface;
use ProjectBiz\PortalBundle\Controller\ControllerTraits\HasOptionsResolverTrait;
use ProjectBiz\PortalBundle\Controller\FormViewController;
use ProjectBiz\PortalBundle\Controller\TableController;
use ProjectBiz\PortalBundle\Exceptions\PortalException;
use ProjectBiz\PortalBundle\Portal\Messages;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
use ProjectBiz\PortalBundle\Exceptions\UnaccessibleObjectException;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\OptionsResolver\OptionsResolver;
use ProjectBiz\PortalBundle\Controller\ControllerTraits\DataInjectionTrait;
use ProjectBiz\DatabaseBundle\Database\GenericRepository;
class MpmController extends TableController implements UnifiedOptionsConsumerInterface
{
private $unifiedOptions;
private $cachedPriceGroups;
use HasOptionsResolverTrait;
use DataInjectionTrait;
const MSG_DELETE = 'Löschen';
const MSG_ARCHIVE = 'Archivieren';
const MSG_CANCEL = 'Abbrechen';
const MSG_DELETE_CANCELLED = 'Löschen des Projekts abgebrochen.';
const MSG_DELETE_SUCCESS = 'Projekt erfolgreich gelöscht.';
const MSG_DELETE_ERROR = 'Fehler beim Löschen des Projekts.';
const MSG_ARCHIVE_CANCELLED = 'Archivieren des Projekts abgebrochen.';
const MSG_ARCHIVE_SUCCESS = 'Projekt erfolgreich archiviert.';
const MSG_ARCHIVE_ERROR = 'Fehler beim Archivieren des Projekts.';
const MSG_PRICEGROUP_ERROR = 'Fehler beim Berechnen der Kostengruppen';
const MSG_PRICEGROUP_SUCCESS = 'Berechnung der Kostengruppen erfolgreich';
const MSG_MPM_MISSING = 'Fehlendes MPM';
const MSG_YELLOWSHEET_SUCCESS = 'Berechnung der gelben Zettel erfolgreich';
const MSG_MPM_PERMISSION_DENIED = 'Der Zugriff auf dieses Objekt wurde verweigert.';
const MSG_PREFIX_EMPTY = 'Bitten wählen Sie ein Präfix für das Projekt.';
const MSG_ERROR_PROJECT_NUMBER = 'Bitte geben Sie eine gültige Projektnummer an.';
private $options = [];
/**
* @param Request $request
* @param $id
*
* @return mixed
*/
public function edit(Request $request, GenericRepository $repo, $id = null, $targetName = 'overview_edit', $targetOptions = [], $breadcrumbKey = 'MPM_Projectname')
{
return parent::edit($request, $this->getMpmRepository(), $id, $targetName, $targetOptions, $breadcrumbKey);
}
protected function getMpmRepository($options = null)
{
return $this->getGenericRepository('MPM', $options);
}
/**
* @param Request $request
* @param $id
* @param $form
*
* @return mixed
*/
public function formEdit(Request $request, $id = null, $form = null)
{
if (null === $form) {
throw new PortalException(BundleMessages::msgMissingForm);
}
$resolvedOptions = $this->getOptionsResolver()->resolve(
$this->filterOptionsForOptionResolver(
$request->attributes->get('_unified_options')
)
);
$key = 'MPM_ID';
/** @var \ProjectBiz\PortalBundle\Service\FormHelper $formHelper */
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$form,
$this->getSecurityContextWrapper()
->getUserRights()
);
$this->setDebugInfo('form', $formDesc['formname'] . " (id: {$formDesc['id']})");
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
// @todo: IMPORTANT check if this does not corrupt access protection
$sourceRepo = $formHelper->getFormSourceRepo($formDesc); // Tab_MPM
$targetRepo = $formHelper->getFormTargetRepo($formDesc); // Tab_MPM
$criteria = new CriteriaComparison("=", new CriteriaMappedColumn($key), new CriteriaConstant($id));
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext(array(), 'MPM_ID');
if (!$this->hasPermission($sourceRepo, $id)) {
throw new \Symfony\Component\Security\Core\Exception\AccessDeniedException(self::MSG_MPM_PERMISSION_DENIED);
}
$data = $sourceRepo->findOneBy($criteria, $formLayout['data_columns']);
if (false == $data) {
$data = $sourceRepo->defaultObject();
$new_entry = true;
} else {
$new_entry = false;
}
if (isset($resolvedOptions['data_injection'])) {
$data = $this->dataInjection($request, $data, $resolvedOptions['data_injection']);
}
$htmlForm = $this->createForm(
GenericTableType::class,
$data,
array('repo' => $sourceRepo, 'columns' => $formLayout['form_columns'])
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes
* were found and thus the object was not saved.
*/
$formData = $htmlForm->getData();
$this->handlePricelistEntries($formData);
$saveAs = ($formData['submitAction'] == 'saveAs');
unset($formData['save_as']);
$userRight = $this->getSecurityContextWrapper()->getUserRights();
if(isset($formData['MPM_LINK_Stadt_Budget_Assignment']) && $formData['MPM_LINK_Stadt_Budget_Assignment']){
$stadtBudgetRepo = $this->getGenericRepository('Stadt_Budget_Assignment', null);
$ngdBudgetID = $stadtBudgetRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('Stadt_Budget_Assignment_ID'),
new CriteriaConstant($formData['MPM_LINK_Stadt_Budget_Assignment'])
)
)['Stadt_Budget_Assignment_LINK_Budget_ID'];
if($ngdBudgetID){
$formData['MPM_Info_04'] = $ngdBudgetID;
}
}
if ($saveAs && !$new_entry) {
try {
$ancestorId = $data['MPM_LINK_Ancestor_ID'];
$targetRepo->getConnection()->beginTransaction();
if ($formData['MPM_LINK_SPM_VersionID'] !== null) {
$formData['MPM_LINK_SPM_VersionID'] = 1;
}
if(isset($formData['MPM_Prefix_02'])){
$newNumber = $this->generateNumber($formData);
$mpmRepo = $this->getMpmRepository();
$mpmExistingAI = $mpmRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('MPM_ProjectNumber'),
new CriteriaConstant($formData['MPM_ProjectNumber'])
)
);
if($mpmExistingAI){
$aIncNumber = $mpmExistingAI['MPM_AutoIncrement'];
}else{
$aIncNumber = $newNumber['MPM_AutoIncrement'];
}
$prefix = $this->getPrefix($formData);
$checkID = $prefix . $formData['MPM_Prefix_02'] .'-'. $aIncNumber . $formData['MPM_Sufix_01'] . ' ' . $formData['MPM_Sufix_02'] ;
$checkID = str_replace(' ', '', $checkID);
$checkNr = $this->checkNumber($checkID);
if($checkNr){
$newNumber = $this->generateNumber($formData, 'add');
$formData['MPM_ProjectNumber'] = $newNumber['number'];
$formData['MPM_AutoIncrement'] = $newNumber['AutoIncrement'];
}else{
$string = str_replace(' ', '', $checkID);
$formData['MPM_ProjectNumber'] = $string;
}
}else{
$number = $sourceRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('MPM_ProjectNumber'),
new CriteriaConstant($formData['MPM_ProjectNumber'])
)
);
$formData['MPM_Prefix_01'] = $number['MPM_Prefix_01'];
$formData['MPM_Prefix_02'] = $number['MPM_Prefix_02'];
$newNumber = $this->generateNumber($formData, 'add');
if($number['MPM_AutoIncrement']!=''){
$formData['MPM_ProjectNumber'] = $number['MPM_Prefix_01'].$number['MPM_Prefix_02'].'-'.$newNumber['AutoIncrement'].$number['MPM_Sufix_01'].$number['MPM_Sufix_02'];
}else{
$this->addFlashAndTrans('warning', Messages::msgMissingAutoIncrement);
}
}
$duplicateMpmId = $targetRepo->duplicate($formData[$targetRepo->getPrimaryKey()], $formData);
$new_id = $duplicateMpmId;
$spmRepo = $this->getSpmRepository();
$spmCriteria = new CriteriaComposite(
'and', array(
new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('SPM_LINK_MPM_Ancestor_ID'),
new CriteriaConstant($ancestorId)
),
new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('SPM_VersionID'),
new CriteriaConstant($data['MPM_LINK_SPM_VersionID'])
),
)
);
$spmData = $spmRepo->fetchAll($spmRepo->findBy($spmCriteria));
foreach ($spmData as $spm) {
$spm['SPM_LINK_MPM_Ancestor_ID'] = $duplicateMpmId;
$spmRepo->duplicate($spm[$spmRepo->getPrimaryKey()], $spm);
}
$id = $duplicateMpmId;
} catch (\Exception $ex) {
$targetRepo->getConnection()->rollBack();
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
return $this->redirect(
$this->generateUrl(
'overview_form',
array(
'id' => $id,
'form' => $form,
)
)
);
}
$targetRepo->getConnection()->commit();
} else if($new_entry) {
if($formData['MPM_Prefix_01']){
$staticSufix = null;
if($formData['MPM_LINK_Stadt_Workflow_ID']){
$swRepo = $this->getGenericRepository('Stadt_Workflow', null);
$swID = $formData['MPM_LINK_Stadt_Workflow_ID'];
$shortcut = $swRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('Stadt_Workflow_ID'),
new CriteriaConstant($swID)
)
)['Stadt_Workflow_Shortcut'];
if($shortcut){
$formData['MPM_Sufix_01'] = $shortcut;
}
}
$newNumber = $this->generateNumber($formData, 'add');
$formData['MPM_ProjectNumber'] = $newNumber['number'];
$formData['MPM_AutoIncrement'] = $newNumber['AutoIncrement'];
$formData['MPM_Prefix_01'] = $newNumber['Prefix_01'];
$stat = $newNumber['Status'];
$new_id = false;
if ($stat){
if($userRight == '512'){
$formData['MPM_Workflow_Status_ID'] = '23';
}
try {
$new_id = $targetRepo->persist($formData);
} catch (UnaccessibleObjectException $ex) {
$this->addFlashAndTrans('danger', $ex->getMessage());
}
} else {
$this->addFlashAndTrans('danger', self::MSG_ERROR_PROJECT_NUMBER);
}
}else{
$this->addFlashAndTrans('danger', self::MSG_PREFIX_EMPTY);
$new_id = false;
}
} else {
$number = $sourceRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('MPM_ProjectNumber'),
new CriteriaConstant($formData['MPM_ProjectNumber'])
)
);
if($number['MPM_AutoIncrement'] != ''){
if(isset($formData['MPM_Sufix_01']) || isset($formData['MPM_Sufix_02']) || isset($formData['MPM_Prefix_02'])){
$newNeumber = $this->generateNumber($formData);
$mpmRepo = $this->getMpmRepository();
$mpmExistingAI = $mpmRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('MPM_ProjectNumber'),
new CriteriaConstant($formData['MPM_ProjectNumber'])
)
);
if($mpmExistingAI){
$aIncNumber = $mpmExistingAI['MPM_AutoIncrement'];
}else{
$aIncNumber = $newNeumber['MPM_AutoIncrement'];
}
$formData['MPM_ProjectNumber'] = $newNeumber['Prefix_01'].$formData['MPM_Prefix_02'].'-'.$aIncNumber.$formData['MPM_Sufix_01'].$formData['MPM_Sufix_02'];
}
}
$new_id = false;
try {
$new_id = $targetRepo->persist($formData);
} catch (UnaccessibleObjectException $ex) {
$this->addFlashAndTrans('danger', $ex->getMessage());
}
}
if ($new_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
if($userRight == '512'){
return $this->redirect($this->generateUrl('overview_mpm_yellowsheet', ['id' => $new_id]));
}
return $this->redirect(
$this->generateUrl(
'overview_form',
array(
'id' => $new_id,
'form' => $form,
)
)
);
} else {
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = array(
array('label' => 'Overview'),
);
if ($new_entry) {
$breadcrumbs[] = array('label' => 'Erstellen');
} else {
$breadcrumbs[] = array('label' => $data['MPM_Projectname']);
$breadcrumbs[] = array('label' => 'Bearbeiten');
}
$hasDuplicationPermission = false;
$securityContextWrapper = $this->getSecurityContextWrapper();
// Only users with the role »Stadt« or admins are permitted to duplicate an MPM.
if ($securityContextWrapper->checkRights(515)) {
$hasDuplicationPermission = true;
}
return $this->render('@ProjectBizCitiBiz/Mpm/formEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$sourceRepo,
$formDesc['formname'],
$formLayout['layout'],
$data
),
'id' => $id,
'overview' => $data,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
'has_duplication_permission' => $hasDuplicationPermission,
]);
}
/**
* Create one ÖB-Number
*
* @param $formData
* @param $flag
* @return array (number, Autoincrement, Status, Prefix_01)
*/
private function generateNumber($formData, $flag=null)
{
$newNumber = '0';
$stat = false;
$prefix = $this->getPrefix($formData);
$exists = false;
$AutoIncRepo = $this->getGenericRepository('AutoIncrement');
$number = $AutoIncRepo->findOneBy(
new CriteriaComposite(
'AND',
array(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('AutoIncrement_Prefix'),
new CriteriaConstant($prefix)
),
new CriteriaComparison(
'=',
new CriteriaMappedColumn('AutoIncrement_Year'),
new CriteriaConstant($formData['MPM_Prefix_02'])
)
)
)
);
$autoIncId = $number['AutoIncrement_ID'];
$number = $number['AutoIncrement_Number'];
if($flag == 'add'){
$autoInc = $AutoIncRepo->find($autoIncId);
$autoInc['AutoIncrement_Number']++;
$AutoIncRepo->persist($autoInc);
$number++;
}
$numberLen = strlen($number);
if($numberLen < 3){
for($a = 0; $a < 3-$numberLen; $a++){
$number = '0'.$number;
}
}
if(isset($formData['MPM_Prefix_02']) ){
$newNumber = $prefix . $formData['MPM_Prefix_02'] .'-'. $number . $formData['MPM_Sufix_01'] . ' ' . $formData['MPM_Sufix_02'] ;
$exists = $this->checkNumber($newNumber);
if(!$exists){
$stat = true;
}
}
$newNumber = str_replace(' ', '', $newNumber);
$number = str_replace(' ', '', $number);
$prefix = str_replace(' ', '', $prefix);
return array(
'number' => $newNumber,
'AutoIncrement' => $number,
'Status' => $stat,
'Prefix_01' => $prefix,
);
}
/**
* Check if ÖB-Number already exists
*
* @param $newNumber (string)
* @return $exists (bool)
*/
private function checkNumber($newNumber){
$mpmRepo = $this->getMpmRepository();
$exists = $mpmRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('MPM_ProjectNumber'),
new CriteriaConstant($newNumber)
)
);
return $exists;
}
/**
* Read prefix from $formData
*
* @param $formData
* @return $prefix (string)
*/
private function getPrefix($formData){
$prefix = 'Ö';
if(isset($formData['MPM_Prefix_01'])){
$prefix = $formData['MPM_Prefix_01'];
}
return $prefix;
}
/**
* Check record based permissions set by columns MPM_Role_Read_Write or MPM_Project_Owner_LINK_User_ID.
*
* @param $sourceRepo
* @param $id
* @return bool
*/
protected function hasPermission($sourceRepo, $id)
{
$builder = $sourceRepo->getConnection()->createQueryBuilder();
$builder
->select('MPM_Role_Read_Write, MPM_Project_Owner_LINK_User_ID')
->from('Tab_MPM')
->where('MPM_ID = '.$builder->createPositionalParameter($id));
$result = $builder->execute()->fetchAll();
/*
* If the record does not exist, permissions are granted what lets the user create a new record.
*/
if (!$result) {
return true;
}
$row = $result[0];
$securityContextWrapper = $this->getSecurityContextWrapper();
if (!$row['MPM_Role_Read_Write'] || $securityContextWrapper->checkRights(
$row['MPM_Role_Read_Write']
)
|| $row['MPM_Project_Owner_LINK_User_ID'] == $securityContextWrapper->getUserId()
) {
return true;
}
return false;
}
/**
* @param $id
*
* @return RedirectResponse|array
* @throws \Exception
*
*/
public function archive(Request $request, $id)
{
$form = $this->createForm(FormType::class);
$form
->add(
'archive',
SubmitType::class,
array(
'label' => self::MSG_ARCHIVE,
)
)
->add(
'cancel',
SubmitType::class,
array(
'label' => self::MSG_CANCEL,
'attr' => ['class' => 'default'],
)
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('archive')
->isClicked()
) {
$mpmRepo = $this->getMpmRepository();
try {
// Archive project
$mpmRepo->archive($id);
$this->addFlashAndTrans('success', self::MSG_ARCHIVE_SUCCESS);
} catch (PortalException $ex) {
$this->addFlashAndTrans('danger', $ex->getMessageKey(), $ex->getMessageData());
} catch (\Exception $ex) {
$this->addFlashAndTrans('danger', self::MSG_ARCHIVE_ERROR);
}
} else {
$this->addFlashAndTrans('warning', self::MSG_ARCHIVE_CANCELLED);
}
return $this->redirect($this->generateUrl('overview'));
}
$repo = $this->getMpmRepository();
$mpm = $repo->find($id);
return $this->render('@ProjectBizCitiBiz/Mpm/archive.html.twig', [
'form' => $form->createView(),
'overview' => $mpm,
]);
}
public function delete(Request $request, $id)
{
$form = $this->createForm(FormType::class);
$form
->add(
'delete',
SubmitType::class,
array(
'label' => self::MSG_DELETE,
)
)
->add(
'cancel',
SubmitType::class,
array(
'label' => self::MSG_CANCEL,
'attr' => ['class' => 'default'],
)
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if ($form->get('delete')
->isClicked()
) {
$mpmRepo = $this->getMpmRepository();
try {
// 1. Delete project
$mpmRepo->delete($id);
// 2. Delete SPM
// Do not delete: not accessible when MPM flagged as deleted
$this->addFlashAndTrans('success', self::MSG_DELETE_SUCCESS);
} catch (PortalException $ex) {
$this->addFlashAndTrans('danger', $ex->getMessageKey(), $ex->getMessageData());
} catch (\Exception $ex) {
$this->addFlashAndTrans('danger', self::MSG_DELETE_ERROR);
}
} else {
$this->addFlashAndTrans('warning', self::MSG_DELETE_CANCELLED);
}
return $this->redirect($this->generateUrl('overview'));
}
$repo = $this->getMpmRepository();
$mpm = $repo->find($id);
return $this->render('@ProjectBizCitiBiz/Mpm/delete.html.twig', [
'form' => $form->createView(),
'overview' => $mpm,
]);
}
protected function getSpmRepository($options = null)
{
if (!isset($options['man_sort_set'])) {
$options['man_sort_set'] = array('SPM_LINK_MPM_Ancestor_ID');
}
return $this->getGenericRepository('SPM', $options);
}
/**
* @param Request $request
* @param $id
* @param null $document_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function documentsEdit(Request $request, $id, $document_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$unifiedOptions = $this->filterOptionsForOptionResolver(
$this->unifiedOptions
);
$resolvedOptions = $this->getOptionsResolver()->resolve($unifiedOptions);
$formname = 'Formular_Documents';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($document_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext(array(), 'MPM_ID');
$documentTableName = 'Document';
$documentRepo = $this->getGenericRepository($documentTableName);
if ($new_entry) {
$documentData = $documentRepo->defaultObject();
} else {
$documentData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$documentData,
array('repo' => $documentRepo, 'columns' => $formLayout['form_columns'])
);
$htmlForm->handleRequest($request);
if ($htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$documentData = $htmlForm->getData();
$mpmRepo = $this->getMpmRepository();
$new_id = null;
$new_document_id = null;
$mpmRepo->getConnection()->beginTransaction();
try {
$new_document_id = $documentRepo->persist($documentData);
$documentIds = array();
if ($mpm['MPM_VIRT_Documents'] != '') {
$documentIds = explode(',', $mpm['MPM_VIRT_Documents']);
if (isset($document_id)) {
$documentIds = array_diff($documentIds, array($document_id));
}
}
$documentIds[] = $new_document_id;
$mpm['MPM_VIRT_Documents'] = implode(',', $documentIds);
$new_id = $mpmRepo->persist($mpm);
} catch (\Exception $ex) {
$mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_document_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'overview_documents_edit',
array('id' => $new_id, 'document_id' => $new_document_id)
)
);
} else {
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = array(
array('label' => 'Overview'),
);
if ($new_entry) {
$breadcrumbs[] = array('label' => $mpm['MPM_Projectname']);
$breadcrumbs[] = array('label' => 'Dokument erstellen');
} else {
$breadcrumbs[] = array('label' => $mpm['MPM_Projectname']);
$breadcrumbs[] = array('label' => 'Dokument bearbeiten');
}
return $this->render('@ProjectBizCitiBiz/Mpm/documentsEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$documentRepo,
$formDesc['formname'],
$formLayout['layout'],
$documentData
),
'id' => $id,
'overview' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
public function documentsDelete(Request $request, $id, $document_id)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$overview = $request->attributes->get('_access_stack')[0];
$overviewRepo = $this->getMPMRepository();
$this->get('database_connection')
->beginTransaction();
try {
$documentIds = array();
if ($overview['MPM_VIRT_Documents'] != '') {
$documentIds = array_diff(explode(',', $overview['MPM_VIRT_Documents']), array($document_id));
}
$overview['MPM_VIRT_Documents'] = implode(',', $documentIds);
$newOverviewId = $overviewRepo->persist($overview);
} catch (\Exception $ex) {
$this->get('database_connection')
->rollBack();
throw($ex);
}
$this->get('database_connection')
->commit();
$this->addFlashAndTrans('success', Messages::msgSuccessDelete);
return $this->redirect(
$this->generateUrl(
'overview_documents',
['id' => $newOverviewId]
)
);
}
/**
* @param $id
* @param $document_id
*
* @return Response
* @throws \Exception
*/
public function documentsAttachmentAction($id, $document_id)
{
// Check overview access
$overviewRepo = $this->getOverviewRepository();
$overview = $overviewRepo->findOneBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn($overviewRepo->getPrimaryKey()),
new CriteriaConstant($id)
),
array('Overview_Projectname')
);
if (!$overview) {
// Missing overview - either it doesn't exist or the user does not have access rights
throw new \Exception(BundleMessages::msgOverviewNoAccess);
}
// Check if document_id is references by overview
$documentTableName = 'Document';
$refsRepo = $this->getGenericRepository('Refs');
$criteriaRefs = new CriteriaComposite(
'AND',
array(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_SourceTable'),
new CriteriaConstant($documentTableName)
),
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Source_LINK_ID'),
new CriteriaConstant($document_id)
),
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_TargetTable'),
new CriteriaConstant('Overview')
),
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($id)
),
)
);
$validRef = $refsRepo->findOneBy($criteriaRefs);
if ($validRef === false) {
// Missing ref - the document does not belong to overview
throw new \Exception(BundleMessages::msgMissingRef);
}
$documentsRepo = $this->getGenericRepository($documentTableName);
$document = $documentsRepo->find($document_id);
if ($document === null) {
throw new \Exception(BundleMessages::msgMissingRef); // @todo: maybe throw other exception
}
if (!isset($document['Document_LINK_File_ID'])) {
throw new \Exception(BundleMessages::msgMissingRef); // @todo: maybe throw other exception
}
$fileRepo = $this->getGenericRepository('File');
$file = $fileRepo->find($document['Document_LINK_File_ID']);
$storage = realpath(
implode(
DIRECTORY_SEPARATOR,
[
$this->get('kernel')
->getProjectDir(),
$this->getParameter('citibiz.upload_dir'),
$file['File_Storage'],
]
)
);
if ($storage === false) {
$this->addFlashAndTrans('warning', BundleMessages::msgMissingFile);
return $this->redirect($this->generateUrl('overview_documents', array('id' => $id)));
}
$response = new Response(file_get_contents($storage));
$d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $file['File_Name']);
$response->headers->set('Content-Disposition', $d);
$response->headers->set('Content-Type', $file['File_Mime_Type']);
return $response;
}
public function attachment(Request $request, $column)
{
$accessStack = $request->attributes->get('_access_stack');
if ((null === $accessStack) || (count($accessStack) == 0)) {
throw new AccessDeniedException();
}
$topOfStack = array_pop($accessStack);
$fileColumn = $column;
$fileRepo = $this->getGenericRepository('File');
$file = $fileRepo->find($topOfStack[$fileColumn]);
$storage = realpath(
implode(
DIRECTORY_SEPARATOR,
[
$this->get('kernel')
->getProjectDir(),
$this->getParameter('citibiz.upload_dir'),
$file['File_Storage'],
]
)
);
if ($storage === false) {
$this->addFlashAndTrans('warning', BundleMessages::msgMissingFile);
return $this->redirect($this->generateUrl('overview'));
}
$response = new Response(file_get_contents($storage));
$d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $file['File_Name']);
$response->headers->set('Content-Disposition', $d);
$response->headers->set('Content-Type', $file['File_Mime_Type']);
return $response;
}
/**
* @param Request $request
* @param $id
* @return RedirectResponse
*
* @Template()
*/
public function mpmCalculateAction(Request $request, $id)
{
/*
* 1. Get all SPM-Data for this MPM
* 2. Calculate the SUM of SPM_Offer_LINK_Pricegroup_Calculation and store them to MPM_Offer_PriceGroup_Calculation
* 3. Store current date in MPM_Offer_PriceGroup_Calculated_Date
* 4. Create pdf file and store it to MPM_Offer_PriceGroup_Calculation_LINK_File_ID
*/
$mpmData = $this->getMpmData($id);
if (!$mpmData) {
return $this->redirectToMpm(array('danger' => self::MSG_MPM_MISSING));
}
$spmData = $this->getSpmData($mpmData['MPM_LINK_Ancestor_ID']);
$spmData = array_filter(
$spmData,
function ($row) {
return in_array($row['SPM_Type'], array('module', 'position', 'special-position', 'module-position'));
}
);
$priceGroupPdf = $this->get('projectbiz.citibiz.pdf.price_group');
$mpmData['MPM_Offer_PriceGroup_Calculation'] = $priceGroupPdf->calculateSum(
$mpmData['MPM_Offer_Addition_711'] + $mpmData['MPM_Offer_Addition_720'] + $mpmData['MPM_Offer_Addition_730'],
$spmData
);
$mpmData['MPM_Offer_PriceGroup_Calculated_Date'] = new \DateTime();
$form = $this->get('form.factory')->createBuilder(
KostenberechnungType::class,
array('umsatzsteuer' => 'netto')
)->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
$fileId = 0;
try {
$this->startTransaction();
$fileId = $priceGroupPdf->build(
$priceGroupPdf->buildFields($mpmData, $formData),
$mpmData,
$spmData
);
$mpmData['MPM_Offer_PriceGroup_Calculation_LINK_File_ID'] = $fileId;
$this->storeMpmData($mpmData);
} catch (\Exception $ex) {
$this->cleanupCalculatePDF($fileId);
$this->rollbackTransaction();
return $this->redirectToMpm(array('danger' => $ex->getMessage()));
}
$this->commitTransaction();
return $this->redirectToMpm(array('success' => self::MSG_PRICEGROUP_SUCCESS));
}
return $this->render('@ProjectBizCitiBiz/Mpm/mpmCalculate.html.twig', [
'mpm' => $mpmData,
'form' => $form->createView(),
]);
}
private function getMpmData($mpmId)
{
$mpmRepo = $this->getMpmRepository();
$mpmCriteria = new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('MPM_ID'),
new CriteriaConstant($mpmId)
);
return $mpmRepo->findOneBy(
$mpmCriteria,
array(
'MPM_ID',
'MPM_LINK_Ancestor_ID',
'MPM_Role_03',
'MPM_Role_04',
'MPM_Role_05',
'MPM_ProjectNumber',
'MPM_Projectname',
'MPM_Text_10',
'MPM_Offer_Addition_711',
'MPM_Offer_Addition_720',
'MPM_Offer_Addition_730',
'MPM_Stadt_Request',
'MPM_Stadt_Project_Category_ID',
'MPM_Stadt_Workflow_ID',
'MPM_Stadt_KAG_Flag',
'MPM_Stadt_Department_Answer_Date',
'MPM_LINK_Stadt_Workflow_ID',
'MPM_Stadt_Amt_Adress',
'MPM_Stadt_Amt_Name',
'MPM_Stadt_Amt_Telefon',
'MPM_Stadt_BV_Adress',
'MPM_Stadt_BV_Name',
'MPM_Stadt_BV_Telefon',
'MPM_Text_01',
'MPM_LINK_Stadt_Project_Category_ID',
'MPM_Info_18',
'MPM_Date_01',
'MPM_Date_02',
'MPM_Stadt_Appointment_Date',
'MPM_Stadt_Appointment_Participants',
'MPM_Stadt_Appointment_Participants_2',
'MPM_Stadt_Appointment_Participants_3',
'MPM_Stadt_Appointment_Location',
'MPM_Stadt_Informationfor_SWD',
'MPM_Stadt_Department_Name',
'MPM_Stadt_Department_Tel',
'MPM_Stadt_Request_Name',
'MPM_Stadt_Request_Tel',
'MPM_LINK_Stadt_Department_ID',
'MPM_LINK_Stadt_Informationfor_ID',
'MPM_Stadt_Informationfor_Date',
'MPM_Stadt_Appointment_Time',
'MPM_Stadt_Date_01',
'MPM_Stadt_Date_02',
'MPM_Stadt_Date_03',
'MPM_Stadt_Account_Info',
'MPM_Stadt_PSP_Cost_Unit',
'MPM_Stadt_Date_06',
'MPM_Stadt_Date_07',
'MPM_LINK_Stadt_Task_ID',
'MPM_Key_26',
'MPM_Info_04',
'MPM_LINK_Stadt_Budget_Assignment',
)
);
}
private function getSpmData($mpmAncestor)
{
$spmRepo = $this->getSpmRepository();
$systemCriteria = new CriteriaComparison(
'=',
new CriteriaUnmappedColumn('SPM_LINK_MPM_Ancestor_ID'),
new CriteriaConstant($mpmAncestor)
);
return $spmRepo->fetchAll(
$spmRepo->findBy(
$systemCriteria,
null,
array(
'SPM_ID',
'SPM_Type',
'SPM_Offer_PriceGroup_Calculation',
'SPM_Offer_PriceGroup_UnitPrice_Rounded',
'SPM_Offer_LINK_PriceGroup_ID',
'SPM_Offer_Position', // Modul-Nr. Stadt
'SPM_Offer_Shorttext', // Kurzbezeichnung
'SPM_Offer_04', // Wert 1
'SPM_Offer_05', // Wert 2
'SPM_Offer_06', // Wert 3
'SPM_Offer_07', // Faktor
'SPM_Offer_08', // Einheit
'SPM_Offer_09', // Menge
'SPM_Offer_10', // VK-Einzelpreis (netto)
'SPM_Offer_12', // VK-Preis netto
'SPM_Offer_13', // VK-Preis brutto
'SPM_Calc_10', // EK-Einzelpreis (netto)
)
)
);
}
private function storeMpmData($mpmData)
{
$this->getMpmRepository()->persist($mpmData);
}
private function cleanupCalculatePDF($fileId)
{
if ($fileId == 0) {
return;
}
}
private function startTransaction()
{
$this->getMpmRepository()->getConnection()->beginTransaction();
}
private function rollbackTransaction()
{
$this->getMpmRepository()->getConnection()->rollBack();
}
private function commitTransaction()
{
$this->getMpmRepository()->getConnection()->commit();
}
private function redirectToMpm($messages)
{
foreach ($messages as $level => $message) {
$this->addFlashAndTrans($level, $message);
}
return $this->redirect($this->generateUrl('overview'));
}
protected function getPriceRepository($options = null)
{
return $this->getGenericRepository('Price01', $options);
}
private function handlePricelistEntries(&$data)
{
$this->copyToKeyIfItDoesNotExist(
'MPM_LINK_Pricelist_Offer_VersionID',
'MPM_LINK_Pricelist_Bill_VersionID',
$data
);
$this->copyToKeyIfItDoesNotExist(
'MPM_LINK_Pricelist_Calc_VersionID',
'MPM_LINK_Pricelist_Meas_VersionID',
$data
);
}
private function copyToKeyIfItDoesNotExist($fromKey, $toKey, &$data)
{
if (
array_key_exists($fromKey, $data) &&
!array_key_exists($toKey, $data)
) {
$data[$toKey] = $data[$fromKey];
}
}
public function getDefaultOptions()
{
return $this->options;
}
protected function setupOptionsResolver(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_injection' => null
));
}
/**
* 1. Get all MPM-Data for this ID
* 2. Store current date in MPM_Date_22
* 3. Create pdf file and store it to MPM_Yellow_Sheet_LINK_File_ID
*/
public function mpmYellowSheet(Request $request, $id)
{
$mpmData = $this -> getMpmData($id);
if (!$mpmData) {
return $this->redirectToMpm(array('danger' => self::MSG_MPM_MISSING));
}
$yellowsheetPdf = $this->get('projectbiz.citibiz.pdf.yellowsheet');
$mpmData['MPM_Date_22'] = new \DateTime();
$mpmData['MPM_Yellow_Sheet_Creater'] = $this->getsecurityContextWrapper()->getUser()->getRealname();
$fileId = 0;
try {
$this->startTransaction();
$fileId = $yellowsheetPdf->build(
$yellowsheetPdf->buildFields($mpmData),
$mpmData
);
$mpmData['MPM_Yellow_Sheet_LINK_File_ID'] = $fileId;
$this->storeMpmData($mpmData);
} catch (\Exception $ex) {
$this->cleanupCalculatePDF($fileId);
$this->rollbackTransaction();
return $this->redirectToMpm(['danger' => $ex->getMessage()]);
}
$this->commitTransaction();
return $this->redirectToMpm(['success' => self::MSG_YELLOWSHEET_SUCCESS]);
}
/**
* @param Request $request
* @param $id
* @param null $spmcad_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauspmcadEdit(Request $request, $id, $spmcad_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$unifiedOptions = $this->filterOptionsForOptionResolver(
$this->unifiedOptions
);
$resolvedOptions = $this->getOptionsResolver()->resolve($unifiedOptions);
$formname = 'Form_SPMCAD';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($spmcad_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'MPM_ID');
$spmcadTableName = 'SPMCAD';
$spmcadRepo = $this->getGenericRepository($spmcadTableName);
if ($new_entry) {
$spmcadData = $spmcadRepo->defaultObject();
} else {
$spmcadData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$spmcadData,
[
'repo' => $spmcadRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$spmcadData = $htmlForm->getData();
$mpmRepo = $this->getMPMRepository();
$new_id = null;
$new_spmcad_id = null;
$mpmRepo->getConnection()->beginTransaction();
try {
$new_spmcad_id = $spmcadRepo->persist($spmcadData);
$spmcadIds = array();
if ($mpm['MPM_VIRT_SPMCAD'] != '') {
$spmcadIds = explode(',', $mpm['MPM_VIRT_SPMCAD']);
if (isset($spmcad_id)) {
$spmcadIds = array_diff($spmcadIds, array($spmcad_id));
}
}
$spmcadIds[] = $new_spmcad_id;
$mpm['MPM_VIRT_SPMCAD'] = implode(',', $spmcadIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($mpm['MPM_ID'])
)
);
$new_id = $mpmRepo->persist($mpm);
}
catch (\Exception $ex) {
// $mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_spmcad_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_mpm_spmcad_edit',
[
'id' => $new_id,
'spmcad_id' => $new_spmcad_id
]
)
);
} else {
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'MPM'],
];
$breadcrumbs[] = ['label' => $mpm['MPM_Projectname']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'CAD-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'CAD-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/spmCADEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$spmcadRepo,
$formDesc['formname'],
$formLayout['layout'],
$spmcadData
),
'id' => $id,
'mpm' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $spm_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauspmEdit(Request $request, $id, $spm_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$formname = 'Form_SPM_Main';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($spm_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'MPM_ID');
$spmTableName = 'SPM';
$spmRepo = $this->getGenericRepository($spmTableName);
if ($new_entry) {
$spmData = $spmRepo->defaultObject();
} else {
$spmData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$spmData,
[
'repo' => $spmRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$spmData = $htmlForm->getData();
$mpmRepo = $this->getMPMRepository();
$new_id = null;
$new_spm_id = null;
$mpmRepo->getConnection()->beginTransaction();
try {
$new_spm_id = $spmRepo->persist($spmData);
$spmIds = [];
if ($mpm['MPM_VIRT_SPMMPM'] != '') {
$spmIds = explode(',', $mpm['MPM_VIRT_SPMMPM']);
if (isset($spm_id)) {
$spmIds = array_diff($spmIds, [$spm_id]);
}
}
$spmIds[] = $new_spm_id;
$mpm['MPM_VIRT_SPMMPM'] = implode(',', $spmIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($mpm['MPM_ID'])
)
);
$new_id = $mpmRepo->persist($mpm);
}
catch (\Exception $ex) {
// $mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_spm_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_mpm_spm_edit',
['id' => $new_id, 'spm_id' => $new_spm_id]
)
);
} else if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'MPM'],
];
$breadcrumbs[] = ['label' => $mpm['MPM_Projectname']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'SPM-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'SPM-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Spm/spmEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$spmRepo,
$formDesc['formname'],
$formLayout['layout'],
$spmData
),
'id' => $id,
'mpm' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $spm_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauspmFormEdit(Request $request, $id, $spm_id = null, $form)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$formname = $form;
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($spm_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'MPM_ID');
$spmTableName = 'SPM';
$spmRepo = $this->getGenericRepository($spmTableName);
if ($new_entry) {
$spmData = $spmRepo->defaultObject();
} else {
$spmData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$spmData,
[
'repo' => $spmRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$spmData = $htmlForm->getData();
$mpmRepo = $this->getMPMRepository();
$mpmRepo->getConnection()->beginTransaction();
try {
$new_spm_id = $spmRepo->persist($spmData);
$spmIds = [];
if ($mpm['MPM_VIRT_SPMMPM'] != '') {
$spmIds = explode(',', $mpm['MPM_VIRT_SPMMPM']);
if (isset($spm_id)) {
$spmIds = array_diff($spmIds, [$spm_id]);
}
}
$spmIds[] = $new_spm_id;
$mpm['MPM_VIRT_SPMMPM'] = implode(',', $spmIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($mpm['MPM_ID'])
)
);
$new_id = $mpmRepo->persist($mpm);
} catch (\Exception $ex) {
// $mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_spm_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_spm_maindocuments_redirect',
['id' => $new_spm_id]
)
);
} else if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'MPM'],
];
$breadcrumbs[] = ['label' => $mpm['MPM_Projectname']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'SPM-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'SPM-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/formEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$spmRepo,
$formDesc['formname'],
$formLayout['layout'],
$spmData
),
'id' => $id,
'mpm' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $skill_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauskillEdit(Request $request, $id, $skill_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$formname = 'Form_Skill';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($skill_id);
$functionworkplace = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'FunctionWorkplace_ID');
$skillTableName = 'Skill';
$skillRepo = $this->getGenericRepository($skillTableName);
if ($new_entry) {
$skillData = $skillRepo->defaultObject();
} else {
$skillData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$skillData,
[
'repo' => $skillRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$skillData = $htmlForm->getData();
$functionworkplaceTableName = 'FunctionWorkplace';
$functionworkplaceRepo = $this->getGenericRepository($functionworkplaceTableName);
$functionworkplaceRepo->getConnection()->beginTransaction();
try {
$new_skill_id = $skillRepo->persist($skillData);
$skillIds = [];
if ($functionworkplace['FunctionWorkplace_VIRT_Skill'] != '') {
$skillIds = explode(',', $functionworkplace['FunctionWorkplace_VIRT_Skill']);
if (isset($skill_id)) {
$skillIds = array_diff($skillIds, [$skill_id]);
}
}
$skillIds[] = $new_skill_id;
$functionworkplace['FunctionWorkplace_VIRT_Skill'] = implode(',', $skillIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($functionworkplace['FunctionWorkplace_ID'])
)
);
$new_id = $functionworkplaceRepo->persist($functionworkplace);
} catch (\Exception $ex) {
// $functionworkplaceRepo->getConnection()->rollBack();
throw($ex);
}
$functionworkplaceRepo->getConnection()->commit();
if ($new_id && $new_skill_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_functionworkplace_skill_edit',
['id' => $new_id, 'skill_id' => $new_skill_id]
)
);
} else if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'FunctionWorkplace'],
];
$breadcrumbs[] = ['label' => $functionworkplace['FunctionWorkplace_Name']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'Skill-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'Skill-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/skillEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$skillRepo,
$formDesc['formname'],
$formLayout['layout'],
$skillData
),
'id' => $id,
'functionworkplace' => $functionworkplace,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $technicalstandards_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bautechnicalstandardsEdit(Request $request, $id, $technicalstandards_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$unifiedOptions = $this->filterOptionsForOptionResolver(
$this->unifiedOptions
);
$resolvedOptions = $this->getOptionsResolver()->resolve($unifiedOptions);
$formname = 'Form_TechnicalStandards';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($technicalstandards_id);
$skill = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'Skill_ID');
$technicalstandardsTableName = 'TechnicalStandards';
$technicalstandardsRepo = $this->getGenericRepository($technicalstandardsTableName);
if ($new_entry) {
$technicalstandardsData = $technicalstandardsRepo->defaultObject();
} else {
$technicalstandardsData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$technicalstandardsData,
[
'repo' => $technicalstandardsRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$technicalstandardsData = $htmlForm->getData();
$skillTableName = 'Skill';
$skillRepo = $this->getGenericRepository($skillTableName);
$new_id = null;
$new_technicalstandards_id = null;
$skillRepo->getConnection()->beginTransaction();
try {
$new_technicalstandards_id = $technicalstandardsRepo->persist($technicalstandardsData);
$technicalstandardsIds = [];
if ($skill['Skill_VIRT_TechnicalStandards'] != '') {
$technicalstandardsIds = explode(',', $skill['Skill_VIRT_TechnicalStandards']);
if (isset($technicalstandards_id)) {
$technicalstandardsIds = array_diff($technicalstandardsIds, array($technicalstandards_id));
}
}
$technicalstandardsIds[] = $new_technicalstandards_id;
$skill['Skill_VIRT_TechnicalStandards'] = implode(',', $technicalstandardsIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($skill['Skill_ID'])
)
);
$new_id = $skillRepo->persist($skill);
} catch (\Exception $ex) {
// $skillRepo->getConnection()->rollBack();
throw($ex);
}
$skillRepo->getConnection()->commit();
if ($new_id && $new_technicalstandards_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_skill_technicalstandards_edit',
array('id' => $new_id, 'technicalstandards_id' => $new_technicalstandards_id)
)
);
} else if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'Skill'],
];
$breadcrumbs[] = ['label' => $skill['Skill_Name']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'TechnicalStandards-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'TechnicalStandards-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/TechnicalStandardsEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$technicalstandardsRepo,
$formDesc['formname'],
$formLayout['layout'],
$technicalstandardsData
),
'id' => $id,
'skill' => $skill,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $operationcenter_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauoperationcenterEdit(Request $request, $id, $operationcenter_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$formname = 'Form_OperationCenter';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($operationcenter_id);
$functionworkplace = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'FunctionWorkplace_ID');
$operationcenterTableName = 'OperationCenter';
$operationcenterRepo = $this->getGenericRepository($operationcenterTableName);
if ($new_entry) {
$operationcenterData = $operationcenterRepo->defaultObject();
} else {
$operationcenterData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$operationcenterData,
[
'repo' => $operationcenterRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$operationcenterData = $htmlForm->getData();
$functionworkplaceTableName = 'FunctionWorkplace';
$functionworkplaceRepo = $this->getGenericRepository($functionworkplaceTableName);
$functionworkplaceRepo->getConnection()->beginTransaction();
try {
$new_operationcenter_id = $operationcenterRepo->persist($operationcenterData);
$operationcenterIds = [];
if ($functionworkplace['FunctionWorkplace_VIRT_OperationCenter'] != '') {
$operationcenterIds = explode(',', $functionworkplace['FunctionWorkplace_VIRT_OperationCenter']);
if (isset($operationcenter_id)) {
$operationcenterIds = array_diff($operationcenterIds, [$operationcenter_id]);
}
}
$operationcenterIds[] = $new_operationcenter_id;
$functionworkplace['FunctionWorkplace_VIRT_OperationCenter'] = implode(',', $operationcenterIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($functionworkplace['FunctionWorkplace_ID'])
)
);
$new_id = $functionworkplaceRepo->persist($functionworkplace);
} catch (\Exception $ex) {
// $functionworkplaceRepo->getConnection()->rollBack();
throw($ex);
}
$functionworkplaceRepo->getConnection()->commit();
if ($new_id && $new_operationcenter_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_functionworkplace_operationcenter_edit',
[
'id' => $new_id,
'operationcenter_id' => $new_operationcenter_id
]
)
);
} else if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'FunctionWorkplace'],
];
$breadcrumbs[] = ['label' => $functionworkplace['FunctionWorkplace_Name']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'Betriebswarte-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'OperationCenter-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/OperationCenterEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$operationcenterRepo,
$formDesc['formname'],
$formLayout['layout'],
$operationcenterData
),
'id' => $id,
'functionworkplace' => $functionworkplace,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @Template("ProjectBizCitiBizBundle:Mpm:SPMRfPEdit.html.twig")
*
* @param Request $request
* @param $id
* @param null $spmrfp_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauspmrfpEditAction(Request $request, $id, $spmrfp_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$unifiedOptions = $this->filterOptionsForOptionResolver(
$this->unifiedOptions
);
$resolvedOptions = $this->getOptionsResolver()->resolve($unifiedOptions);
$formname = 'Form_SPMRfP';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($spmrfp_id);
$functionworkplace = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext(array(), 'FunctionWorkplace_ID');
$spmrfpTableName = 'SPMRfP';
$spmrfpRepo = $this->getGenericRepository($spmrfpTableName);
if ($new_entry) {
$spmrfpData = $spmrfpRepo->defaultObject();
} else {
$spmrfpData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$spmrfpData,
array('repo' => $spmrfpRepo, 'columns' => $formLayout['form_columns'])
);
$htmlForm->handleRequest($request);
if ($htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$spmrfpData = $htmlForm->getData();
$functionworkplaceTableName = 'FunctionWorkplace';
$functionworkplaceRepo = $this->getGenericRepository($functionworkplaceTableName);
$new_id = null;
$new_spmrfp_id = null;
$functionworkplaceRepo->getConnection()->beginTransaction();
try {
$new_spmrfp_id = $spmrfpRepo->persist($spmrfpData);
$spmrfpIds = array();
if ($functionworkplace['FunctionWorkplace_VIRT_SPMRfP'] != '') {
$spmrfpIds = explode(',', $functionworkplace['FunctionWorkplace_VIRT_SPMRfP']);
if (isset($spmrfp_id)) {
$spmrfpIds = array_diff($spmrfpIds, array($spmrfp_id));
}
}
$spmrfpIds[] = $new_spmrfp_id;
$functionworkplace['FunctionWorkplace_VIRT_SPMRfP'] = implode(',', $spmrfpIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($functionworkplace['FunctionWorkplace_ID'])
)
);
$new_id = $functionworkplaceRepo->persist($functionworkplace);
}
catch (\Exception $ex) {
// $functionworkplaceRepo->getConnection()->rollBack();
throw($ex);
}
$functionworkplaceRepo->getConnection()->commit();
if ($new_id && $new_spmrfp_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_functionworkplace_spmrfp_edit',
array('id' => $new_id, 'spmrfp_id' => $new_spmrfp_id)
)
);
} else {
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = array(
array('label' => 'FunctionWorkplace'),
);
if ($new_entry) {
$breadcrumbs[] = array('label' => $functionworkplace['FunctionWorkplace_Name']);
$breadcrumbs[] = array('label' => 'Betriebswarte-Eintrag erstellen');
} else {
$breadcrumbs[] = array('label' =>$functionworkplace['FunctionWorkplace_Name']);
$breadcrumbs[] = array('label' => 'SPMRfP-Eintrag bearbeiten');
}
return array(
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$spmrfpRepo,
$formDesc['formname'],
$formLayout['layout'],
$spmrfpData
),
'id' => $id,
'functionworkplace' => $functionworkplace,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
);
}
/**
* @param Request $request
* @param $id
* @param null $document_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function mailsEdit(Request $request, $id, $document_id = null)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$unifiedOptions = $this->filterOptionsForOptionResolver(
$this->unifiedOptions
);
$resolvedOptions = $this->getOptionsResolver()->resolve($unifiedOptions);
$formname = 'Form_Documents_Email';
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($document_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext(array(), 'MPM_ID');
$documentTableName = 'Document';
$documentRepo = $this->getGenericRepository($documentTableName);
if ($new_entry) {
$documentData = $documentRepo->defaultObject();
} else {
$documentData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$documentData,
array('repo' => $documentRepo, 'columns' => $formLayout['form_columns'])
);
$htmlForm->handleRequest($request);
if ($htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$documentData = $htmlForm->getData();
$mpmRepo = $this->getMpmRepository();
$new_id = null;
$new_document_id = null;
$mpmRepo->getConnection()->beginTransaction();
try {
$new_document_id = $documentRepo->persist($documentData);
$documentIds = array();
if ($mpm['MPM_VIRT_Documents'] != '') {
$documentIds = explode(',', $mpm['MPM_VIRT_Documents']);
if (isset($document_id)) {
$documentIds = array_diff($documentIds, array($document_id));
}
}
$documentIds[] = $new_document_id;
$mpm['MPM_VIRT_Documents'] = implode(',', $documentIds);
$new_id = $mpmRepo->persist($mpm);
} catch (\Exception $ex) {
$mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_document_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'overview_documents_edit',
array('id' => $new_id, 'document_id' => $new_document_id)
)
);
}
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = array(
array('label' => 'Overview'),
);
if ($new_entry) {
$breadcrumbs[] = array('label' => $mpm['MPM_Projectname']);
$breadcrumbs[] = array('label' => 'Dokument erstellen');
} else {
$breadcrumbs[] = array('label' => $mpm['MPM_Projectname']);
$breadcrumbs[] = array('label' => 'Dokument bearbeiten');
}
return $this->render('@ProjectBizCitiBiz/Mpm/mailsEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$documentRepo,
$formDesc['formname'],
$formLayout['layout'],
$documentData
),
'id' => $id,
'overview' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
/**
* @param Request $request
* @param $id
* @param null $spmcost_id
*
* @return RedirectResponse|array
* @throws \Exception
*/
public function bauspmcostEdit(Request $request, $id, $spmcost_id = null, $form)
{
$this->unifiedOptions = $request->attributes->get('_unified_options');
$formname = $form;
$formHelper = $this->get('citibiz.form_helper');
$formDesc = $formHelper->getFormDesc(
$formname,
$this->getSecurityContextWrapper()
->getUserRights()
);
$formLayout = $formHelper->getFormLayout($formDesc); // returns [layout, columns]
//$sourceRepo = $formHelper->getFormSourceRepo($formDesc);
//$targetRepo = $formHelper->getFormTargetRepo($formDesc);
// New or Existing
$new_entry = !isset($spmcost_id);
$mpm = $request->attributes->get('_access_stack')[0];
$tableMenuContext = $this
->get('projectbiz.menu.menu_helper')
->beginMenuContext([], 'MPM_ID');
$spmTableName = 'SPMCost';
$spmRepo = $this->getGenericRepository($spmTableName);
if ($new_entry) {
$spmData = $spmRepo->defaultObject();
} else {
$spmData = $request->attributes->get('_access_stack')[1];
}
$htmlForm = $this->createForm(
GenericTableType::class,
$spmData,
[
'repo' => $spmRepo,
'columns' => $formLayout['form_columns']
]
);
$htmlForm->handleRequest($request);
if ($htmlForm->isSubmitted() && $htmlForm->isValid()) {
/* @todo: maybe add some exception-handling too; know, when no changes were found and
* thus the object was not saved.
*/
$spmData = $htmlForm->getData();
$mpmRepo = $this->getMPMRepository();
$mpmRepo->getConnection()->beginTransaction();
try {
$new_spmcost_id = $spmRepo->persist($spmData);
$spmIds = [];
if ($mpm['MPM_VIRT_SPMCOST'] !== '') {
$spmIds = explode(',', $mpm['MPM_VIRT_SPMCOST']);
if (isset($spmcost_id)) {
$spmIds = array_diff($spmIds, [$spmcost_id]);
}
}
$spmIds[] = $new_spmcost_id;
$mpm['MPM_VIRT_SPMCOST'] = implode(',', $spmIds);
$refsRepo = $this->getGenericRepository('Refs');
$refsData = $refsRepo->findBy(
new CriteriaComparison(
'=',
new CriteriaMappedColumn('Refs_Target_LINK_ID'),
new CriteriaConstant($mpm['MPM_ID'])
)
);
$new_id = $mpmRepo->persist($mpm);
} catch (\Exception $ex) {
// $mpmRepo->getConnection()->rollBack();
throw($ex);
}
$mpmRepo->getConnection()->commit();
if ($new_id && $new_spmcost_id) {
if ($new_entry) {
$this->addFlashAndTrans('success', Messages::msgSuccessCreate);
} else {
$this->addFlashAndTrans('success', Messages::msgSuccessSave);
}
return $this->redirect(
$this->generateUrl(
'bau_mpm_spmcost_edit',
[
'id' => $new_id,
'spmcost_id' => $new_spmcost_id
]
)
);
}
if ($new_entry) {
$this->addFlashAndTrans('danger', Messages::msgErrorCreate);
} else {
$this->addFlashAndTrans('danger', Messages::msgErrorSave);
}
} elseif ($htmlForm->isSubmitted()) {
$this->addFlashAndTrans('danger', Messages::msgFormValidationFailed);
}
$breadcrumbs = [
['label' => 'MPM'],
];
$breadcrumbs[] = ['label' => $mpm['MPM_Projectname']];
if ($new_entry) {
$breadcrumbs[] = ['label' => 'Kosten-Eintrag erstellen'];
} else {
$breadcrumbs[] = ['label' => 'Kosten-Eintrag bearbeiten'];
}
return $this->render('@ProjectBizCitiBiz/Mpm/spmcostEdit.html.twig', [
'formname' => $formDesc['formname'],
'form_view' => new FormViewController(
$spmRepo,
$formDesc['formname'],
$formLayout['layout'],
$spmData
),
'id' => $id,
'mpm' => $mpm,
'table_menu' => $tableMenuContext,
'form' => $htmlForm->createView(),
'is_new' => $new_entry,
'breadcrumbs' => $breadcrumbs,
]);
}
}