You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

126 lines
4.1 KiB

<?php
require_once("CommonFlowNode.php");
class FlowNode extends CommonFlowNode
{
function __construct($param)
{
parent::__construct($param);
}
/**
* 1.首先检查当前节点 assignClass ,如果为专人签核A,则读取下个节点的签核人员,否则根据agentSetting选取上级领导
* @param WorkFlowParser $workFlowParser
* @return array
*/
public function getAssignerList(WorkFlowParser $workFlowParser)
{
#以下为专人
$strAssign = $this->getAssigner();
$assignEmps = array();
$arr_a = explode('|', $strAssign);
foreach ($arr_a as $key => $value) {
if (empty($value)) {
continue;
}
$arr_b = explode(':', $value);
$val = explode('-', $arr_b[0]);
$arr_c = explode(',', $arr_b[1]);
$str_next_user = "";
foreach ($arr_c as $key => $value) {
if (empty($value)) {
continue;
}
if ($value == '00000') {
$str_next_user .= '00000' . '-' . "00000,";
} else {
$str_next_user .= AssignerStringParser::process($value);
}
}
array_push($assignEmps, array(
$val[0], //assign_status
$str_next_user
));
}
return $assignEmps;
}
/**
* 检查是否满足流转下一关条件
* @param $assignClass
* @param $leadCode
* @return bool
*/
function checkTrust($assignClass, $leadCode)
{
$_flag = false;
$flowContext = unserialize($_SESSION['flowContext']);
$assignStatus = $flowContext->getAssignStatus();
#如果签核节点assign_status 在定义的同层签核节点当中则不可签回
if (in_array($assignStatus, AssignStatus::$same_level_status)) {
return $_flag;
}
switch ($assignClass) {
case 'A': //无需审核
$_flag = true;
break;
case 'B': //审核至科长
$_flag = (in_array($leadCode, array('50', '20', '19', '18', '17', '16', '12', '10','15')) ? true : false);
break;
case 'C': //审核至经理
$_flag = in_array($leadCode, array('20', '19', '18', '17', '16', '12', '10','15')) ? true : false;
break;
case 'D': //审核至 协理/厂长/总监
$_flag = in_array($leadCode, array('19', '18', '17', '16', '12', '10','15')) ? true : false;
break;
case 'E': //审核至副总
$_flag = in_array($leadCode, array('12', '10')) ? true : false;
break;
case 'F': //审核至总经理
$_flag = substr($leadCode, 0, 2) == '10' ? true : false;
break;
case 'X':
$method = MethodLoader::getInstanceByMethodString(strip_tags($this->getAssignClassMethod()));
$_assignClass = $method->invokeMethod($this->getFlow(), $this->getFormData());
$_flag = $this->checkTrust($_assignClass, $leadCode);
break;
default:
$_flag = false;
break;
}
return $_flag;
}
/**
* 获取附加的签核人员
* @param string $userId
* @return array
*/
public function getDepartmentalAssignerList($userId)
{
$leader = Employee::leader($userId);
$nextAssignerStr = Employee::get_employee($leader, $format = "employee_no-name");
$nextAssigner = array(0 => array(0 => "F6", 1 => $nextAssignerStr));
$subordinates = Employee::subordinates($userId);
if (count($subordinates) > 0) {
$nextAssignerStr = "";
foreach ($subordinates as $empl) {
$nextAssignerStr .= Employee::get_employee($empl, $format = "employee_no-name") . ',';
}
array_push($nextAssigner, array(0 => 'FH', 1 => $nextAssignerStr));
}
return $nextAssigner;
}
}