$xmlFile .= "</ActivityTypes>\n";
}
+ if (!empty($definition['statuses'])) {
+ $xmlFile .= "<Statuses>\n";
+ foreach ($definition['statuses'] as $value) {
+ $xmlFile .= "<Status>$value</Status>\n";
+ }
+ $xmlFile .= "</Statuses>\n";
+ }
+
if (isset($definition['activitySets'])) {
$xmlFile .= "<ActivitySets>\n";
foreach ($definition['activitySets'] as $k => $val) {
}
}
+ // set statuses
+ if (isset($xml->Statuses)) {
+ $definition['statuses'] = (array) $xml->Statuses->Status;
+ }
+
// set activity sets
if (isset($xml->ActivitySets)) {
$definition['activitySets'] = array();
apiCalls: function($route, crmApi) {
var reqs = {};
reqs.actStatuses = ['OptionValue', 'get', {
- option_group_id: 'activity_status'
+ option_group_id: 'activity_status',
+ sequential: 1,
+ options: {limit: 0}
+ }];
+ reqs.caseStatuses = ['OptionValue', 'get', {
+ option_group_id: 'case_status',
+ sequential: 1,
+ options: {limit: 0}
}];
reqs.actTypes = ['OptionValue', 'get', {
option_group_id: 'activity_type',
crmCaseType.controller('CaseTypeCtrl', function($scope, crmApi, apiCalls) {
var ts = $scope.ts = CRM.ts(null);
- $scope.activityStatuses = _.values(apiCalls.actStatuses.values);
+ $scope.activityStatuses = apiCalls.actStatuses.values;
+ $scope.caseStatuses = _.indexBy(apiCalls.caseStatuses.values, 'name');
$scope.activityTypes = apiCalls.actTypes.values;
$scope.activityTypeNames = _.pluck(apiCalls.actTypes.values, 'name');
$scope.activityTypes = apiCalls.actTypes.values;
$scope.caseType.definition.activityTypes = $scope.caseType.definition.activityTypes || [];
$scope.caseType.definition.activitySets = $scope.caseType.definition.activitySets || [];
$scope.caseType.definition.caseRoles = $scope.caseType.definition.caseRoles || [];
- window.ct = $scope.caseType;
+ $scope.caseType.definition.statuses = $scope.caseType.definition.statuses || [];
+
+ $scope.selectedStatuses = {};
+ _.each(apiCalls.caseStatuses.values, function (status) {
+ $scope.selectedStatuses[status.name] = !$scope.caseType.definition.statuses.length || $scope.caseType.definition.statuses.indexOf(status.name) > -1;
+ });
$scope.addActivitySet = function(workflow) {
var activitySet = {};
return !$scope.caseType.id || $scope.caseType.is_forkable;
};
+ $scope.newStatus = function() {
+ CRM.loadForm(CRM.url('civicrm/admin/options/case_status', {action: 'add', reset: 1}))
+ .on('crmFormSuccess', function(e, data) {
+ $scope.caseStatuses[data.optionValue.name] = data.optionValue;
+ $scope.selectedStatuses[data.optionValue.name] = true;
+ $scope.$digest();
+ });
+ };
+
$scope.isNewActivitySetAllowed = function(workflow) {
switch (workflow) {
case 'timeline':
};
$scope.save = function() {
+ // Add selected statuses
+ var selectedStatuses = [];
+ _.each($scope.selectedStatuses, function(v, k) {
+ if (v) selectedStatuses.push(k);
+ });
+ // Ignore if ALL or NONE selected
+ $scope.caseType.definition.statuses = selectedStatuses.length == _.size($scope.selectedStatuses) ? [] : selectedStatuses;
var result = crmApi('CaseType', 'create', $scope.caseType, true);
result.then(function(data) {
if (data.is_error === 0 || data.is_error == '0') {
<div ng-show="isForkable()" class="crmCaseType-acttab" ui-jq="tabs" ui-options="{show: true, hide: true}">
<ul>
<li><a href="#acttab-actType">{{ts('Activity Types')}}</a></li>
+ <li><a href="#acttab-statuses">{{ts('Statuses')}}</a></li>
<li ng-repeat="activitySet in caseType.definition.activitySets">
<a href="#acttab-{{$index}}">{{ activitySet.label }}</a>
<span class="crm-i fa-trash" title="{{ts('Remove')}}"
</select>
</ul>
- <div id="acttab-actType">
- <div ng-include="'~/crmCaseType/activityTypesTable.html'"></div>
- </div>
+ <div id="acttab-actType" ng-include="'~/crmCaseType/activityTypesTable.html'"></div>
+
+ <div id="acttab-statuses" ng-include="'~/crmCaseType/statusTable.html'"></div>
<div ng-repeat="activitySet in caseType.definition.activitySets" id="acttab-{{$index}}">
<div ng-include="activityTableTemplate(activitySet)"></div>
--- /dev/null
+<!--
+Controller: CaseTypeCtrl
+Required vars: selectedStatuses
+-->
+<table>
+ <thead>
+ <tr>
+ <th></th>
+ <th>{{ts('Name')}}</th>
+ <th>{{ts('Class')}}</th>
+ </tr>
+ </thead>
+
+ <tbody ng-model="selectedStatuses">
+ <tr ng-repeat="(status,sel) in selectedStatuses">
+ <td>
+ <input class="crm-form-checkbox" type="checkbox" ng-model="selectedStatuses[status]"/>
+ </td>
+ <td>
+ {{ caseStatuses[status].label }}
+ </td>
+ <td>
+ {{ caseStatuses[status].grouping }}
+ </td>
+ </tr>
+ </tbody>
+
+ <tfoot>
+ <tr>
+ <td></td>
+ <td><a class="crm-hover-button action-item" ng-click="newStatus()" href><i class="crm-i fa-plus"></i> {{ ts('New Status') }}</a></td>
+ <td></td>
+ </tr>
+ </tfoot>
+</table>