PageSourceSearch

https://gecs.galfar.com/SupplyChainPortal/views/MethodStatement.js?3.4.2

js galfar.com collected 2026-10-02 16:30:21 UTC 23,505 bytes, 485 lines download raw bytes

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.