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 @@
+
+