diff --git a/ProcessMaker/Repositories/TokenRepository.php b/ProcessMaker/Repositories/TokenRepository.php index 6d72d7e0b2..77256e3447 100644 --- a/ProcessMaker/Repositories/TokenRepository.php +++ b/ProcessMaker/Repositories/TokenRepository.php @@ -5,6 +5,7 @@ use Carbon\Carbon; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Log; +use Mustache_Engine; use ProcessMaker\Models\ProcessCollaboration; use ProcessMaker\Models\ProcessRequest as Instance; use ProcessMaker\Models\ProcessRequestToken; @@ -145,7 +146,7 @@ public function persistActivityActivated(ActivityInterface $activity, TokenInter } //Default 3 days of due date - $due = $activity->getProperty('dueIn', '72'); + $due = $this->getDueVariable($activity, $token); $token->due_at = $due ? Carbon::now()->addHours($due) : null; $token->initiated_at = null; $token->riskchanges_at = $due ? Carbon::now()->addHours($due * 0.7) : null; @@ -158,6 +159,25 @@ public function persistActivityActivated(ActivityInterface $activity, TokenInter $this->instanceRepository->persistInstanceUpdated($token->getInstance()); } + /** + * Get due Variable + * + * @param Instance $instance + * @param User $user + */ + private function getDueVariable(ActivityInterface $activity, TokenInterface $token) + { + $isDueVariable = $activity->getProperty('isDueInVariable', false); + $dueVariable = $activity->getProperty('dueInVariable'); + if ($isDueVariable && !empty($dueVariable)) { + $instanceData= $token->getInstance()->getDataStore()->getData(); + $mustache = new Mustache_Engine(); + $mustacheDueVariable = $mustache->render($dueVariable, $instanceData); + return is_numeric($mustacheDueVariable) ? $mustacheDueVariable : '72'; + } + return $activity->getProperty('dueIn', '72'); + } + /** * Persists tokens that triggered a Start Event * diff --git a/public/definitions/ProcessMaker.xsd b/public/definitions/ProcessMaker.xsd index 1d193c063c..070daf5ea9 100644 --- a/public/definitions/ProcessMaker.xsd +++ b/public/definitions/ProcessMaker.xsd @@ -16,6 +16,8 @@ + +