When Approvals, assignments or meeting invitations are True then CC notification should also be true

Mishu
Tera Expert

When Approvals, assignments, or meeting invitations are True, then CC notification should also be true in the Delegate Form. Could someone please help me, since I don't have much hands-on Service Portal ?  How can I achieve this?

 

Mishu_0-1736239832048.png

 

 

 

Below is the HTML code :

<div class="panel-body">
  <table>
    <tr>
      <td class="form-field-td">
        <table>
          <tr>
            <td>
              <div class="row form-group">
                <label class="field-label" title="">
                  <span class="field-decorations">
                    <span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.user_filled()}" style="padding-right: .25em"></span></span>
                  <span style="padding-right: .25em" class="ng-binding" title="">User</span>
                </label>
                <sn-record-picker id="user" mandatory="true" ng-change="c.onUser()" field="user" table="'sys_user'" default-query="'active=true'" sn-disabled="c.data.user_readonly" display-field="'name'" value-field="'sys_id'" search-fields="'name'" page-size="100" autofocus></sn-record-picker>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
                <label class="field-label" title="">
                  <span class="field-decorations">
                    <span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.delegate_filled()}" style="padding-right: .25em"></span></span>
                  <span style="padding-right: .25em" class="ng-binding" title="">Delegate</span>
                </label>
                <sn-record-picker id="delegate" ng-change="c.onDelegate()" field="delegateUser" table="'sys_user'" default-query="'active=true'" display-field="'name'" value-field="'sys_id'" search-fields="'name'" page-size="100"></sn-record-picker>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
               <label class="field-label" title="">
                  <span class="field-decorations">
                    <span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.starts_filled()}" style="padding-right: .25em"></span></span>
                  <span style="padding-right: .25em" class="ng-binding" title="">Starts</span>
                </label>
                <sp-date-picker field="starts" ng-model="c.starts" ng-model-options="{getterSetter: true}" sn-change="c.onStarts()" sn-include-time="true"></sp-date-picker>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
                <label class="field-label" title="">
                  <span class="field-decorations">
                    <span class="fa fa-asterisk mandatory ng-scope" ng-class="{'mandatory-filled': c.ends_filled()}" style="padding-right: .25em"></span></span>
                  <span style="padding-right: .25em" class="ng-binding" title="">Ends</span>
                </label>
                <sp-date-picker field="ends" ng-model="c.ends" ng-model-options="{getterSetter: true}" sn-change="c.onEnds()" sn-include-time="true"></sp-date-picker>
              </div>
            </td>
          </tr>
        </table>
      </td>
      <td class="assignments form-field-td" style="padding-left:15%;padding-top:2%;">
        <table>
          <tr>
            <td>
              <div class="row form-group">
                <label class="checkbox-inline">
                  <input id="approvals" name="approvals" type="checkbox" ng-change="c.onApprovals()" ng-model="c.approvals">Approvals
                </label>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
                <label class="checkbox-inline">
                  <input type="checkbox" ng-change="c.onAssignments()" ng-model="c.assignments ">Assignments
                </label>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
                <label class="checkbox-inline">
                  <input type="checkbox" ng-change="c.onNotifications()" ng-model="c.notifications">CC notifications
                </label>
              </div>
            </td>
          </tr>
          <tr>
            <td>
              <div class="row form-group">
                <label class="checkbox-inline">
                  <input type="checkbox" ng-change="c.onInvitations()" ng-model="c.invitations">Meeting invitations
                </label>
              </div>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
</div>

 

Client Script for the Widget :

 

api.controller = function($scope) {
    /* widget controller */
    var c = this;

	// get Share data from parent widget
    var shareData = c.widget.options.shared;
    var delegate = null;

	// default object to be returned to parent widget via Share data
	var newData = {
		user: null,
		delegateUser: null,
		starts: null,
		ends: null,
		approvals: null,
		assignments: null,
		notifications: null,
		meetings: null
	};
	
	c.starts = '';
	c.ends = '';
	//c.data.user_readonly = true;

	// When is an UPDATE load current Delegate data to the model
    if (shareData.update) {
		shareData.modifiedDelegateData = newData;
        delegate = shareData.currentDelegateData;
		
        c.approvals = delegate.approvals == '1';
        c.assignments = delegate.assignments == '1';
        c.notifications = delegate.notifications == '1';
        c.invitations = delegate.invitations == '1';

        c.starts = delegate.starts;
        c.ends = delegate.ends;
    } 
	// When is a NEW Delegate
	else {
		shareData.newDelegateData = newData;
        c.approvals = false;
        c.assignments = false;
        c.notifications = false;
        c.invitations = false;
    }

    $scope.user = {
        displayValue: delegate ? delegate.user_dv : $scope.data.cur_user_dv,
        value: delegate ? delegate.user_id : $scope.data.cur_user_id,
        name: 'user'
    };

    $scope.delegateUser = {
        displayValue: delegate ? delegate.delegate_dv : '',
        value: delegate ? delegate.delegate_id : '',
        name: 'delegateUser'
    };


    $scope.starts = {
        displayValue: delegate ? delegate.starts : '',
        value: delegate ? delegate.starts : '',
        name: 'starts'
    };
    $scope.ends = {
        displayValue: delegate ? delegate.ends : '',
        value: delegate ? delegate.ends : '',
        name: 'ends'
    };
	
		

	c.onUser = function() {
		shareData.modifiedDelegateData.user = $scope.user.value;
	};
	
	c.onDelegate = function() {
		if (shareData.update) shareData.modifiedDelegateData.delegateUser = $scope.delegateUser.value;
		else shareData.newDelegateData.delegateUser = $scope.delegateUser.value;
	};
	
	c.onStarts = function() {
		if (shareData.update) shareData.modifiedDelegateData.starts = c.starts;
		else shareData.newDelegateData.starts = c.starts;
	};
	
	c.onEnds = function() {
		if (shareData.update) shareData.modifiedDelegateData.ends = c.ends;
		else shareData.newDelegateData.ends = c.ends;
	};

	c.onApprovals = function() {
		if (shareData.update) {
			shareData.modifiedDelegateData.approvals = c.approvals;
			//shareData.modifiedDelegateData.notifications = true;
		}
		else{
			shareData.newDelegateData.approvals = c.approvals;
		}
	};
	
	c.onAssignments = function() {
		if (shareData.update)
		{
			shareData.modifiedDelegateData.assignments = c.assignments;
			//shareData.modifiedDelegateData.notifications = true;
		}
		else
		{
			shareData.newDelegateData.assignments = c.assignments;
		}
	};
	
	c.onNotifications = function() {
		if (shareData.update)
		{
			shareData.modifiedDelegateData.notifications = c.notifications;
		}
		else{
			shareData.newDelegateData.notifications = c.notifications;
		}
	};
	
	c.onInvitations = function() {
		if (shareData.update)
		{
			shareData.modifiedDelegateData.invitations = c.invitations;
			//shareData.modifiedDelegateData.notifications = true;
		}
		else{ 
			shareData.newDelegateData.invitations = c.invitations;
		}
	};
	
	c.user_filled = function() {
		return $scope.user.value != '';
	};
	
	c.delegate_filled = function() {
		return $scope.delegateUser.value != '';
	};
	
	c.starts_filled = function() {
		return c.starts != '';
	};
	
	c.ends_filled = function() {
		return c.ends != '';
	};
};

 

13 REPLIES 13

@Mishu 

is that an OOB widget? I couldn't search it

somehow you need to determine if either Approvals or Assignments or Meeting invitations checkboxes are selected it should mark CC notification checkbox as well

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@Ankur Bawiskar 

 

No, its not a OOB widget thats why i shared the HTML and Client code above.


somehow you need to determine if either Approvals or Assignments or Meeting invitations checkboxes are selected it should mark CC notification checkbox as well --- This is the only requirement.

Could you share where i have to make changes in above html and client script to make this work

@Mishu 

is the current code working fine?

I tried and it gives some error when I previewed the widget

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader

@Ankur Bawiskar Yes it works fine 

@Mishu 

then check my below comments

Something like this

api.controller = function($scope) {
var c = this;
var shareData = c.widget.options.shared;
var delegate = null;

var newData = {
user: null,
delegateUser: null,
starts: null,
ends: null,
approvals: null,
assignments: null,
notifications: null,
meetings: null
};

c.starts = '';
c.ends = '';

// When is an UPDATE load current Delegate data to the model
if (shareData.update) {
shareData.modifiedDelegateData = newData;
delegate = shareData.currentDelegateData;

c.approvals = delegate.approvals == '1';
c.assignments = delegate.assignments == '1';
c.notifications = delegate.notifications == '1';
c.invitations = delegate.invitations == '1';

c.starts = delegate.starts;
c.ends = delegate.ends;
}
// When is a NEW Delegate
else {
shareData.newDelegateData = newData;
c.approvals = false;
c.assignments = false;
c.notifications = false;
c.invitations = false;
}

$scope.user = {
displayValue: delegate ? delegate.user_dv : $scope.data.cur_user_dv,
value: delegate ? delegate.user_id : $scope.data.cur_user_id,
name: 'user'
};

$scope.delegateUser = {
displayValue: delegate ? delegate.delegate_dv : '',
value: delegate ? delegate.delegate_id : '',
name: 'delegateUser'
};

$scope.starts = {
displayValue: delegate ? delegate.starts : '',
value: delegate ? delegate.starts : '',
name: 'starts'
};
$scope.ends = {
displayValue: delegate ? delegate.ends : '',
value: delegate ? delegate.ends : '',
name: 'ends'
};

// Function to handle when Approvals checkbox changes
c.onApprovals = function() {
if (shareData.update) {
shareData.modifiedDelegateData.approvals = c.approvals;
}
else {
shareData.newDelegateData.approvals = c.approvals;
}
// Automatically select "CC notifications" when Approvals is checked
if (c.approvals) {
c.notifications = true; // Automatically select CC notifications
}
};

// Function to handle when Assignments checkbox changes
c.onAssignments = function() {
if (shareData.update) {
shareData.modifiedDelegateData.assignments = c.assignments;
}
else {
shareData.newDelegateData.assignments = c.assignments;
}
// Automatically select "CC notifications" when Assignments is checked
if (c.assignments) {
c.notifications = true; // Automatically select CC notifications
}
};

// Function to handle when Invitations checkbox changes
c.onInvitations = function() {
if (shareData.update) {
shareData.modifiedDelegateData.invitations = c.invitations;
}
else {
shareData.newDelegateData.invitations = c.invitations;
}
// Automatically select "CC notifications" when Invitations is checked
if (c.invitations) {
c.notifications = true; // Automatically select CC notifications
}
};

// Function to handle when CC Notifications checkbox changes
c.onNotifications = function() {
if (shareData.update) {
shareData.modifiedDelegateData.notifications = c.notifications;
}
else {
shareData.newDelegateData.notifications = c.notifications;
}
};

// Other methods...
};

If my response helped please mark it correct and close the thread so that it benefits future readers.

Regards,
Ankur
Certified Technical Architect  ||  9x ServiceNow MVP  ||  ServiceNow Community Leader