Added Linework workflow
This commit is contained in:
307
application/Linework/LineworkController.php
Normal file
307
application/Linework/LineworkController.php
Normal file
@@ -0,0 +1,307 @@
|
||||
<?php
|
||||
|
||||
class LineworkController extends mfBaseController {
|
||||
|
||||
protected function init() {
|
||||
$this->needlogin=true;
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
$this->me = $me;
|
||||
$this->layout()->set("me",$me);
|
||||
|
||||
if(!$me->is(["Admin", "netowner","pipeplanner","pipeworker", "lineplanner", "lineworker"])) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
}
|
||||
|
||||
protected function indexAction() {
|
||||
$this->layout()->setTemplate("Linework/Index");
|
||||
$filter = [];
|
||||
|
||||
$this->layout->set("filter", $this->request->filter);
|
||||
|
||||
if($this->request->filter) {
|
||||
$filter = $this->getPreparedFilter($this->request->filter);
|
||||
}
|
||||
|
||||
$my_networks = [];
|
||||
|
||||
// get allowed networks
|
||||
if($this->me->is("Admin")) {
|
||||
if($filter['network_id']) {
|
||||
$my_networks[] = new Network($filter['network_id']);
|
||||
} else {
|
||||
$my_networks = NetworkModel::getAll();
|
||||
}
|
||||
$this->layout()->set("mynetworks", NetworkModel::getAll());
|
||||
} else {
|
||||
$use_filter_network = false;
|
||||
$my_networks = $this->me->my_networks;
|
||||
|
||||
foreach($my_networks as $mn) {
|
||||
if($mn->id == $filter['network_id']) {
|
||||
$use_filter_network = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if($use_filter_network) {
|
||||
$my_networks = [];
|
||||
$my_networks[] = new Network($filter['network_id']);
|
||||
}
|
||||
|
||||
$this->layout()->set("mynetworks", $this->me->my_networks);
|
||||
|
||||
}
|
||||
unset($filter['network_id']);
|
||||
|
||||
// get Buildings in networks
|
||||
$networks = [];
|
||||
foreach($my_networks as $network) {
|
||||
if(!array_key_exists($network->name, $networks)) {
|
||||
$networks[$network->name] = [];
|
||||
}
|
||||
|
||||
$termination_search = [
|
||||
"network_id" => $network->id,
|
||||
"workflow_finished" => 0
|
||||
];
|
||||
|
||||
if(is_array($filter) && count($filter)) {
|
||||
foreach($filter as $name => $value) {
|
||||
$termination_search[$name] = $value;
|
||||
}
|
||||
//$building_search = array_merge($building_search, $filter);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if($this->me->is("lineworker") && !$this->me->is(["Admin","pipeplanner", "lineplanner","netowner"])) {
|
||||
$this->log->debug("is lineworker");
|
||||
$termination_search["lineworker_id"] = ($this->me->address->parent_id) ? $this->me->address->parent_id : $this->me->address_id;
|
||||
|
||||
if(!count($filter)) {
|
||||
$termination_search["status_id"] = 3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach(TerminationModel::search($termination_search) as $b) {
|
||||
if(!array_key_exists($b->id, $networks[$network->name])) {
|
||||
$networks[$network->name][$b->id] = $b;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$term = reset(reset($networks));
|
||||
$item_colspan = 0;
|
||||
$i = 0;
|
||||
|
||||
//var_dump($term);exit;
|
||||
|
||||
// get fields between delimiters for colspan
|
||||
if(is_array($term->workflowitems) && count($term->workflowitems)) {
|
||||
foreach($term->workflowitems as $wfitem) {
|
||||
if($i == 0 && $wfitem->type == "delimiter") continue;
|
||||
|
||||
if($wfitem->type == "delimiter") {
|
||||
$item_colspan = $i;
|
||||
break;
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
//var_dump($item_colspan);exit;
|
||||
$this->layout()->set("termination_wf_colspan", $item_colspan);
|
||||
$this->layout()->set("networks", $networks);
|
||||
//var_dump(reset(reset($networks))->workflowitems);exit;
|
||||
|
||||
|
||||
}
|
||||
|
||||
private function getPreparedFilter($filter) {
|
||||
$new_filter = [];
|
||||
|
||||
if(is_numeric($filter['networksection_id']) && $filter['networksection_id']) {
|
||||
$section = new Networksection($filter['networksection_id']);
|
||||
if($section->id) {
|
||||
$filter['network_id'] = $section->network_id;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($filter as $name => $value) {
|
||||
/*if($name == 'network_id') {
|
||||
$new_filter['id'] = $value;
|
||||
continue;
|
||||
}*/
|
||||
|
||||
$new_filter[$name] = $value;
|
||||
}
|
||||
|
||||
return $new_filter;
|
||||
}
|
||||
|
||||
protected function saveAction() {
|
||||
$r = $this->request;
|
||||
//var_dump($r->get());exit;
|
||||
$termination_id = $r->id;
|
||||
if(!is_numeric($termination_id) || $termination_id < 1) {
|
||||
$this->layout()->setFlash("Objekt nicht gefunden", "error");
|
||||
$this->redirect("Linework");
|
||||
}
|
||||
|
||||
$termination = new Termination($termination_id);
|
||||
if(!$termination->id) {
|
||||
$this->layout()->setFlash("Objekt nicht gefunden", "error");
|
||||
$this->redirect("Linework");
|
||||
}
|
||||
|
||||
//var_dump($r->get());exit;
|
||||
|
||||
if($this->me->is(["Admin", "netowner","pipeplanner", "lineplanner"])) {
|
||||
if($r->linework_enabled == 1) {
|
||||
$termination->linework_enabled = 1;
|
||||
if($termination->status_id < 3) {
|
||||
$termination->status_id = 3;
|
||||
}
|
||||
} else {
|
||||
$termination->linework_enabled = 0;
|
||||
}
|
||||
$termination->save();
|
||||
}
|
||||
|
||||
if($termination->workflow_comment != $r->workflow_comment) {
|
||||
$termination->workflow_comment = $r->workflow_comment;
|
||||
$termination->workflow_comment_changed = date('U');
|
||||
$termination->workflow_comment_changed_by = $this->me->id;
|
||||
$termination->save();
|
||||
}
|
||||
|
||||
$items = [];
|
||||
|
||||
// get workflow values from request
|
||||
foreach($r->get() as $field_name => $value) {
|
||||
$m = [];
|
||||
if(preg_match('/^wfitem_(.+)$/', $field_name, $m)) {
|
||||
if(!$m[1]) {
|
||||
continue;
|
||||
}
|
||||
$items[$m[1]] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($items);exit;
|
||||
foreach($items as $name => $value) {
|
||||
$item = WorkflowitemModel::getFirst(["name" => $name, "object_type" => "termination"]);
|
||||
if(!$item) {
|
||||
var_dump("no item: $name");exit;
|
||||
}
|
||||
$item->setObjectId($termination_id);
|
||||
$item->value->setValue($value);
|
||||
if($item->value->is_changed) {
|
||||
$item->value->save();
|
||||
}
|
||||
|
||||
$termination->resetProperties();
|
||||
|
||||
// set linework finished flag in building
|
||||
/*
|
||||
if($name == TT_WORKFLOW_ITEM_LINEWORK_DONE) {
|
||||
if($value && $building->workflow_finished == 0) {
|
||||
$building->workflow_finished = 1;
|
||||
$building->save();
|
||||
} elseif(!$value && $building->workflow_finished == 1) {
|
||||
$building->workflow_finished = 0;
|
||||
$building->save();
|
||||
}
|
||||
|
||||
}*/
|
||||
}
|
||||
|
||||
/*
|
||||
* Custom checks
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
if($building->workflowitems['pipework_finished']->value->value_string) {
|
||||
// unset Tiefbau abgeschlossen if missing values
|
||||
if( (!$building->workflowitems['anschlusspunkt_typ']->value->value_string && !$building->workflowitems['ist_anschlusspunkt_typ']->value->value_string)
|
||||
|| (!$building->workflowitems['anschlusspunkt_name']->value->value_string && !$building->workflowitems['ist_anschlusspunkt_name']->value->value_string)
|
||||
|| (!$building->workflowitems['rohrverband_name']->value->value_string && !$building->workflowitems['ist_rohrverband_name']->value->value_string)
|
||||
|| (!$building->workflowitems['rohrtype']->value->value_string && !$building->workflowitems['ist_rohrtype']->value->value_string)
|
||||
|| (!$building->workflowitems['rohrfarbe']->value->value_string && !$building->workflowitems['ist_rohrfarbe']->value->value_string)
|
||||
) {
|
||||
$building->workflowitems['pipework_finished']->value->value_string = "";
|
||||
$building->workflowitems['pipework_finished']->value->save();
|
||||
}
|
||||
}*/
|
||||
|
||||
// set building status if Status field was set
|
||||
/*
|
||||
if(defined("TT_WORKFLOW_ITEM_STATUS_FIELD") && defined("TT_WORKFLOW_ITEM_STATUS_VALUE_PASSED") && defined("TT_WORKFLOW_ITEM_STATUS_VALUE_CONNECTED")) {
|
||||
$status_value = $building->workflowitems[TT_WORKFLOW_ITEM_STATUS_FIELD]->value->value_string;
|
||||
//var_dump($status_value);exit;
|
||||
if($status_value == TT_WORKFLOW_ITEM_STATUS_VALUE_PASSED && $building->status_id != 4) {
|
||||
$building->status_id = 4;
|
||||
$building->save();
|
||||
}
|
||||
if($status_value == TT_WORKFLOW_ITEM_STATUS_VALUE_CONNECTED && $building->status_id != 5) {
|
||||
$building->status_id = 5;
|
||||
$building->save();
|
||||
}
|
||||
}*/
|
||||
|
||||
// file upload
|
||||
//var_dump($_FILES);exit;
|
||||
if(array_key_exists("LineworkFileUpload", $_FILES) && !$_FILES['LineworkFileUpload']['error']) {
|
||||
|
||||
try {
|
||||
$upload = new mfUpload("LineworkFileUpload");
|
||||
$upload->setSavepath(MFUPLOAD_FILE_SAVE_PATH."/documents");
|
||||
$upload->save();
|
||||
|
||||
$file_data = [];
|
||||
$file_data['name'] = ($r->file_name) ? $r->file_name : $upload->getOriginalFilename();
|
||||
$file_data['filename'] = ($r->file_filename) ? $r->file_filename : $upload->getOriginalFilename();
|
||||
$file_data['store_filename'] = $upload->getFilename();
|
||||
$file_data['orig_filename'] = $upload->getOriginalFilename();
|
||||
|
||||
$file = FileModel::create($file_data);
|
||||
$file_id = $file->save();
|
||||
if(!$file_id) {
|
||||
$this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn");
|
||||
unlink($upload->getSavepath()."/".$upload->getFilename());
|
||||
} else {
|
||||
$tf = [];
|
||||
$tf['termination_id'] = $termination_id;
|
||||
$tf['file_id'] = $file_id;
|
||||
$tf['type'] = $r->file_type;
|
||||
$tf['name'] = $file->name;
|
||||
|
||||
$termfile = TerminationFileModel::create($tf);
|
||||
if(!$termfile->save()) {
|
||||
$file->delete();
|
||||
unlink($upload->getSavepath()."/".$upload->getFilename());
|
||||
$this->layout()->setFlash("Dateiupload fehlgeschlagen", "warn");
|
||||
$this->redirect("Linework");
|
||||
}
|
||||
}
|
||||
} catch(Exception $ex) {
|
||||
$this->layout->setFlash("Fehler beim Dateiupload: ".$ex->getMessage(), "warn");
|
||||
$this->redirect("Linework");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
$this->layout->setFlash("Workflow Eintrag erfolgreich gespeichert.", "success");
|
||||
$this->redirect("Linework","Index", http_build_query(["filter" => $this->request->filter]), "object=".$termination_id);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user