15 require_once(
"$admLibrary/aGroupSupport.i");
20 "operation" => array(
"filter" => FILTER_SANITIZE_STRING),
21 "payload" => array(
"filter" => FILTER_SANITIZE_STRING),
22 "gList" => array(
"filter" => FILTER_SANITIZE_STRING),
23 "gProfile" => array(
'filter' => FILTER_SANITIZE_STRING)
25 HCU_ImportVars($admVars,
"GROUP_RIGHTS", $admOk);
27 $rOperation = isset($admVars[
"GROUP_RIGHTS"][
"operation"]) ? $admVars[
"GROUP_RIGHTS"][
"operation"] :
null;
28 $rPayload = isset($admVars[
"GROUP_RIGHTS"][
"payload"]) ? $admVars[
"GROUP_RIGHTS"][
"payload"] :
null;
29 $rList = isset($admVars[
"GROUP_RIGHTS"][
"gList"]) ? $admVars[
"GROUP_RIGHTS"][
"gList"] :
null;
30 $rProfile = isset($admVars[
"GROUP_RIGHTS"][
"gProfile"]) ? $admVars[
"GROUP_RIGHTS"][
"gProfile"] :
null;
33 GroupDecrypt($SYSENV, $Cu, $rPayload) :
36 $rContext = $rPayload ?
37 GroupContext($SYSENV, $Cu, $rGroup[
'group']) :
38 GroupContext($SYSENV, $Cu);
43 switch ($rOperation) {
47 case "readGroupRights":
48 header(
'Content-type: application/json');
50 $gRights = ReadGroupRights($SYSENV, $dbh, $rContext);
51 $gProfiles = ReadProfiles($SYSENV, $dbh, $rContext);
52 $aryResult[
'data'][
'gRights'] = $gRights[
'rights'];
53 $aryResult[
'data'][
'gProfiles'] = $gProfiles[
'profiles'];
54 GroupReply($aryResult, $aryReply, $rOperation);
56 case "readProfileRights":
57 header(
'Content-type: application/json');
59 $pRights = ReadProfileRights($SYSENV, $dbh, $rContext);
60 $aryResult[
'data'][
'pRights'] = $pRights[
'rights'];
61 GroupReply($aryResult, $aryReply, $rOperation);
63 case "updateGroupRights":
64 header(
'Content-type: application/json');
66 $gValidate = ValidateGroupRights($SYSENV, $rContext, $rList);
67 $gCreate = CreateGroupRights($SYSENV, $dbh, $rContext, $gValidate[
'create']);
68 $gUpdate = UpdateGroupRights($SYSENV, $dbh, $rContext, $gValidate[
'update']);
69 $gDelete = DeleteGroupRights($SYSENV, $dbh, $rContext, $gValidate[
'delete']);
70 $aryResult[
'info'] =
"Features have been updated successfully.";
71 $aryResult[
'data'][
'create'] = isset($gCreate[
'rights']) ? $gCreate[
'rights'] : $gCreate;
72 $aryResult[
'data'][
'update'] = isset($gUpdate[
'rights']) ? $gUpdate[
'rights'] : $gUpdate;
73 $aryResult[
'data'][
'delete'] = isset($gDelete[
'rights']) ? $gDelete[
'rights'] : $gDelete;
74 GroupReply($aryResult, $aryReply, $rOperation);
76 case "updateGroupProfile":
77 header(
'Content-type: application/json');
79 $gProfile = UpdateGroupProfile($SYSENV, $dbh, $rContext, $rProfile);
81 $rGroup[
'group'][
'p_id'] = $gProfile[
'profile'][
'id'];
82 $rGroup[
'group'][
'g_profile'] = $gProfile[
'profile'][
'name'];
86 $rContext = GroupContext($SYSENV, $Cu, $rGroup[
'group']);
87 $gRights = ReadGroupRights($SYSENV, $dbh, $rContext);
89 $aryResult[
'data'][
'rights'] = $gRights[
'rights'];
90 $aryResult[
'data'][
'group'] = $rGroup;
91 $aryResult[
'data'][
'encrypt'] = GroupEncrypt($SYSENV, $Cu, $rGroup);
92 $aryResult[
'info'] = $gProfile[
'message'];
93 GroupReply($aryResult, $aryReply, $rOperation);
97 }
catch (Exception $e) {
98 $aryReply[
'errors'][] = $e->getMessage();
99 $aryResult[
'data'] = array();
100 $aryResult[
'info'] = array();
102 GroupReply($aryResult, $aryReply, $rOperation);
115 function ValidateGroupRights($pEnv, $pContext, $pList) {
116 $gId = $pContext[
'g_id'];
117 $pId = $pContext[
'p_id'];
119 $hList = html_entity_decode($pList);
120 $jList = json_decode($hList,
true);
122 $vListCreate = array();
123 $vListUpdate = array();
124 $vListDelete = array();
128 foreach ($jList[
'create'] as $row => $value) {
129 $vListCreate[] = array(
130 "_action" =>
"create",
131 "group_id" => intval($gId),
132 "feature_code" => prep_save($value[
'fCode'], 10),
133 "amount_per_transaction" => $value[
'gApt'] ==
null ?
"NULL" : floatval($value[
'gApt']),
134 "amount_per_day" => $value[
'gApd'] ==
null ?
"NULL" : floatval($value[
'gApd']),
135 "amount_per_month" => $value[
'gApm'] ==
null ?
"NULL" : floatval($value[
'gApm']),
136 "amount_per_account_per_day" => $value[
'gApa'] ==
null ?
"NULL" : floatval($value[
'gApa']),
137 "count_per_day" => $value[
'gCpd'] ==
null ?
"NULL" : intval($value[
'gCpd']),
138 "count_per_month" => $value[
'gCpm'] ==
null ?
"NULL" : intval($value[
'gCpm']),
139 "count_per_account_per_day" => $value[
'gCpa'] ==
null ?
"NULL" : intval($value[
'gCpa']),
140 "confirm_required" => boolval($value[
'gCfm']) == 1 ?
"TRUE" :
"FALSE" 145 foreach ($jList[
'update'] as $row => $value) {
146 $vListUpdate[] = array(
147 "_action" =>
"update",
148 "group_id" => intval($gId),
149 "feature_code" => prep_save($value[
'fCode'], 10),
150 "amount_per_transaction" => $value[
'gApt'] ==
null ?
"NULL" : floatval($value[
'gApt']),
151 "amount_per_day" => $value[
'gApd'] ==
null ?
"NULL" : floatval($value[
'gApd']),
152 "amount_per_month" => $value[
'gApm'] ==
null ?
"NULL" : floatval($value[
'gApm']),
153 "amount_per_account_per_day" => $value[
'gApa'] ==
null ?
"NULL" : floatval($value[
'gApa']),
154 "count_per_day" => $value[
'gCpd'] ==
null ?
"NULL" : intval($value[
'gCpd']),
155 "count_per_month" => $value[
'gCpm'] ==
null ?
"NULL" : intval($value[
'gCpm']),
156 "count_per_account_per_day" => $value[
'gCpa'] ==
null ?
"NULL" : intval($value[
'gCpa']),
157 "confirm_required" => boolval($value[
'gCfm']) == 1 ?
"TRUE" :
"FALSE" 162 foreach ($jList[
'delete'] as $row => $value) {
163 $vListDelete[] = array(
164 "_action" =>
"delete",
165 "group_id" => intval($gId),
166 "feature_code" => prep_save($value[
'fCode'], 10)
170 $vList[
'create'] = $vListCreate;
171 $vList[
'update'] = $vListUpdate;
172 $vList[
'delete'] = $vListDelete;
188 function CreateGroupRights($pEnv, $pDbh, $pContext, $pList) {
189 if (count($pList) == 0) {
return array(); }
191 $gId = $pContext[
'g_id'];
192 $pId = $pContext[
'p_id'];
193 $cuTable = $pContext[
'cu_table'];
194 $cuCode = $pContext[
'cu_code'];
196 $sqlReturn = array();
201 amount_per_transaction, 202 amount_per_account_per_day, 205 count_per_account_per_day, 210 foreach ($pList as $key => $value) {
212 $sqlValues .= $value[
'group_id'] .
",";
213 $sqlValues .=
"'" . $value[
'feature_code'] .
"',";
214 $sqlValues .= $value[
'amount_per_transaction'] .
",";
215 $sqlValues .= $value[
'amount_per_account_per_day'] .
",";
216 $sqlValues .= $value[
'amount_per_day'] .
",";
217 $sqlValues .= $value[
'amount_per_month'] .
",";
218 $sqlValues .= $value[
'count_per_account_per_day'] .
",";
219 $sqlValues .= $value[
'count_per_day'] .
",";
220 $sqlValues .= $value[
'count_per_month'] .
",";
221 $sqlValues .= $value[
'confirm_required'];
223 $sqlCreate .=
"INSERT INTO {$cuTable}grouprights 224 ($sqlColumns) VALUES ($sqlValues);";
226 $sqlReturn[
'rights'][] = $value[
'feature_code'];
229 $sqlCreateRs = db_query($sqlCreate, $pDbh);
231 $pEnv[
'logger']->error(db_last_error());
232 throw new Exception(
"Failed to create group rights");
249 function UpdateGroupRights($pEnv, $pDbh, $pContext, $pList) {
250 if (count($pList) == 0) {
return array(); }
252 $gId = $pContext[
'g_id'];
253 $pId = $pContext[
'p_id'];
254 $cuTable = $pContext[
'cu_table'];
255 $cuCode = $pContext[
'cu_code'];
257 $sqlReturn = array();
260 amount_per_transaction, 261 amount_per_account_per_day, 264 count_per_account_per_day, 269 foreach ($pList as $key => $value) {
271 {$value['amount_per_transaction']}, 272 {$value['amount_per_account_per_day']}, 273 {$value['amount_per_day']}, 274 {$value['amount_per_month']}, 275 {$value['count_per_account_per_day']}, 276 {$value['count_per_day']}, 277 {$value['count_per_month']}, 278 {$value['confirm_required']}";
280 $sqlUpdate .=
"UPDATE {$cuTable}grouprights 281 SET ($sqlColumns) = ($sqlValues) 282 WHERE group_id = $gId 283 AND feature_code = '{$value['feature_code']}';";
285 $sqlReturn[
'rights'][] = $value[
'feature_code'];
288 $sqlUpdateRs = db_query($sqlUpdate, $pDbh);
290 $pEnv[
'logger']->error(db_last_error());
291 throw new Exception(
"Failed to update group rights");
308 function DeleteGroupRights($pEnv, $pDbh, $pContext, $pList) {
309 if (count($pList) == 0) {
return array(); }
311 $gId = $pContext[
'g_id'];
312 $pId = $pContext[
'p_id'];
313 $cuTable = $pContext[
'cu_table'];
314 $cuCode = $pContext[
'cu_code'];
316 $sqlReturn = array();
319 foreach ($pList as $key => $value) {
321 $sqlDelete .=
"DELETE FROM {$cuTable}grouprights 322 WHERE group_id = $gId 323 AND feature_code = '{$value['feature_code']}';";
325 $sqlReturn[
'rights'][] = $value[
'feature_code'];
328 $sqlDeleteRs = db_query($sqlDelete, $pDbh);
330 $pEnv[
'logger']->error(db_last_error());
331 throw new Exception(
"Failed to delete group rights");
348 function ReadGroupRights($pEnv, $pDbh, $pContext) {
349 $maxAmount = FEATURE_LIMIT_MAX_AMOUNT;
350 $maxCount = FEATURE_LIMIT_MAX_COUNT;
352 $gId = $pContext[
'g_id'];
353 $pId = $pContext[
'p_id'];
354 $cuTable = $pContext[
'cu_table'];
355 $cuCode = $pContext[
'cu_code'];
357 $sqlReturn = array();
359 f.feature_code AS f_code, 360 f.description AS f_desc, 361 f.limit_type AS f_type, 362 p.profile_code AS p_code, 363 gr.feature_code AS g_dft, 364 gr.amount_per_transaction AS g_apt, 365 gr.amount_per_day AS g_apd, 366 gr.amount_per_month AS g_apm, 367 gr.amount_per_account_per_day AS g_apa, 368 gr.count_per_day AS g_cpd, 369 gr.count_per_month AS g_cpm, 370 gr.count_per_account_per_day AS g_cpa, 371 gr.confirm_required AS g_cfm, 372 pr.confirm_required AS p_cfm, 373 COALESCE(pr.amount_per_transaction, $maxAmount) AS m_apt, 374 COALESCE(pr.amount_per_day, $maxAmount) AS m_apd, 375 COALESCE(pr.amount_per_month, $maxAmount) AS m_apm, 376 COALESCE(pr.amount_per_account_per_day, $maxAmount) AS m_apa, 377 COALESCE(pr.count_per_day, $maxCount) AS m_cpd, 378 COALESCE(pr.count_per_month, $maxCount) AS m_cpm, 379 COALESCE(pr.count_per_account_per_day, $maxCount) AS m_cpa";
380 $sqlSelect =
"SELECT $sqlColumns 381 FROM {$cuTable}group g 382 INNER JOIN cu_profile p ON g.profile_id = p.profile_id 383 INNER JOIN cu_profilerights pr ON g.profile_id = pr.profile_id 384 INNER JOIN cu_feature f ON pr.feature_code = f.feature_code 385 LEFT JOIN {$cuTable}grouprights gr ON g.group_id = gr.group_id 386 AND gr.feature_code = f.feature_code 387 WHERE g.group_id = $gId 388 AND f.enabled = 'TRUE' 389 ORDER BY f.description ASC";
390 $sqlSelectRs = db_query($sqlSelect, $pDbh);
392 $pEnv[
'logger']->error(db_last_error());
393 throw new Exception(
"Failed to read group rights");
396 $sqlReturn[
'rights'] = db_fetch_all($sqlSelectRs);
411 function UpdateGroupProfile($pEnv, $pDbh, $pContext, $pProfile) {
412 $gId = $pContext[
'g_id'];
413 $pId = $pContext[
'p_id'];
414 $cuTable = $pContext[
'cu_table'];
415 $cuCode = $pContext[
'cu_code'];
417 $sqlReturn = array();
419 $pDesc = prep_save($pProfile, 255);
420 $sqlSelect =
"SELECT profile_id AS p_id 422 WHERE description = '$pDesc' 425 $sqlSelectRs = db_query($sqlSelect, $pDbh);
426 $sqlSelectRow = db_fetch_assoc($sqlSelectRs);
427 $pId = intval($sqlSelectRow[
'p_id']);
430 $sqlUpdate =
"UPDATE {$cuTable}group 431 SET profile_id = $pId 432 WHERE group_id = $gId";
433 $sqlUpdateRs = db_query($sqlUpdate, $pDbh);
435 $pEnv[
'logger']->error(db_last_error());
436 throw new Exception(
"Failed to update group profile.");
440 $sqlDelete =
"DELETE FROM {$cuTable}grouprights 441 WHERE group_id = $gId";
442 $sqlDeleteRs = db_query($sqlDelete, $pDbh);
444 $pEnv[
'logger']->error(db_last_error());
445 throw new Exception(
"Failed to update group rights.");
449 $sqlDelete =
"DELETE FROM {$cuTable}userrights ur 450 USING {$cuTable}user u 451 WHERE ur.user_id = u.user_id 452 AND u.group_id = $gId 453 AND ur.feature_code NOT IN 454 (SELECT pr.feature_code FROM cu_profilerights pr WHERE pr.profile_id = $pId)";
455 $sqlDeleteRs = db_query($sqlDelete, $pDbh);
456 $sqlDeleteRs = db_query($sqlDelete, $pDbh);
458 $pEnv[
'logger']->error(db_last_error());
459 throw new Exception(
"Failed to update user rights rights.");
464 f.feature_code AS f_code, 465 f.description AS f_desc, 466 u.user_name AS u_user";
468 ur.amount_per_transaction != pr.amount_per_transaction 469 OR ur.amount_per_account_per_day != pr.amount_per_account_per_day 470 OR ur.amount_per_day != pr.amount_per_day 471 OR ur.amount_per_month != pr.amount_per_month 472 OR ur.count_per_account_per_day != pr.count_per_account_per_day 473 OR ur.count_per_day != pr.count_per_day 474 OR ur.count_per_month != pr.count_per_month 475 OR ur.confirm_required != pr.confirm_required";
476 $sqlSelect =
"SELECT $sqlColumns 477 FROM {$cuTable}userrights ur 478 INNER JOIN {$cuTable}user u ON u.user_id = ur.user_id 479 INNER JOIN cu_feature f ON f.feature_code = ur.feature_code 480 FULL OUTER JOIN cu_profilerights pr ON pr.feature_code = ur.feature_code 481 WHERE pr.profile_id = $pId 482 AND u.group_id = $gId 484 $sqlSelectRs = db_query($sqlSelect, $pDbh);
486 $pEnv[
'logger']->error(db_last_error());
487 throw new Exception(
"Failed to read user rights.");
490 $sqlReturn[
'message'] =
"Group Profile has been updated successfully.";
491 $sqlReturn[
'profile'] = array(
"name"=>$pDesc,
"id"=>$pId);
492 if (db_num_rows($sqlSelectRs) > 0) {
493 $sqlReturn[
'message'] .=
"<br>  The following users may have feature limits that differ from the new profile.";
495 while ($row = db_fetch_assoc($sqlSelectRs)) {
496 $sqlReturn[
'message'] .=
"<br>  — User: " . $row[
'u_user'] .
", Feature: " . $row[
'f_desc'];
513 function ReadProfiles($pEnv, $pDbh, $pContext) {
514 $cuCode = $pContext[
'cu_code'];
516 $sqlReturn = array();
518 profile_code AS p_code, 519 description AS p_desc";
521 $sqlSelect =
"SELECT $sqlColumn 524 ORDER BY description ASC";
526 $sqlSelectRs = db_query($sqlSelect, $pDbh);
528 $pEnv[
'logger']->error(db_last_error());
529 throw new Exception(
"Failed to read profiles.");
532 $sqlReturn[
'profiles'] = db_fetch_all($sqlSelectRs);
546 function ReadProfileRights($pEnv, $pDbh, $pContext) {
547 $gId = $pContext[
'g_id'];
548 $pId = $pContext[
'p_id'];
550 $sqlReturn = array();
552 f.feature_code AS f_code, 553 f.description AS f_desc, 554 f.limit_type AS f_type, 555 pr.amount_per_transaction AS p_apt, 556 pr.amount_per_day AS p_apd, 557 pr.amount_per_month AS p_apm, 558 pr.amount_per_account_per_day AS p_apa, 559 pr.count_per_day AS p_cpd, 560 pr.count_per_month AS p_cpm, 561 pr.count_per_account_per_day AS p_cpa, 562 pr.confirm_required AS p_cfm";
563 $sqlSelect =
"SELECT $sqlColumns 564 FROM cu_profilerights pr 565 INNER JOIN cu_feature f ON pr.feature_code = f.feature_code 566 WHERE profile_id = $pId 567 AND f.enabled = 'TRUE' 568 ORDER BY description ASC";
569 $sqlSelectRs = db_query($sqlSelect, $pDbh);
571 $pEnv[
'logger']->error(db_last_error());
572 throw new Exception(
"Failed to read profile rights.");
575 $sqlReturn[
'rights'] = db_fetch_all($sqlSelectRs);
587 function PrintCardContent() {
591 <div
id=
"status"></div>
592 <div
class=
"well well-sm col-sm-12">
594 <div
class=
"col-sm-12">
595 <input
id=
"grInpProfiles" style=
"min-width: 200px; max-width: 350px;">
596 <span
class=
"hidden-xs"> </span>
597 <br
class=
"hidden-sm hidden-md hidden-lg">
598 <a href=
"#" id=
"lnkProfiles">View Profile Rights</a>
603 <div
class=
"col-sm-12">
605 <div
class=
"radio-spacer">
606 <input type=
"radio" name=
"column" value=
"o" checked=
"true">
607 <label
for=
"co">Options</label>
609 <div
class=
"radio-spacer">
610 <input type=
"radio" name=
"column" value=
"q">
611 <label
for=
"cq">Quantity</label>
613 <div
class=
"radio-spacer">
614 <input type=
"radio" name=
"column" value=
"d">
615 <label
for=
"cd">Amount</label>
617 <div
class=
"radio-spacer">
618 <input type=
"radio" name=
"column" value=
"a">
619 <label
for=
"ca">All</label>
629 <div
id=
"grRightsGrid"></div>
632 <div
class=
"hcu-template">
633 <div
class=
"hcu-edit-buttons k-state-default">
634 <span
class=
"hcu-icon-delete">
635 <!--<a href=
"##" id=
"lnkDelete">
636 <i
class=
"fa fa-trash fa-lg"></i>
639 <a href=
"##" id=
"lnkCancel">
642 <a href=
"##" id=
"btnUpdate" class=
"k-button k-primary">
643 <i
class=
"fa fa-check fa-lg"></i>
650 <div
id=
"grProfile" style=
"padding: 0;">
651 <div
id=
"grProfileGrid"></div>
654 <div
id=
"grConfirm" class=
"row">
655 <div
class=
"col-sm-12">
656 <p>You are about to change the profile
for this group.</p>
657 <p>This will
remove any configured rights
for the group and any user rights not in the
new profile.</p>
658 <p>Do you wish to
continue?</p>
662 <div
id=
"grDiscard" class=
"row">
663 <div
class=
"col-sm-12">
664 <p>You have made changes to the current group rights.</p>
665 <p>Do you wish to discard these changes?</p>
669 <script type=
"text/x-kendo-template" id=
"templateProfiles">
670 <tr
class=
"k-master-row">
673 # if (fType == "B" || fType == "D") { # 674 # if (pApt >= FEATURE_LIMIT_MAX_AMOUNT || pApt == null) { # 675 Amount per transaction: No Limit, <br>
677 Amount per transaction: #= kendo.toString(pApt,
"c2") #, <br>
680 # if (pApa >= FEATURE_LIMIT_MAX_AMOUNT || pApa == null) { # 681 Amount per account per day: No Limit, <br>
683 Amount per account per day: #= kendo.toString(pApa,
"c2") #, <br>
686 # if (pApd >= FEATURE_LIMIT_MAX_AMOUNT || pApd == null) { # 687 Amount per day: No Limit, <br>
689 Amount per day: #= kendo.toString(pApd,
"c2") #, <br>
692 # if (pApm >= FEATURE_LIMIT_MAX_AMOUNT || pApm == null) { # 693 Amount per month: No Limit, <br>
695 Amount per month: #= kendo.toString(pApm,
"c2") #, <br>
699 # if (fType == "B" || fType == "Q") { # 700 # if (pCpa >= FEATURE_LIMIT_MAX_COUNT || pCpa == null) { # 701 Count per account per day: No Limit, <br>
703 Count per account per day: #= kendo.toString(pCpa,
"n0") #, <br>
706 # if (pCpd >= FEATURE_LIMIT_MAX_COUNT || pCpd == null) { # 707 Count per day: No Limit, <br>
709 Count per day: #= kendo.toString(pCpd,
"n0") #, <br>
712 # if (pCpm >= FEATURE_LIMIT_MAX_COUNT || pCpm == null) { # 713 Count per month: No Limit, <br>
715 Count per month: #= kendo.toString(pCpm,
"n0") #, <br>
719 # if (fType == "A") { # 723 # if (fType == "B" || fType == "D") { # 725 Confirmation Required: Yes
727 Confirmation Required: No
768 <script type=
"text/javascript">
769 var FEATURE_LIMIT_MAX_AMOUNT = <?php echo FEATURE_LIMIT_MAX_AMOUNT; ?>;
770 var FEATURE_LIMIT_MAX_COUNT = <?php echo FEATURE_LIMIT_MAX_COUNT; ?>;
772 var GroupRights =
function() {
773 var grCardContainer =
null;
774 var grCardWindows =
null;
776 var grPayload =
null;
780 var grDataSource =
null;
783 var grProfile =
null;
784 var grConfirm =
null;
785 var grDiscard =
null;
787 var grDropDown =
null;
788 var grDropDownData =
null;
790 var grGridData =
null;
791 var grProfileGrid =
null;
792 var grProfileGridData =
null;
794 var grProfileNext =
null;
795 var grProfilePrev =
null;
799 var grProfileLink =
null;
801 var DirtyCheck =
function() {
803 var data = grGrid.dataSource.data();
804 for (var i = 0; i < data.length; i++) {
815 var DataUpdateRights =
function(data, action) {
816 var dataE = grGrid.dataSource.data();
819 for (var i = 0; i < data.length; i++) {
822 for (var j = 0; j < dataE.length; j++) {
825 if (dataE[j].fCode == data[i]) {
826 dataE[j].gDft = action ==
"delete";
829 if (action ==
"delete") {
830 $(
"#chk_" + data[i]).closest(
"td").addClass(
"vsgDisabled");
832 $(
"#chk_" + data[i]).closest(
"td").removeClass(
"vsgDisabled");
839 var DataBuildFeature =
function(data) {
841 fCode: data.f_code.trim(),
842 fDesc: data.f_desc.trim(),
843 fType: data.f_type.trim(),
844 pCode: data.p_code.trim(),
845 pCfm: (data.p_cfm ==
"t") ?
true :
false,
846 gCfm: (data.g_cfm ==
"t") ? true :
false,
847 gDft: (data.g_dft ==
null) ?
true :
false,
848 gApt: data.g_apt ==
null ?
null : parseFloat(data.g_apt),
849 gApa: data.g_apa ==
null ? null : parseFloat(data.g_apa),
850 gApd: data.g_apd ==
null ? null : parseFloat(data.g_apd),
851 gApm: data.g_apm ==
null ? null : parseFloat(data.g_apm),
852 gCpa: data.g_cpa ==
null ? null : parseInt(data.g_cpa),
853 gCpd: data.g_cpd ==
null ? null : parseInt(data.g_cpd),
854 gCpm: data.g_cpm ==
null ? null : parseInt(data.g_cpm),
855 mApt: parseFloat(data.m_apt),
856 mApa: parseFloat(data.m_apa),
857 mApd: parseFloat(data.m_apd),
858 mApm: parseFloat(data.m_apm),
859 mCpa: parseInt(data.m_cpa),
860 mCpd: parseInt(data.m_cpd),
861 mCpm: parseInt(data.m_cpm)
865 gFeature.gApt = (gFeature.gApt >= gFeature.mApt) ?
null : gFeature.gApt;
866 gFeature.gApa = (gFeature.gApa >= gFeature.mApa) ? null : gFeature.gApa;
867 gFeature.gApd = (gFeature.gApd >= gFeature.mApd) ?
null : gFeature.gApd;
868 gFeature.gApm = (gFeature.gApm >= gFeature.mApm) ? null : gFeature.gApm;
869 gFeature.gCpa = (gFeature.gCpa >= gFeature.mCpa) ?
null : gFeature.gCpa;
870 gFeature.gCpd = (gFeature.gCpd >= gFeature.mCpd) ? null : gFeature.gCpd;
871 gFeature.gCpm = (gFeature.gCpm >= gFeature.mCpm) ?
null : gFeature.gCpm;
876 var DataBuildRights =
function(data) {
878 for (var i = 0; i < data.length; i++) {
879 var gFeature = DataBuildFeature(data[i]);
880 grGridData.push(gFeature);
883 grGrid.dataSource.data(grGridData);
884 grDropDown.value(grGroup.g_profile);
887 var DataBuildProfiles =
function(data) {
889 for (var i = 0; i < data.length; i++) {
891 pCode: data[i].p_code.trim(),
892 pDesc: data[i].p_desc.trim()
895 grDropDownData.push(gProfile);
898 grDropDown.setDataSource(grDropDownData);
901 var DataBuildProfileRights =
function(data) {
902 grProfileGridData = [];
903 for (var i = 0; i < data.length; i++) {
905 fCode: data[i].f_code.trim(),
906 fDesc: data[i].f_desc.trim(),
907 fType: data[i].f_type.trim(),
908 pCfm: (data[i].p_cfm ==
"t") ?
true :
false,
909 pApt: (data[i].p_apt ==
null) ? null : parseFloat(data[i].p_apt),
910 pApd: (data[i].p_apd ==
null) ?
null : parseFloat(data[i].p_apd),
911 pApm: (data[i].p_apm ==
null) ?
null : parseFloat(data[i].p_apm),
912 pApa: (data[i].p_apa ==
null) ?
null : parseFloat(data[i].p_apa),
913 pCpd: (data[i].p_cpd ==
null) ?
null : parseInt(data[i].p_cpd),
914 pCpm: (data[i].p_cpm ==
null) ?
null : parseInt(data[i].p_cpm),
915 pCpa: (data[i].p_cpa ==
null) ?
null : parseInt(data[i].p_cpa)
918 grProfileGridData.push(pFeature);
921 grProfileGrid.dataSource.data(grProfileGridData);
924 var EventOpenProfile =
function(e) {
925 var rightsRequest = {
926 operation:
"readProfileRights",
930 grDataSource.transport.options.read.type =
"POST";
931 grDataSource.read(rightsRequest);
934 var EventSelectDropDown =
function(e) {
935 grProfilePrev = this.value();
938 var EventChangeDropDown =
function (e) {
939 grProfileNext = this.value();
943 var EventRadioChange =
function(e) {
945 var inputValue = input.val();
947 switch (inputValue) {
949 grGrid.showColumn(2);
950 grGrid.showColumn(3);
951 grGrid.showColumn(4);
954 grGrid.hideColumn(3);
955 grGrid.hideColumn(4);
956 grGrid.showColumn(2);
959 grGrid.hideColumn(2);
960 grGrid.hideColumn(4);
961 grGrid.showColumn(3);
964 grGrid.hideColumn(2);
965 grGrid.hideColumn(3);
966 grGrid.showColumn(4);
971 grRights.wrapper.css({top: 100});
974 var EventCheckboxChange =
function(e) {
976 var boxId = box.attr(
"id");
977 var boxValue = box.prop(
"checked");
980 $(
"input[id=chk_DEFAULT]").prop(
"checked",
false);
983 if (boxId ==
"chk_DEFAULT") {
984 $(
"input[id^=chk_]:not(:disabled)").each(
function(e) {
986 $(
this).prop(
"checked", boxValue);
987 $(
this).trigger(
"change");
991 var row = $(box).closest(
"tr");
992 var rowData = grGridData[row[0].rowIndex];
993 var fields = $(row).find(
"td");
997 $(fields).each(
function(e) {
999 var fieldName = field.attr(
"name");
1000 var fieldMax = fieldName.replace(
"g",
"m");
1001 var fieldPro = fieldName.replace(
"g",
"p");
1002 var fieldClass =
null;
1004 var span = field.find(
"span");
1005 var spanClass =
null;
1006 var spanText =
null;
1011 $(field).removeClass();
1012 $(span).removeClass();
1016 fieldClass = rowData[fieldPro] || boxValue ?
"vsgDisabled" :
"";
1017 spanClass = rowData[fieldPro] ?
"not-allowed" : (boxValue ?
"set-default" :
"");
1018 spanText = rowData[fieldPro] ? rowData[fieldPro] : rowData[fieldName];
1019 spanText = spanText ?
"Yes" :
"No";
1020 }
else if (e >= 3 && e <= 5) {
1022 fieldClass = rowData.fType ==
"D" || boxValue ?
"vsgDisabled" :
"";
1023 spanClass = rowData.fType ==
"D" ?
"limit-not-configured" : (boxValue ?
"set-default" :
"");
1024 spanText = rowData.fType ==
"D" ?
"" : (boxValue ?
"Default" : rowData[fieldName]);
1025 spanText = spanText ==
null ?
"Default" : spanText;
1026 }
else if (e >= 6 && e <= 9) {
1028 fieldClass = rowData.fType ==
"Q" || boxValue ?
"vsgDisabled" :
"";
1029 spanClass = rowData.fType ==
"Q" ?
"limit-not-configured" : (boxValue ?
"set-default" :
"");
1030 spanText = rowData.fType ==
"Q" ?
"" : (boxValue ?
"Default" : rowData[fieldName]);
1031 spanText = spanText ==
null ?
"Default" : spanText;
1036 $(field).attr(
"class", fieldClass);
1037 $(span).attr(
"class", spanClass);
1038 $(span).text(spanText);
1044 var EventEditGridNumeric =
function(container, options) {
1045 if (container.hasClass(
"vsgDisabled")) {
1050 var dataModelGrid = options.model;
1051 var dataModelIndex = $(container).closest(
"tr").index();
1052 var dataModelSource = grGridData[dataModelIndex];
1053 var dataKeySource = options.field;
1054 var dataKeyMax = dataKeySource.replace(
"g",
"m");
1055 var dataDirty = dataModelGrid.dirty;
1057 var dataInput = $(
"<input name=\"" + dataKeySource +
"\">");
1058 dataInput.appendTo(container)
1059 dataInput.kendoNumericTextBox({
1061 max: dataModelGrid[dataKeyMax],
1062 step: dataModelGrid[dataKeyMax],
1063 value: dataModelGrid[dataKeySource],
1064 upArrowText:
"Set To Default",
1065 downArrowText:
"Set to 0",
1066 change:
function(e) {
1067 var valueCurrent = this.value();
1068 var valueOriginal = dataModelSource[dataKeySource];
1069 var valueMax = dataModelSource[dataKeyMax];
1071 if (valueCurrent >= valueMax) { valueCurrent =
null; }
1072 if (valueCurrent == valueOriginal) {
1073 if (!dataDirty) { dataModelGrid.dirty =
true; }
1075 $(container).removeClass(
"k-dirty-cell");
1076 $(container).find(
".k-dirty").remove();
1078 $(container).addClass(
"k-dirty-cell");
1079 $(container).prepend(
"<span class='k-dirty'></span>");
1082 dataModelGrid[dataKeySource] = valueCurrent;
1083 this.value(valueCurrent);
1088 var EventEditGridBoolean =
function(container, options) {
1089 if (container.hasClass(
"vsgDisabled")) {
1094 var dataModelGrid = options.model;
1095 var dataModelIndex = $(container).closest(
"tr").index();
1096 var dataModelSource = grGridData[dataModelIndex];
1097 var dataKeySource = options.field;
1098 var dataDirty = dataModelGrid.dirty;
1100 dataInput = $(
"<input type=\"checkbox\" name=\"" + dataKeySource +
"\">");
1101 dataInput.change(
function(e) {
1102 var valueCurrent = this.checked;
1103 var valueOriginal = dataModelSource[dataKeySource];
1105 if (valueCurrent == valueOriginal) {
1106 $(container).removeClass(
"k-dirty-cell");
1107 $(container).find(
".k-dirty").remove();
1109 if (!dataDirty) { dataModelGrid.dirty =
true; }
1111 $(container).addClass(
"k-dirty-cell");
1112 $(container).prepend(
"<span class='k-dirty'></span>");
1115 dataModelGrid[dataKeySource] = valueCurrent;
1116 this.checked = valueCurrent;
1118 dataInput.appendTo(container);
1121 var EventBindGrid =
function(e) {
1122 $(
"#rightsGrid .k-grid-content").css(
"max-height",
"275px");
1123 $(
"input[id^=chk_]").off();
1124 $(
"input[id^=chk_]").change(
function(e) {
1125 EventCheckboxChange(e.target);
1128 $(
"input[id=chk_DEFAULT]").prop(
"checked",
false);
1132 var table = this.tbody;
1133 var rows = $(table).find(
"tr");
1134 for (var i = 0; i < rows.length; i++) {
1135 var rowIndex = rows[i].rowIndex;
1136 var rowData = grGridData[i];
1137 var fields = $(rows[i]).find(
"td");
1139 if (rowData.gDft || rowData.fType ==
"A") {
1140 $(fields[1]).addClass(
"vsgDisabled");
1143 if (rowData.pCfm || rowData.fType ==
"A" || rowData.fType ==
"Q") {
1144 $(fields[2]).addClass(
"vsgDisabled");
1146 if (rowData.fType ==
"D" || rowData.fType ==
"A") {
1147 $(fields[3]).addClass(
"vsgDisabled");
1148 $(fields[4]).addClass(
"vsgDisabled");
1149 $(fields[5]).addClass(
"vsgDisabled");
1151 if (rowData.fType ==
"Q" || rowData.fType ==
"A") {
1152 $(fields[6]).addClass(
"vsgDisabled");
1153 $(fields[7]).addClass(
"vsgDisabled");
1154 $(fields[8]).addClass(
"vsgDisabled");
1155 $(fields[9]).addClass(
"vsgDisabled");
1160 var EventChangeGrid =
function(e) {
1161 var cell = this.select();
1162 var cellIndex = cell.index();
1164 var dataIndex = cell.closest(
"tr")[0].rowIndex;
1165 var dataItem = grGridData[dataIndex];
1167 if (cellIndex == 1 && !dataItem.gDft) {
1168 var box = cell.find(
"input[id^=\"chk_\"]")[0];
1169 $(box).trigger(
"click");
1172 $(cell).removeClass(
"k-state-selected");
1175 var EventShowTip =
function(e) {
1176 var target = $(e.target).find(
"span");
1177 var targetType = target.attr(
"class");
1178 var targetContent =
"";
1179 switch (targetType) {
1181 targetContent =
"This limit is set at the profile level.";
1183 case "limit-not-configured":
1184 targetContent =
"This limit is not configured for this feature.";
1186 case "feature-not-configured":
1187 targetContent =
"This feature does not have limits.";
1190 targetContent =
"Set to default.";
1193 targetContent =
"This feature is already set to the defaults.";
1196 targetContent = $(e.target).text().trim();
1200 return targetContent;
1203 var EventUpdateRights =
function() {
1205 var dataE = grGrid.dataSource.data();
1206 var dataO = grGridData;
1213 for (var i = 0; i < dataE.length; i++) {
1214 var dataItemE = dataE[i];
1215 var dataItemO = dataO[i];
1217 var inputDefault = $(
"#chk_" + dataItemE.fCode);
1218 var inputChecked = $(inputDefault).prop(
"checked");
1221 dataItemE.gApt =
null;
1222 dataItemE.gApa =
null;
1223 dataItemE.gApm =
null;
1224 dataItemE.gApd =
null;
1225 dataItemE.gCpa =
null;
1226 dataItemE.gCpm =
null;
1227 dataItemE.gCpd =
null;
1228 dataItemE.gCfm = dataItemE.pCfm;
1229 dataItemE.dirty =
true;
1230 dataU.delete.push(dataItemE);
1234 if (dataItemE.dirty) {
1236 if (dataItemE.gApt == dataItemO.gApt && dataItemE.gCpa == dataItemO.gCpa &&
1237 dataItemE.gApa == dataItemO.gApa && dataItemE.gCpd == dataItemO.gCpd &&
1238 dataItemE.gApd == dataItemO.gApd && dataItemE.gCpm == dataItemO.gCpm &&
1239 dataItemE.gApm == dataItemO.gApm && dataItemE.gCfm == dataItemO.gCfm) {
1241 dataItemE.dirty =
false;
1245 if (dataItemE.gApt ==
null && dataItemE.gCpa ==
null &&
1246 dataItemE.gApa ==
null && dataItemE.gCpd ==
null &&
1247 dataItemE.gApd ==
null && dataItemE.gCpm ==
null &&
1248 dataItemE.gApm ==
null && dataItemE.gCfm == dataItemE.pCfm) {
1250 dataU.delete.push(dataItemE);
1254 if (dataItemE.gDft) {
1255 dataU.create.push(dataItemE);
1257 dataU.update.push(dataItemE);
1262 if (dataU.create.length == 0 && dataU.update.length == 0 && dataU.delete.length == 0) {
1266 var dataList = JSON.stringify(dataU);
1267 var rightsRequest = {
1268 operation:
"updateGroupRights",
1273 grDataSource.transport.options.read.type =
"POST";
1274 grDataSource.read(rightsRequest);
1277 var EventCancelRights =
function() {
1281 var EventOpenRights =
function() {
1282 grDropDownData = [];
1285 $(
"input[value=o]").trigger(
"click");
1286 $(
"input[value=o]").trigger(
"change");
1288 var rightsRequest = {
1289 operation:
"readGroupRights",
1293 grDataSource.transport.options.read.type =
"POST";
1294 grDataSource.read(rightsRequest);
1297 var EventOpenWindow =
function(e) {
1298 var windowElement = this.element[0];
1299 var windowId = windowElement.id;
1308 grCardWindows.push(
this);
1311 var EventCloseWindow =
function(e) {
1312 var windowElement = this.element[0];
1313 var windowId = windowElement.id;
1316 case "profileConfirm":
1317 EventPopWindow(windowId);
1318 var rightsRequest = {
1319 operation:
"updateGroupProfile",
1321 gProfile: grProfileNext
1325 grGrid.cancelChanges();
1327 grDataSource.transport.options.read.type =
"POST";
1328 grDataSource.read(rightsRequest);
1331 EventPopWindow(windowId);
1332 grDropDown.value(grProfilePrev);
1334 case "discardConfirm":
1335 EventPopWindow(windowId);
1337 grGrid.cancelChanges();
1340 if (windowId ==
"grConfirm") {
1341 EventPopWindow(windowId);
1342 grDropDown.value(grProfilePrev);
1343 }
else if (windowId ==
"grRights") {
1348 EventPopWindow(windowId);
1350 $.homecuValidator.setup({
1351 formStatusField:
"formStatus",
1352 formValidate:
"cardContainerDiv" 1356 EventPopWindow(windowId);
1364 var EventPopWindow =
function(windowId) {
1366 for (var i = 0; i < grCardWindows.length; i++) {
1367 var openWindow = grCardWindows[i].element[0];
1368 var openId = openWindow.id;
1370 if (openId == windowId) {
1376 if (popIndex > -1) {
1377 grCardWindows.splice(popIndex, 1);
1381 var InitDataSources =
function() {
1383 grProfileGridData = [];
1384 grDropDownData = [];
1385 grDataSource =
new kendo.data.DataSource({
1390 contentType:
"application/x-www-form-urlencoded",
1398 requestStart:
function(request) {
1401 requestEnd:
function(response) {
1402 setTimeout(hideWaitWindow, 500);
1404 if (response.hasOwnProperty(
"response")) {
1405 if (response.response.hasOwnProperty(
"Results")) {
1406 var results = response.response.Results;
1408 if (results.hasOwnProperty(
"error")) {
1409 $.homecuValidator.homecuResetMessage =
true;
1410 $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError);
1411 }
else if (results.hasOwnProperty(
"info")) {
1412 $.homecuValidator.homecuResetMessage =
true;
1413 $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusSuccess);
1416 $.homecuValidator.displayMessage(
"Error Parsing Server", $.homecuValidator.settings.statusError);
1419 $.homecuValidator.displayMessage(
"Error Parsing Server", $.homecuValidator.settings.statusError);
1423 parse:
function(response) {
1426 var resultData =
null;
1427 var resultOperation =
null;
1429 if (response.hasOwnProperty(
"Results")) {
1430 results = response.Results;
1431 resultData = results.data;
1432 resultOperation = results.operation;
1435 if (results.hasOwnProperty(
"errors")) {
1439 if (resultData == undefined || resultData ==
null) {
1444 setTimeout(
function() {
1445 switch (resultOperation) {
1446 case "readGroupRights":
1447 DataBuildProfiles(resultData.gProfiles);
1448 DataBuildRights(resultData.gRights);
1449 grGroup.cardTitle=
"Group Rights";
1450 var
template= kendo.template($(
"#titleTemplate").html());
1451 grRights.title(
template(grGroup)).center().open();
1453 case "readProfileRights":
1454 DataBuildProfileRights(resultData.pRights);
1458 case "updateGroupRights":
1459 DataUpdateRights(resultData.create,
"create");
1460 DataUpdateRights(resultData.update,
"update");
1461 DataUpdateRights(resultData.delete,
"delete");
1462 grGrid.saveChanges();
1464 case "updateGroupProfile":
1465 grGroup = resultData.group.group;
1466 grPayload = resultData.encrypt;
1467 grCall(
"updateGroupInfo", resultData.group);
1468 grCall(
"updateGroupEncrypt", resultData.encrypt);
1469 DataBuildRights(resultData.rights);
1480 var InitDataViews =
function() {
1481 grRights = $(
"#grRights").kendoWindow({
1482 title:
"Group Rights",
1489 activate: EventOpenWindow,
1490 close: EventCloseWindow,
1491 open:
function(e) { this.wrapper.css({ top: 100 }); },
1492 }).data(
"kendoWindow");
1494 grProfile = $(
"#grProfile").kendoWindow({
1495 title:
"Profile Rights",
1502 activate: EventOpenWindow,
1503 close: EventCloseWindow,
1504 open:
function(e) { this.wrapper.css({ top: 100 }); }
1505 }).data(
"kendoWindow");
1507 grConfirm = $(
"#grConfirm").kendoDialog({
1508 title:
"Change Profile",
1513 show: EventOpenWindow,
1514 close: EventCloseWindow,
1517 action:
function() { grAction =
"profileDeny"; }
1519 { text:
"Yes", primary:
true,
1520 action:
function() { grAction =
"profileConfirm"; }
1523 }).data(
"kendoDialog");
1525 grDiscard = $(
"#grDiscard").kendoDialog({
1526 title:
"Discard Changes",
1531 show: EventOpenWindow,
1532 close: EventCloseWindow,
1535 action:
function() { grAction =
"discardDeny"; }
1537 { text:
"Yes", primary:
true,
1538 action:
function() { grAction =
"discardConfirm"; }
1541 }).data(
"kendoDialog");
1543 grDropDown = $(
"#grInpProfiles").kendoDropDownList({
1544 dataTextField:
"pDesc",
1545 dataValueField:
"pDesc",
1546 dataSource: grDropDownData,
1547 select: EventSelectDropDown,
1548 change: EventChangeDropDown
1549 }).data(
"kendoDropDownList");
1551 grGrid = $(
"#grRightsGrid").kendoGrid({
1552 change: EventChangeGrid,
1553 dataBound: EventBindGrid,
1558 template:
"There are no features assigned to this group" 1566 fDesc: { type:
"string", editable:
false },
1567 gCfm: { type:
"boolean" },
1568 gCpd: { type:
"number" },
1569 gCpm: { type:
"number" },
1570 gCpa: { type:
"number" },
1571 gApt: { type:
"number" },
1572 gApd: { type:
"number" },
1573 gApm: { type:
"number" },
1574 gApa: { type:
"number" },
1582 { field:
"fDesc", title:
" ", width:
"200px",
1583 attributes: {
"name":
"fDesc",
"class":
"showEllipsis" },
1584 template:
"<span>#=fDesc#</span>" }
1587 { title:
"Set to Default",
1590 attributes: {
"name":
"fCode" },
1591 template:
"#if(gDft){#<span class=\"rdy-default\"></span>#}else{#<input type=\"checkbox\" style=\"margin-top: -2px;\" id=\"chk_#=fCode#\">#}#",
1592 headerTemplate:
"<input type=\"checkbox\" style=\"margin-top: -2px;\" id=\"chk_DEFAULT\">" }
1597 { field:
"gCfm", title:
"Confirm Required", type:
"boolean", width:
"150px", editor: EventEditGridBoolean, attributes: {
"name":
"gCfm"},
1598 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"Q\"){# <span class=\"limit-not-configured\"></span> #} else if (pCfm){# <span class=\"not-allowed\">Yes</span> #}else if (gCfm){# <span>Yes</span> #}else{# <span>No</span> #}#" }
1602 { title:
"Count Per",
1604 { field:
"gCpa", title:
"Account/Day", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gCpa"},
1605 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"D\"){# <span class=\"limit-not-configured\"></span>#}else if(gCpa == null || gCpa >= mCpa){# <span>Default</span> #}else{# <span>#=kendo.toString(gCpa, \"n0\")#</span> #}#" },
1606 { field:
"gCpd", title:
"Day", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gCpd"},
1607 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"D\"){# <span class=\"limit-not-configured\"></span>#}else if(gCpd == null || gCpd >= mCpd){# <span>Default</span> #}else{# <span>#=kendo.toString(gCpd, \"n0\")#</span> #}#" },
1608 { field:
"gCpm", title:
"Month", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gCpm"},
1609 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"D\"){# <span class=\"limit-not-configured\"></span>#}else if(gCpm == null || gCpm >= mCpm){# <span>Default</span> #}else{# <span>#=kendo.toString(gCpm, \"n0\")#</span> #}#" }
1612 { title:
"Amount Per",
1614 { field:
"gApt", title:
"Transaction", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gApt"},
1615 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"Q\"){# <span class=\"limit-not-configured\"></span>#}else if(gApt == null || gApt >= mApt){# <span>Default</span> #}else{# <span>#=kendo.toString(gApt, \"c2\")#</span> #}#" },
1616 { field:
"gApa", title:
"Account/Day", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gApa"},
1617 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"Q\"){# <span class=\"limit-not-configured\"></span>#}else if(gApa == null || gApa >= mApa){# <span>Default</span> #}else{# <span>#=kendo.toString(gApa, \"c2\")#</span> #}#" },
1618 { field:
"gApd", title:
"Day", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gApd"},
1619 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"Q\"){# <span class=\"limit-not-configured\"></span>#}else if(gApd == null || gApd >= mApd){# <span>Default</span> #}else{# <span>#=kendo.toString(gApd, \"c2\")#</span> #}#" },
1620 { field:
"gApm", title:
"Month", type:
"number", width:
"150px", editor: EventEditGridNumeric, attributes: {
"name":
"gApm"},
1621 template:
"#if(fType == \"A\"){# <span class=\"feature-not-configured\"></span> #}else if(fType == \"Q\"){# <span class=\"limit-not-configured\"></span>#}else if(gApm == null || gApm >= mApm){# <span>Default</span> #}else{# <span>#=kendo.toString(gApm, \"c2\")#</span> #}#" }
1625 }).data(
"kendoGrid");
1627 grProfileGrid = $(
"#grProfileGrid").kendoGrid({
1629 rowTemplate: kendo.template($(
"#templateProfiles").html()),
1630 dataBound:
function(e) {
1631 $(
"#grProfileGrid").css(
"border",
"none");
1632 $(
"#grProfileGrid .k-grid-content").css(
"max-height",
"500px");
1635 data: grProfileGridData
1638 template:
"There are no features for this profile" 1641 { title:
"Feature" },
1642 { title:
"Limits", width:
"325px" }
1644 }).data(
"kendoGrid");
1647 jQuery.extend(jQuery.expr[
':'], {
1648 overflown: function (el) {
1649 return el.offsetHeight < el.scrollHeight || el.offsetWidth < el.scrollWidth;
1653 grGridTip = homecuTooltip.defaults;
1654 grGridTip.filter =
".showEllipsis:overflown, .vsgDisabled";
1655 grGridTip.content = EventShowTip
1656 $(
"#grRightsGrid").kendoTooltip(grGridTip);
1658 grProfileLink = $(
"#lnkProfiles");
1659 grCancel = $(
"#lnkCancel");
1660 grUpdate = $(
"#btnUpdate");
1661 grStatus = $(
"#grStatus");
1665 var InitDataActions =
function() {
1666 grProfileLink.on(
"click", EventOpenProfile);
1668 $(
"input[name=column]").on(
"change", EventRadioChange);
1669 $(
"input[value=o]").trigger(
"click");
1670 $(
"input[value=o]").trigger(
"change");
1672 $(
"label[for^=c]").on(
"click",
function(e) {
1673 var column = $(
this).attr(
"for");
1674 var value = column.substring(1, column.length);
1675 var input = $(
"input[value=" + value +
"]");
1676 $(input).trigger(
"click");
1679 grUpdate.on(
"click", EventUpdateRights);
1680 grCancel.on(
"click", EventCancelRights);
1683 this.Open =
function(windowStack) {
1685 $.homecuValidator.setup({
1686 formStatusField:
"status",
1687 formValidate:
"grRights" 1690 grCardWindows = windowStack;
1691 $(
"input[value=o]").trigger(
"click");
1692 $(
"input[value=o]").trigger(
"change");
1694 var rightsRequest = {
1695 operation:
"readGroupRights",
1699 grDataSource.transport.options.read.type =
"POST";
1700 grDataSource.read(rightsRequest);
1703 this.Close =
function() {
1705 grProfile.destroy();
1706 grConfirm.destroy();
1707 grDiscard.destroy();
1710 this.Data =
function(payload, group) {
1711 grPayload = payload;
1715 this.Init =
function(hubCall, cardContainer) {
1717 grCardContainer = cardContainer;
1723 grCall(
"GroupRights",
this);