1//FixVersion="3.3.1.1028" 2//FixVersion="3.4.0.396" 3//FixVersion="3.4.0.587" 4SupplierPortalMaterialize.MethodStatement = function (params) { 5 var Trade_ID, InsertMode = 'I'; 6 var arrMethodStatement = []; 7 var tradeArr = []; 8 var responsiveTableOption = { 9 "columnDefs": [{ "targets": [0, 1, 2, 3, 4, 5, 6], "orderable": false }], 10 "order": [[0, "asc"]] 11 }; 12 function rebuildMethodStatementEntitySelect() { 13 $('#selectEntityListPop').html(''); 14 $('#selectEntityListPop').append('<option value="" disabled selected>Select</option>'); 15 $.each(allLinkedUserActiveArray || [], function (i, item) { 16 $('#selectEntityListPop').append('<option value="' + item.ENTITY_DIVISION_ID + '">' + item.DIVISION_NAME + '</option>'); 17 }); 18 $('#selectEntityListPop').off('change.methodStatementEntity').on('change.methodStatementEntity', function () { 19 selectedEntity = $(this).val(); 20 vmMethodStatement.onchangeEntityPopup(); 21 }); 22 if (selectedEntity) { 23 $('#selectEntityListPop').val(selectedEntity.toString()); 24 } 25 } 26 function rebuildMethodStatementTradeSelect() { 27 $('#selectTradeTypesPop').html(''); 28 $('#selectTradeTypesPop').append('<option value="" disabled selected>Select</option>'); 29 $.each(tradeArr || [], function (i, item) { 30 if (item.ENTITY_DIVISION_ID == selectedEntity) { 31 var isTradeType = false;
32 $.each(arrMethodStatement || [], function (ind, obj) { 33 if (item.RES_CODE == obj.RES_CODE && obj.ENTITY_DIVISION_ID == selectedEntity) { 34 if (InsertMode == 'I') isTradeType = true; 35 else isTradeType = false; 36 } 37 }); 38 if (!isTradeType) { 39 $('#selectTradeTypesPop').append('<option value="' + item.RES_CODE + '" >' + item.RES_NAME + '</option>'); 40 } 41 } 42 }); 43 $('#selectTradeTypesPop').off('change.methodStatementTrade').on('change.methodStatementTrade', function () { 44 Trade_ID = $(this).val(); 45 }); 46 } 47 function bindMethodStatementModalActions() { 48 var modalMethodStatement = $('#modalMethodStatement'); 49 50 modalMethodStatement.off('.methodStatementModalActions'); 51 modalMethodStatement.on('click.methodStatementModalActions', '[data-screen-action="SubmitModalTrade"]', function (e) { 52 e.preventDefault(); 53 e.stopPropagation(); 54 if (e.stopImmediatePropagation) { 55 e.stopImmediatePropagation(); 56 } 57 vmMethodStatement.SubmitModalTrade(); 58 }); 59 modalMethodStatement.on('click.methodStatementModalActions', '[data-screen-action="CancelModalTrade"]', function (e) { 60 e.preventDefault(); 61 e.stopPropagation(); 62 if (e.stopImmediatePropagation) { 63 e.stopImmediatePropagation(); 64 } 65 vmMethodStatement.CancelModalTrade(); 66 }); 67 } 68 function stabilizeMethodStatementModalOpenState() { 69 setTimeout(function () { 70 var modalMethodStatement = $('#modalMethodStatement'); 71 var overlay = modalMethodStatement.data('overlay'); 72 var siblingOverlay = modalMethodStatement.siblings('.lean-overlay, .modal-overlay').first(); 73 74 if (!modalMethodStatement.length || !modalMethodStatement.is(':visible')) { 75 return; 76 } 77 78 if (!modalMethodStatement.hasClass('open')) { 79 modalMethodStatement.addClass('open').show(); 80 } 81 82 $('body').addClass('modal-open').css('overflow', 'hidden'); 83 84 if (overlay && overlay.length) { 85 overlay.show().css({ 86 display: 'block', 87 opacity: 0.5 88 }); 89 } 90 91 if (siblingOverlay.length) { 92 siblingOverlay.show().css({ 93 display: 'block', 94 opacity: 0.5 95 }); 96 } 97 }, 60); 98 } 99 function initializeMethodStatementScreen(e) { 100 bindPortalScreenActions(".screen-method-statement", "methodStatementScreen", { 101 addTradeDet: function () { 102 vmMethodStatement.addTradeDet(); 103 }, 104 SubmitModalTrade: function () { 105 vmMethodStatement.SubmitModalTrade(); 106 }, 107 CancelModalTrade: function () { 108 vmMethodStatement.CancelModalTrade(); 109 } 110 }); 111 mountPortalModalToHost("#modalMethodStatement"); 112 bindMethodStatementModalActions(); 113 vmMethodStatement.viewRenderedLegacy(e); 114 } 115 var vmMethodStatement = { 116 viewRenderedLegacy: function (e) { 117 initUserAccess(e, function () { 118 DynamicMenu(vmMethodStatement.name); 119 loadEntityManagementSubMenu('EntityManagement', vmMethodStatement.name); 120 vmMethodStatement.setAllRecordsValue(); 121 initDateTimePicker(); 122 123 executeServiceCall("GetTradesSupplied", { 124 sUserName: ENCRYPTED_USER, //USERNAME, //XE-74005 125 }, function (success) { 126 tradeArr = success; 127 }); 128 $('#tblMethodStatement tbody').off(); 129 $('#tblMethodStatement tbody').on('click', '.editTrade', function () { 130 Trade_ID = $(this).closest('tr').data('tradeid'); 131 selectedEntity = $(this).closest('tr').data('divisionid'); 132 InsertMode = 'E'; 133 $('#selectEntityListPop').prop('disabled', true); 134 $('#selectTradeTypesPop').prop('disabled', true); 135 vmMethodStatement.openModalHealthSafety(); 136 $.each(arrMethodStatement, function (i, item) { 137 if (item.RES_CODE == Trade_ID && item.ENTITY_DIVISION_ID == selectedEntity) { 138 $('#selectEntityListPop').val(item.ENTITY_DIVISION_ID); 139 $('#selectTradeTypesPop').val(item.RES_CODE); 140 141 if (item.DATE_RECEIVED) initDateTimePicker('#receivedDate', { 'value': item.DATE_RECEIVED }); 142 if (item.EXPIRY_DATE) initDateTimePicker('#expiryDate', { 'value': item.EXPIRY_DATE }); 143 144 //if (item.DATE_RECEIVED) $('#receivedDate').pickadate('picker').set('select', new Date(item.DATE_RECEIVED)); 145 //if(item.EXPIRY_DATE) $('#expiryDate').pickadate('picker').set('select', new Date(item.EXPIRY_DATE)); 146 $('#name').val(item.STATEMENT_NAME); 147 $('#description').val(item.DESCRIPTION); 148 Materialize.updateTextFields(); 149 if (item.FILE_LINK) { 150 $('#ep_fileLinkDoc').attr('data-name', item.FILE_LINK); 151 loadAttachedFileLink('#ep_fileLinkDoc', item.FILE_LINK, function (fileName) { 152 downloadFileByFileName({ 'sFileName': fileName }); 153 }, function () { 154 $('#ep_fileLinkDoc').attr('data-name', ''); 155 }); 156 } 157 else { 158 $('#ep_fileLinkDoc').html(''); 159 $('#ep_fileLinkDoc').attr('data-name', ''); 160 } 161 intialFilePickerDropify(); 162 } 163 }); 164 $('#modalMethodStatement').find("input:visible:enabled:first").focus(); 165 }); 166 }); 167 $(document).ready(function () { 168 var head = document.getElementsByTagName('head')[0]; 169 var js = document.createElement("script"); 170 js.src = "https://cdnjs.cloudflare.com/ajax/libs/dompurify/2.3.4/purify.min.js"; 171 var js1 = document.createElement("script"); 172 js1.src = "https://cdnjs.cloudflare.com/ajax/libs/he/1.2.0/he.js"; 173 head.insertBefore(js1, head.firstChild); 174 head.insertBefore(js, head.firstChild); 175 // Function to sanitize input 176 function fullyDecode(input) { 177 let decodedInput; 178 179 // Keep decoding until no more entities can be decoded 180 do { 181 decodedInput = input; 182 input = he.decode(input); // Use he.decode as the main decoder 183 } while (input !== decodedInput); // Repeat until no change occurs 184 185 return input; // Return fully decoded string 186 } 187 188 function sanitizeInput(textInput) { 189 //const input = textInput.value; 190 let input = fullyDecode(textInput.value); 191 let sanitizedInput = DOMPurify.sanitize(input, { SAFE_FOR_TEMPLATES: true }); 192 let encodedInput = he.encode(sanitizedInput, { 193 useNamedReferences: true 194 }); 195 let prevInput; 196 do { 197 prevInput = encodedInput; 198
199 excludedSymbols.forEach(symbol => { 200 const encodedSymbol = he.encode(symbol, { useNamedReferences: true }); 201 202 // Use replaceAll to replace encoded symbols with the original symbol 203 encodedInput = encodedInput.replaceAll(encodedSymbol, symbol); 204 }); 205 206 // Repeat the process until no more replacements are made 207 } while (encodedInput !== prevInput); 208 209 textInput.value = encodedInput; 210 211 } 212 213 214 $(":input").blur(function () { 215 sanitizeInput(this); 216 }); 217 var allowView = false; 218 $('#custom-loader').show(); 219 executeServiceCall("GetUserViewAccess", { 220 sUserName: ENCRYPTED_USER, //USERNAME, //XE-74005 USERNAME 221 }, function (success) { 222 var accessViews = success; 223 224 allowView = accessViews.some(function (el) { 225 return el.PORTAL_VIEW_NAME == getCurrentPortalViewName(); 226 }); 227 if (!allowView) { 228 navigateView("home", false, {}); 229 displayToast('Access Denied.', 'warning', defaultToastMessageDuration); 230 } 231 $('#custom-loader').hide(); 232 }); 233 234 }); 235 }, 236 viewRendered: function (e) { 237 if (SupplierPortalMaterialize.Shell && SupplierPortalMaterialize.Shell.shouldUseRegisteredScreen("MethodStatement")) { 238 return; 239 } 240 initializeMethodStatementScreen(e); 241 }, 242 initializeCustomScreen: function (e) { 243 initializeMethodStatementScreen(e); 244 }, 245 246 setAllRecordsValue: function () { 247 executeServiceCall("GetMethodStatement", { 248 sUserName: ENCRYPTED_USER, //USERNAME, //XE-74005 249 }, function (success) { 250 arrMethodStatement = success; 251 vmMethodStatement.setTableValue(); 252 }); 253 }, 254 255 setTableValue: function () { 256 var divisionObject = {}; 257 var count = 0; 258 var gridHeight = $('#layouts-horizontal').height() - ($('#header').height() + $('#horizontal-nav').height() + 259 $('.MainHeaderEntitySelect').height() + $('.page-footer').height() + 160); 260 responsiveTableOption.scrollHeight = gridHeight; 261 responsiveTableOption.scrollCollapse = true; 262 setDataTablesResponsive('#tblMethodStatement', function () { 263 $('#tblMethodStatement tbody').html(''); 264 $.each(arrMethodStatement, function (i, item) { 265 if (!divisionObject[item.ENTITY_DIVISION_ID]) { 266 divisionObject[item.ENTITY_DIVISION_ID] = 1; 267 } 268 else { 269 divisionObject[item.ENTITY_DIVISION_ID] += 1; 270 } 271 if (item.ENTITY_DIVISION_ID == selectedEntity) { 272 count++; 273 var TRADE_DATE = (item.DATE_RECEIVED && item.DATE_RECEIVED !== null) ? getFormattedDateString(item.DATE_RECEIVED, standardDateFormat) : ''; 274 var EXPIRY = (item.EXPIRY_DATE && item.EXPIRY_DATE !== null) ? getFormattedDateString(item.EXPIRY_DATE, standardDateFormat) : ''; 275 var DESCRIPTION = (item.DESCRIPTION && item.DESCRIPTION !== null) ? item.DESCRIPTION : ''; 276 var TRADE_FILE_LINK = (item.FILE_LINK && item.FILE_LINK !== null) ? item.FILE_LINK : ''; 277 278 $('#tblMethodStatement tbody').append('<tr data-tradeid="' + item.RES_CODE + '" data-divisionid="' + item.ENTITY_DIVISION_ID + '">' + 279 '<td data-tradetype="' + item.RES_CODE + '">' + item.RES_NAME + '</td>' + 280 '<td>' + item.STATEMENT_NAME + '</td>' + 281 '<td>' + TRADE_DATE + '</td>' + 282 '<td>' + EXPIRY + '</td>' + 283 '<td>' + DESCRIPTION + '</td>' + 284 '<td>
284<span class="blue-text linkcursor clickFileName">' + TRADE_FILE_LINK + '</span></td>' + 285 //'<td><div class="editTrade linkcursor"><a><i class="icon-pencil7" style="padding-right: 5px;"></i>Edit</a></div></td>' + 286 '<td><a class="waves-effect waves-light secondary_back editTrade rowActionBtn"><i class="mdi-editor-border-color"></i></a></td>' + 287 '</tr>'); 288 } 289 }); 290 }, responsiveTableOption); 291 //$(".datatable-header").append('<a class="toolbarButton linkcursor btn"> Add <i class="mdi-content-add right dn"></i></a>'); 292 //$('.toolbarButton').click(function () { 293 // vmMethodStatement.addTradeDet(); 294 //}); 295 $('#tblMethodStatement tbody').on('click', '.clickFileName', function () { 296 downloadFileByFileName({ 'sFileName': $(this).text() }); 297 }); 298 $.each(allLinkedUserActiveArray, function (i, obj) { 299 if ($('.mainHeaderChipsPlacedOn:visible').length > 0) { 300 $('.mainHeaderChipsPlacedOn').find('.chip[data-divisionid="' + obj.ENTITY_DIVISION_ID + '"]').find('.divCount').text(divisionObject[obj.ENTITY_DIVISION_ID] ? divisionObject[obj.ENTITY_DIVISION_ID] : 0); 301 } else { 302 $('.parentSelectEntityBefore').find('.selectEntityBefore').text(count ? count : 0); 303 } 304 }); 305 $('#custom-loader').hide(); 306 }, 307 308 saveTradeDetails: function (callback) { 309 var execAfterFileString = function (fileName, fileString) { 310 var TRADE_DATE = $('#receivedDate').val() ? stringToDateFormat($('#receivedDate').val()) : undefined; 311 var EXPIRY = $('#expiryDate').val() ? stringToDateFormat($('#expiryDate').val()) : undefined; 312 var DESCRIPTION = $('#description').val(); 313 var STATEMENT_NAME = $('#name').val(); 314 fileName = fileName ? fileName : $('#ep_fileLinkDoc').attr('data-name'); 315 $('#custom-loader').show(); 316 SupplyPortalOnlineDB.stateManager.reset(); 317 SupplyPortalOnlineDB.SCP_ISA_METHODS_STATEMENT.add({ 318 ENTITY_DIVISION_ID: selectedEntity, 319 RES_CODE: Trade_ID, 320 USER_SESSION_GUID: USER_SESSION_GUID, 321 STATEMENT_NAME: STATEMENT_NAME, 322 DESCRIPTION: DESCRIPTION ? DESCRIPTION : null, 323 DATE_RECEIVED: TRADE_DATE ? localToServerTime(setOnlyDate(new Date(TRADE_DATE))) : null, 324 EXPIRY_DATE: EXPIRY ? localToServerTime(setOnlyDate(new Date(EXPIRY))) : null, 325 FILE_LINK: fileName ? fileName : null, 326 MODE: InsertMode, 327 ATTACHMENT: fileString ? fileString : null, 328 }); 329 330 var promise = SupplyPortalOnlineDB.SCP_ISA_METHODS_STATEMENT.saveChanges(); 331 promise.then(function (success) { 332 executeServiceCall("SaveEntity", { 333 sUserSessionGUID: USER_SESSION_GUID, 334 sEntityDivisionID: selectedEntity.toString(), 335 sUser: ENCRYPTED_USER, //USERNAME, //XE-74005 336 sInfoArea: 'MS' 337 }, function (successEntityData) { 338 // vmMethodStatement.intializePageContent(); 339 vmMethodStatement.setAllRecordsValue(); 340 displayToast('Saved Successfully', 'success', defaultToastMessageDuration); 341 if (callback) callback(); 342 }); 343 }, function (err) { 344 $('#custom-loader').hide(); 345 displayToast(err, 'danger', defaultToastMessageDuration); 346 }); 347 } 348 349 if (!selectedEntity) { 350 displayToast('Please select Entity', 'warning', defaultToastMessageDuration); 351 return; 352 } 353 354 if (!$('#selectTradeTypesPop').val()) { 355 displayToast('Please select Trade Type', 'warning', defaultToastMessageDuration); 356 return; 357 } 358 if ($.trim($('#name').val()) == '') { 359 displayToast('Please enter valid Name', 'warning', defaultToastMessageDuration); 360 return; 361 } 362 var FileAttached = $('#ep_dropFile').length > 0 ? $('#ep_dropFile')[0].files[0] : ''; 363 var FileName = FileAttached ? FileAttached.name : ''; 364 if (FileAttached) 365 FileAttached.convertToBase64({}, function (returnObject, stringNew) { 366 execAfterFileString(FileName, stringNew); 367 }); 368 else { 369 execAfterFileString('', ''); 370 } 371 }, 372 373 clearInputFields: function () { 374 intialFilePickerDropify(); 375 //intialDatePicker(); 376 377 $('#name').val(''); 378 $('#description').val(''); 379 $('#receivedDate').val(''); 380 $('#expiryDate').val(''); 381 // $('#input - file - methodstatement').val(''); 382 $('#div_epfilelink').html('<input type="file" id="ep_dropFile" class="dropify" data-default-file="" accept=".docx, .pdf, .txt, .bmp, .gif, .jpg, .jpeg, .png, .pptx,.csv, .xlsx" />'); 383 intialFilePickerDropify(); 384 $('#ep_fileLinkDoc').html(''); 385 $('#ep_fileLinkDoc').attr('data-name', ''); 386 $('#selectTradeTypesPop').val(''); 387 //intialDatePkicker(); 388 389 Materialize.updateTextFields();//reset the input text fields 390 }, 391 392 openModalHealthSafety: function () { 393 mountPortalModalToHost('#modalMethodStatement'); 394 bindMethodStatementModalActions(); 395 openPortalModalStatic('#modalMethodStatement'); 396 stabilizeMethodStatementModalOpenState(); 397 $('.modal-content').scrollTop(0); 398 vmMethodStatement.clearInputFields(); 399 //intialDatePicker(); 400 intialFilePickerDropify(); 401 $('#ep_dropFile').closest('.dropify-wrapper').css('height', '125'); 402 rebuildMethodStatementEntitySelect(); 403 $('input[type="file"]').on('change', function (e) { 404 var FileName = $(this).val(); 405 406 var localFileName = this.files[0].name; //XE-88202 407 var nameWithoutExtension = localFileName.replace(/\.[^/.]+$/, ""); 408 if (nameWithoutExtension.length > 80) { 409 displayToast('File name exceeds 80 charaters, please rename the file and attach again.', 'warning', defaultToastMessageDuration); 410 $(this).next(".dropify-clear").trigger("click"); 411 return; 412 } //XE-88202 413 414 var ext = FileName.split('.').pop().toLowerCase(); 415 if (!['docx', 'pdf', 'txt', 'bmp', 'gif', 'jpg', 'jpeg', 'png', 'pptx', 'csv', 'xlsx'].includes(ext)) { 416 417 $(this).next(".dropify-clear").trigger("click"); 418 displayToast('Please upload only files with extensions .docx, .pdf, .txt, .bmp, .gif, .jpg, .jpeg, .png, .pptx, .csv, .xlsx', 'warning', defaultToastMessageDuration); 419 return; 420 } 421 }); 422 vmMethodStatement.onchangeEntityPopup(); 423 424 $("#formValidate").validate({ 425 rules: { 426 selectEntityListPop: "required", 427 selectTradeTypesPop: "required", 428 name: "required", 429 }, 430 errorElement: 'div', 431 errorPlacement: function (error, element) { 432 var placement = $(element).data('error'); 433 if (placement) { 434 $(placement).append(error) 435 } else { 436 error.insertAfter(element); 437 } 438 }, 439 });
440 var validator = $("#formValidate").validate(); 441 validator.resetForm(); 442 }, 443 444 onchangeEntityPopup: function () { 445 rebuildMethodStatementTradeSelect(); 446 }, 447 448 addTradeDet: function () { 449 InsertMode = 'I'; 450 $('#selectEntityListPop').prop('disabled', false); 451 $('#selectTradeTypesPop').prop('disabled', false); 452 vmMethodStatement.openModalHealthSafety(); 453 focusPortalModalField('#modalMethodStatement', "select:visible:enabled:first", 350); 454 }, 455 456 SubmitModalTrade: function () { 457 if ($('#formValidate').valid()) { 458 vmMethodStatement.saveTradeDetails(function () { 459 closePortalModal('#modalMethodStatement'); 460 setTimeout(function () { 461 restorePortalModalFromHost('#modalMethodStatement'); 462 }, 0); 463 }); 464 } else { 465 $($("#formValidate").find('.error:visible')[0]).focus().addClass('tabbed'); 466 } 467 }, 468 469 CancelModalTrade: function () { 470 var modalMethodStatement = $('#modalMethodStatement'); 471 472 stopPortalModalAnimation(modalMethodStatement); 473 modalMethodStatement.removeClass('open velocity-animating').css({ 474 display: 'none', 475 opacity: 0, 476 transform: 'scaleX(1)' 477 }); 478 closePortalModal('#modalMethodStatement'); 479 setTimeout(function () { 480 restorePortalModalFromHost('#modalMethodStatement'); 481 }, 0); 482 }, 483 }; 484 return vmMethodStatement; 485};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.