sync
This commit is contained in:
		| @@ -83,7 +83,7 @@ define(['common'], function (Common) { | ||||
|             tb.append(tr); | ||||
|             tr.append('<td class="label">' + GetTextByKey("P_IPT_NAME_COLON", "Name:") + '<span class="redasterisk">*</span></td>'); | ||||
|             namecontrol = $('<input type="text" maxlength="100"/>'); | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(namecontrol, _this.question); | ||||
|             }); | ||||
| @@ -93,7 +93,7 @@ define(['common'], function (Common) { | ||||
|             tb.append(tr); | ||||
|             tr.append('<td class="label">' + GetTextByKey("P_IPT_DISPLAYTEXT_COLON", "Display Text:") + '<span  class="redasterisk">*</span></td>'); | ||||
|             displaytextcontrol = $('<input type="text" maxlength="1000" />'); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(displaytextcontrol, _this.question); | ||||
|             }); | ||||
| @@ -187,7 +187,7 @@ define(['common'], function (Common) { | ||||
|             tb.append(tr); | ||||
|             var optext = $('<input type="text" style="width:240px;margin-left:5px;"/>'); | ||||
|             this.dialog_text = optext; | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(optext, _this.question); | ||||
|             }); | ||||
|   | ||||
| @@ -12,6 +12,7 @@ define(['common'], function (Common) { | ||||
|     var namecontrol = undefined; | ||||
|     var displaytextcontrol = undefined; | ||||
|     var notescontrol = undefined; | ||||
|     var displayonreportcontrol = undefined; | ||||
|     s.prototype.createContent = function () { | ||||
|         var _this = this; | ||||
|         editable = true; | ||||
| @@ -22,7 +23,7 @@ define(['common'], function (Common) { | ||||
|  | ||||
|             var func = $('<div class="function_title"></div>'); | ||||
|             if (sectiontype == 0) { | ||||
|                 var btn = $('<span class="sbutton iconsave">' + GetTextByKey("P_IPT_SAVE","Save") + '</span>').click(function () { | ||||
|                 var btn = $('<span class="sbutton iconsave">' + GetTextByKey("P_IPT_SAVE", "Save") + '</span>').click(function () { | ||||
|                     saveData(0); | ||||
|                 }); | ||||
|                 func.append(btn); | ||||
| @@ -82,12 +83,18 @@ define(['common'], function (Common) { | ||||
|             tb.append(tr); | ||||
|             tr.append('<td class="label" style="vertical-align:middle;">' + GetTextByKey("P_IPT_DISPLAYTEXT_COLON", "Display Text:") + '<span class="redasterisk">*</span></td>'); | ||||
|             displaytextcontrol = $('<input type="text" maxlength="200"  autocomplete="off"/>'); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(displaytextcontrol, _this.section); | ||||
|             }); | ||||
|             tr.append($('<td></td>').append(displaytextcontrol).append(addiText)); | ||||
|  | ||||
|             tr = $('<tr></tr>'); | ||||
|             tb.append(tr); | ||||
|             tr.append('<td class="label">' + GetTextByKey("P_IPT_DISPLAYONREPORT_COLON", "Display on Report:") + '</td>'); | ||||
|             displayonreportcontrol = $('<input type="checkbox" />'); | ||||
|             tr.append($('<td></td>').append(displayonreportcontrol)); | ||||
|  | ||||
|             tr = $('<tr></tr>'); | ||||
|             tb.append(tr); | ||||
|             tr.append('<td class="label">' + GetTextByKey("P_IPT_NOTES_COLON", "Notes:") + '</td>'); | ||||
| @@ -103,6 +110,10 @@ define(['common'], function (Common) { | ||||
|                 namecontrol.val(section.Name).data("texts", section.LocalNames); | ||||
|                 displaytextcontrol.val(section.DisplayText).data("texts", section.LocalDisplayTexts); | ||||
|                 notescontrol.val(section.Notes); | ||||
|                 displayonreportcontrol.attr('checked', section.DisplayOnReport); | ||||
|             } | ||||
|             else { | ||||
|                 displayonreportcontrol.attr('checked', true); | ||||
|             } | ||||
|         } | ||||
|  | ||||
| @@ -110,13 +121,15 @@ define(['common'], function (Common) { | ||||
|             namecontrol.prop('disabled', true); | ||||
|             displaytextcontrol.prop('disabled', true); | ||||
|             notescontrol.prop('disabled', true); | ||||
|             displayonreportcontrol.prop('disabled', true); | ||||
|         } | ||||
|  | ||||
|         function getData() { | ||||
|             var item = { | ||||
|                 'Name': namecontrol.val(), | ||||
|                 'DisplayText': displaytextcontrol.val(), | ||||
|                 'Notes': notescontrol.val() | ||||
|                 'Notes': notescontrol.val(), | ||||
|                 'DisplayOnReport': displayonreportcontrol.prop('checked') | ||||
|             }; | ||||
|             var texts = namecontrol.data("texts"); | ||||
|             if (texts) { | ||||
| @@ -129,17 +142,17 @@ define(['common'], function (Common) { | ||||
|             var alerttitle; | ||||
|             if (_this.section) { | ||||
|                 item.Id = _this.section.Id; | ||||
|                 alerttitle = GetTextByKey("P_IPT_EDITSECTION","Edit Section"); | ||||
|                 alerttitle = GetTextByKey("P_IPT_EDITSECTION", "Edit Section"); | ||||
|             } else { | ||||
|                 alerttitle = GetTextByKey("P_IPT_ADDSECTION","Add Section"); | ||||
|                 alerttitle = GetTextByKey("P_IPT_ADDSECTION", "Add Section"); | ||||
|             } | ||||
|  | ||||
|             if (!item.Name || item.Name.length == 0) { | ||||
|                 showAlert(GetTextByKey("P_IPT_NAMENOTBEEMPTY",'Name cannot be empty.'), alerttitle); | ||||
|                 showAlert(GetTextByKey("P_IPT_NAMENOTBEEMPTY", 'Name cannot be empty.'), alerttitle); | ||||
|                 return false; | ||||
|             } | ||||
|             if (!item.DisplayText || item.DisplayText.length == 0) { | ||||
|                 showAlert(GetTextByKey("P_IPT_DISPLAYTEXTNOTBEEMPTY",'Display Text cannot be empty.'), alerttitle); | ||||
|                 showAlert(GetTextByKey("P_IPT_DISPLAYTEXTNOTBEEMPTY", 'Display Text cannot be empty.'), alerttitle); | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
| @@ -162,7 +175,7 @@ define(['common'], function (Common) { | ||||
|                         _this.section = { 'Id': data[0] }; | ||||
|                     } | ||||
|                     if (exit == 0) { | ||||
|                         showAlert(GetTextByKey("P_IPT_SAVSUCCESSFULLY",'Saved successfully.'), alerttitle); | ||||
|                         showAlert(GetTextByKey("P_IPT_SAVSUCCESSFULLY", 'Saved successfully.'), alerttitle); | ||||
|                         _this.datasaved = true; | ||||
|                     } | ||||
|                     if (exit == 1) { | ||||
| @@ -171,7 +184,7 @@ define(['common'], function (Common) { | ||||
|                     } | ||||
|                 } | ||||
|             }, function (err) { | ||||
|                     showAlert(GetTextByKey("P_IPT_FAILEDTOSAVESECTION",'Failed to save Section.'), alerttitle); | ||||
|                 showAlert(GetTextByKey("P_IPT_FAILEDTOSAVESECTION", 'Failed to save Section.'), alerttitle); | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|   | ||||
							
								
								
									
										451
									
								
								Site/Inspection/js/modules/sections/conditional.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										451
									
								
								Site/Inspection/js/modules/sections/conditional.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,451 @@ | ||||
| define([], function () { | ||||
|     var allowConditionQuestions = [3, 4, 5, 8, 9, 11, 12, 19]; | ||||
|     var dropdownType = 8; | ||||
|     var bannedLookupSources = [2, 3]; | ||||
|     var fuelRecordsType = 15; | ||||
|     var numberQuestionTypes = [3, 4, 11, 12]; | ||||
|     var integerQuestionTypes = [4]; | ||||
|     var dropQuestionTypes = [5, 8, 9, 19]; | ||||
|     var numberSubTypes = [8, 10, 11, 12]; | ||||
|     var integerSubTypes = [10]; | ||||
|     var dropSubTypes = [9]; | ||||
|  | ||||
|     var selectorChanged = function (id) { | ||||
|         var c = this.conditional; | ||||
|         c.QuestionId = id; | ||||
|         if (['-', 'or', 'and'].includes(id)) { | ||||
|             this.addbutton.show(); | ||||
|             this.span.hide(); | ||||
|             this.selector.css('width', 80); | ||||
|         } else { | ||||
|             c.SubItems = []; | ||||
|             this.addbutton.hide(); | ||||
|             this.span.show(); | ||||
|             this.selector.css('width', 150); | ||||
|             var pagemodule = this.wrapper.pagemodule; | ||||
|             var question; | ||||
|             for (var i = 0; i < pagemodule.sectionmodules.length; i++) { | ||||
|                 var section = pagemodule.sectionmodules[i]; | ||||
|                 for (var j = 0; j < section.questionmodules.length; j++) { | ||||
|                     var q = section.questionmodules[j].question; | ||||
|                     if (q.Id == id) { | ||||
|                         question = q; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|             if (question == null) { | ||||
|                 return; | ||||
|             } | ||||
|             this.question = question; | ||||
|             var qtype = Number(question.QuestionType); | ||||
|             var stype = Number(question.SubType); | ||||
|             var isnumber = numberQuestionTypes.includes(qtype); | ||||
|             var isdrop = dropQuestionTypes.includes(qtype); | ||||
|             isnumber |= qtype == fuelRecordsType && numberSubTypes.includes(stype); | ||||
|             isdrop |= qtype == fuelRecordsType && dropSubTypes.includes(stype); | ||||
|             var operator = this.operator; | ||||
|             if (isnumber) { | ||||
|                 operator.empty().attr('data-vtype', '0').append( | ||||
|                     '<option value="eq">=</option>', | ||||
|                     '<option value="noteq"><></option>', | ||||
|                     '<option value="gt">></option>', | ||||
|                     '<option value="gteq">>=</option>', | ||||
|                     '<option value="lt"><</option>', | ||||
|                     '<option value="lteq"><=</option>', | ||||
|                     $('<option value="between"></option>').text(GetTextByKey('P_CDH_BETWEEN', 'Between')) | ||||
|                 ); | ||||
|                 if (c.Operator?.length > 0 && c.Operator !== 'in') { | ||||
|                     operator.val(c.Operator).trigger('change'); | ||||
|                 } else { | ||||
|                     operator.val(c.Operator = 'gt').trigger('change'); | ||||
|                 } | ||||
|             } | ||||
|             if (isdrop) { | ||||
|                 operator.empty().attr('data-vtype', '1').append( | ||||
|                     '<option value="eq">=</option>', | ||||
|                     '<option value="noteq"><></option>', | ||||
|                     $('<option value="in"></option>').text(GetTextByKey('P_CDH_IN', 'In')) | ||||
|                 ); | ||||
|                 var op = c.Operator; | ||||
|                 if (['eq', 'noteq', 'in'].includes(op)) { | ||||
|                     operator.val(op).trigger('change'); | ||||
|                 } else { | ||||
|                     operator.val(c.Operator = op = 'eq').trigger('change'); | ||||
|                 } | ||||
|                 if (['eq', 'noteq'].includes(op) && (question.SelectItems?.length > 0 || question.QuestionType == 19)) { | ||||
|                     var valueDrop = this.valueDrop; | ||||
|                     if (question.QuestionType == 19) { | ||||
|                         valueDrop.empty().append( | ||||
|                             $('<option value="In Use"></option>').text(GetTextByKey('P_MA_INUSE', 'In Use')), | ||||
|                             $('<option value="Available"></option>').text(GetTextByKey('P_MA_AVAILABLE', 'Available')), | ||||
|                             $('<option value="Standby"></option>').text(GetTextByKey('P_MA_STANDBY', 'Standby')), | ||||
|                             $('<option value="Down"></option>').text(GetTextByKey('P_MA_DOWN', 'Down')) | ||||
|                         ); | ||||
|                         var r = String(c.Value); | ||||
|                         if (['In Use', 'Available', 'Standby', 'Down'].includes(r)) { | ||||
|                             valueDrop.val(r); | ||||
|                         } else { | ||||
|                             c.Value = 'In Use'; | ||||
|                         } | ||||
|                     } else { | ||||
|                         valueDrop.empty().append( | ||||
|                             ...question.SelectItems.map(function (it) { | ||||
|                                 return $('<option></option>').val(it.Text).text(it.Text); | ||||
|                             }) | ||||
|                         ); | ||||
|                         var r = String(c.Value); | ||||
|                         if (question.SelectItems.map(function (it) { return it.Text }).includes(r)) { | ||||
|                             valueDrop.val(r); | ||||
|                         } else { | ||||
|                             var i0 = question.SelectItems[0]; | ||||
|                             c.Value = i0.Text; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         if (typeof this.wrapper.onchanged === 'function') { | ||||
|             this.wrapper.onchanged(id); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     var onAdded = function () { | ||||
|         var conditional = this.conditional; | ||||
|         if (this.selector.val() == '-') { | ||||
|             this.selector.val('or'); | ||||
|             conditional.QuestionId = 'or'; | ||||
|         } | ||||
|         var c = { SubItems: [] }; | ||||
|         conditional.SubItems.push(c); | ||||
|         var item = new conditionalTree(this.wrapper, c); | ||||
|         var items = this.children; | ||||
|         items.push(item); | ||||
|         item.ondelete = function () { | ||||
|             var i = items.indexOf(this); | ||||
|             if (i >= 0) { | ||||
|                 items.splice(i, 1); | ||||
|             } | ||||
|             i = conditional.SubItems.indexOf(this.conditional); | ||||
|             if (i >= 0) { | ||||
|                 conditional.SubItems.splice(i, 1); | ||||
|             } | ||||
|             this.tree.remove(); | ||||
|         }; | ||||
|         this.container.append(item.tree); | ||||
|         item.refresh(true); | ||||
|     }; | ||||
|  | ||||
|     var onOperatorChanged = function (op, type) { | ||||
|         this.conditional.Operator = op; | ||||
|         if (type == '1') { | ||||
|             this.value2.hide(); | ||||
|             // drop | ||||
|             if (['eq', 'noteq'].includes(op) && (this.question.SelectItems?.length > 0 || this.question.QuestionType == 19)) { | ||||
|                 this.value1.hide(); | ||||
|                 this.valueDrop.show(); | ||||
|             } else { | ||||
|                 this.value1.show(); | ||||
|                 this.valueDrop.hide(); | ||||
|             } | ||||
|         } else { | ||||
|             this.valueDrop.hide(); | ||||
|             this.value1.show(); | ||||
|             if (op == 'between') { | ||||
|                 this.value2.show(); | ||||
|             } else { | ||||
|                 this.value2.hide(); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     var conditionalTree = function (obj, c, root) { | ||||
|         this.wrapper = obj; | ||||
|         this.conditional = c; | ||||
|         this.children = []; | ||||
|         this.isroot = root; | ||||
|         var This = this; | ||||
|         var tree = $('<div></div>').addClass(root ? 'conditional-item-root' : 'conditional-item'); | ||||
|         var selector = $('<select style="width: 80px; height: 26px; border: 1px solid #a9a9a9; margin-left: 6px" class="question-input"></select>') | ||||
|             .on('change', function () { selectorChanged.call(This, this.value) }); | ||||
|         if (root) { | ||||
|             selector.append('<option selected value="-">--</option>'); | ||||
|         } | ||||
|         selector.append( | ||||
|             $('<option selected value="or"></option>').text(GetTextByKey('P_CDH_OR', 'OR')), | ||||
|             $('<option value="and"></option>').text(GetTextByKey('P_CDH_AND', 'AND')) | ||||
|         ); | ||||
|         tree.append(selector); | ||||
|         this.tree = tree; | ||||
|         this.selector = selector; | ||||
|  | ||||
|         var addbutton = $('<span class="spanbtn iconadd" style="font-size: 14px"></span>'); | ||||
|         addbutton.on('click', onAdded.bind(this)); | ||||
|         tree.append(addbutton); | ||||
|         this.addbutton = addbutton; | ||||
|  | ||||
|         var span = $('<span style="display: none"></span>'); | ||||
|         var operator = $('<select style="width: 80px; height: 26px; border: 1px solid #a9a9a9; margin-left: 4px" class="question-input"></select>') | ||||
|             .on('change', function () { onOperatorChanged.call(This, this.value, $(this).attr('data-vtype')) }); | ||||
|         var value1 = $('<input type="text" class="question-input" maxlength="200" autocomplete="off" style="width: 130px; box-sizing: border-box; height: 26px"></input>') | ||||
|             .on('change', function () { c.Value = this.value }); | ||||
|         var value2 = $('<input type="text" class="question-input" maxlength="200" autocomplete="off" style="display: none; width: 130px; margin-left: 4px; box-sizing: border-box; height: 26px"></input>') | ||||
|             .on('change', function () { c.Value1 = this.value }); | ||||
|         var valueDrop = $('<select class="question-input" style="display: none; height: 26px; width: 130px; border: 1px solid #a9a9a9"></select>') | ||||
|             .on('change', function () { c.Value = this.value }); | ||||
|         span.append(operator, $('<span style="margin-left: 4px"></span>').append(value1, value2, valueDrop)); | ||||
|         tree.append(span); | ||||
|         this.span = span; | ||||
|         this.operator = operator; | ||||
|         this.value1 = value1; | ||||
|         this.value2 = value2; | ||||
|         this.valueDrop = valueDrop; | ||||
|  | ||||
|         if (!root) { | ||||
|             var removebutton = $('<span class="spanbtn icondelete" style="font-size: 14px"></span>'); | ||||
|             removebutton.on('click', function () { | ||||
|                 if (typeof This.ondelete === 'function') { | ||||
|                     This.ondelete(); | ||||
|                 } | ||||
|             }); | ||||
|             tree.append(removebutton); | ||||
|         } | ||||
|  | ||||
|         var container = $('<div style="padding-left: 20px; overflow-y: hidden"></div>'); | ||||
|         tree.append(container); | ||||
|         this.container = container; | ||||
|     }; | ||||
|  | ||||
|     conditionalTree.prototype.fill = function () { | ||||
|         var conditional = this.conditional; | ||||
|         this.selector.val(conditional.QuestionId).trigger('change'); | ||||
|         this.operator.val(conditional.Operator).trigger('change'); | ||||
|         this.value1.val(conditional.Value); | ||||
|         this.value2.val(conditional.Value1); | ||||
|         this.valueDrop.val(conditional.Value); | ||||
|  | ||||
|         var container = this.container; | ||||
|         container.empty(); | ||||
|         var items = []; | ||||
|         this.children = items; | ||||
|         if (conditional.SubItems?.length > 0) { | ||||
|             for (var i = 0; i < conditional.SubItems.length; i++) { | ||||
|                 var c = conditional.SubItems[i]; | ||||
|                 var item = new conditionalTree(this.wrapper, c); | ||||
|                 items.push(item); | ||||
|                 item.ondelete = function () { | ||||
|                     var i = items.indexOf(this); | ||||
|                     if (i >= 0) { | ||||
|                         items.splice(i, 1); | ||||
|                     } | ||||
|                     i = conditional.SubItems.indexOf(this.conditional); | ||||
|                     if (i >= 0) { | ||||
|                         conditional.SubItems.splice(i, 1); | ||||
|                     } | ||||
|                     this.tree.remove(); | ||||
|                 }; | ||||
|                 container.append(item.tree); | ||||
|                 item.refresh(true); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     conditionalTree.prototype.refresh = function (force) { | ||||
|         if (!force && this.wrapper.initialized) { | ||||
|             return; | ||||
|         } | ||||
|         this.wrapper.initialized = true; | ||||
|         var idIndex = this.wrapper.module.idIndex; | ||||
|         var secs = this.wrapper.pagemodule.sectionmodules.map(function (s) { | ||||
|             var qs = s.questionmodules.filter(function (q) { | ||||
|                 return ( | ||||
|                     allowConditionQuestions.includes(Number(q.question.QuestionType)) || | ||||
|                     (q.question.QuestionType == fuelRecordsType && numberSubTypes.concat(dropSubTypes).includes(Number(q.question.SubType))) | ||||
|                 ) && | ||||
|                     idIndex > q.idIndex && | ||||
|                     (q.question.QuestionType != dropdownType || !bannedLookupSources.includes(Number(q.question.LookupSource))) | ||||
|             }); | ||||
|             return qs.length > 0 && $('<optgroup></optgroup>').attr('label', s.section.DisplayText || s.section.Name).append( | ||||
|                 ...qs.map(function (q) { | ||||
|                     return $('<option></option>').val(q.question.Id).text(`#${q.idIndex} - ${q.txtDisplayText?.val() || q.question.DisplayText || q.question.Name}`); | ||||
|                 }) | ||||
|             ); | ||||
|         }).filter(function (s) { return s }); | ||||
|         this.selector.children('optgroup').remove(); | ||||
|         this.selector.append(...secs); | ||||
|  | ||||
|         // fill selected | ||||
|         if (this.conditional.QuestionId == null) { | ||||
|             if (this.isroot) { | ||||
|                 this.conditional.QuestionId = '-'; | ||||
|             } else if (secs.length > 0) { | ||||
|                 var f = secs[0].children('option')?.[0]; | ||||
|                 if (f != null) { | ||||
|                     this.conditional.QuestionId = f.value; | ||||
|                 } | ||||
|             } | ||||
|             if (this.conditional.QuestionId == null) { | ||||
|                 this.conditional.QuestionId = 'or'; | ||||
|             } | ||||
|             this.selector.val(this.conditional.QuestionId).trigger('change'); | ||||
|         } else if (this.conditional.QuestionId?.length > 0) { | ||||
|             setTimeout(this.fill.bind(this), 10); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     var conditionalWrapper = function (module, key, pagemodule) { | ||||
|         this.module = module; | ||||
|         this.key = key; | ||||
|         this.pagemodule = pagemodule; | ||||
|         var conditional = module.conditional; | ||||
|         if (conditional == null) { | ||||
|             conditional = module[key].Conditional; | ||||
|         } | ||||
|         if (conditional == null) { | ||||
|             conditional = { SubItems: [] }; | ||||
|         } | ||||
|         module.conditional = conditional; | ||||
|         var root = new conditionalTree(this, conditional, true); | ||||
|         this.root = root; | ||||
|     }; | ||||
|  | ||||
|     conditionalWrapper.prototype.refresh = function () { | ||||
|         this.root.refresh(); | ||||
|     }; | ||||
|  | ||||
|     Object.defineProperty(conditionalWrapper.prototype, 'tree', { | ||||
|         get: function () { | ||||
|             return this.root.tree; | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     conditionalWrapper.prototype.init = function () { | ||||
|         var idIndex = this.module.idIndex; | ||||
|         var array = this.pagemodule.sectionmodules.reduce(function (array, s) { | ||||
|             return array.concat(s.questionmodules.filter(function (q) { | ||||
|                 return ( | ||||
|                     allowConditionQuestions.includes(Number(q.question.QuestionType)) || | ||||
|                     (q.question.QuestionType == fuelRecordsType && numberSubTypes.concat(dropSubTypes).includes(Number(q.question.SubType))) | ||||
|                 ) && | ||||
|                     idIndex > q.idIndex && | ||||
|                     (q.question.QuestionType != dropdownType || !bannedLookupSources.includes(Number(q.question.LookupSource))) | ||||
|             })); | ||||
|         }, []); | ||||
|         return array.length > 0; | ||||
|     }; | ||||
|  | ||||
|     conditionalWrapper.prototype.getConditional = function (nocheck, alerttitle) { | ||||
|         var module = this.module; | ||||
|         var conditional = module.conditional; | ||||
|         if (conditional != null) { | ||||
|             var questionTitle = '#' + module.idIndex + ' - ' + module[this.key].DisplayText + '\n\n'; | ||||
|             var questions = this.pagemodule.sectionmodules.reduce(function (array, s) { | ||||
|                 return array.concat(s.questionmodules.map(function (q) { return q })); | ||||
|             }, []); | ||||
|             var checkConditional = function (c) { | ||||
|                 if (c.QuestionId == null || c.QuestionId == '-') { | ||||
|                     if (c.SubItems?.length > 0) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_MUSTBEORAND', 'If there are child nodes, the root must be "OR" or "AND".'), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     return 'null'; | ||||
|                 } else if (c.QuestionId == 'or' || c.QuestionId == 'and') { | ||||
|                     if (c.SubItems == null || c.SubItems.length == 0) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_NOSUBITEMS', 'When the parent node is "OR" or "AND", the child node cannot be empty.'), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     for (var i = c.SubItems.length - 1; i >= 0; i--) { | ||||
|                         var sub = c.SubItems[i]; | ||||
|                         var result = checkConditional(sub); | ||||
|                         if (result === false) { | ||||
|                             return false; | ||||
|                         } else if (result === 'null') { | ||||
|                             c.SubItems.splice(i, 1); | ||||
|                         } | ||||
|                     } | ||||
|                     if (c.SubItems.length === 0) { | ||||
|                         return 'null'; | ||||
|                     } | ||||
|                 } else { | ||||
|                     var qmodule = questions.find(function (q) { return q.question.Id == c.QuestionId }); | ||||
|                     var q = qmodule?.question; | ||||
|                     if (q == null) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_NOTFOUNDQUESTION', 'Could not find the specified question: {name}.').replace('{name}', c.QuestionId), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     var qname = q.DisplayText || q.Name; | ||||
|                     if (c.Operator == null || c.Operator.length == 0) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_INVALIDOPERATOR', 'Invalid operator of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     if (c.Value == null || c.Value.length == 0) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_VALUEREQUIRED', 'The conditional value is required of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     if (c.Operator == 'between' && (c.Value1 == null || c.Value1.length == 0)) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_VALUE2REQUIRED', 'If the operator is "Between", both of the values are required of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                         return false; | ||||
|                     } | ||||
|                     // validate question index | ||||
|                     if (qmodule.idIndex > module.idIndex) { | ||||
|                         showAlert(questionTitle + GetTextByKey('P_CDH_INVALIDQUESTION', 'You can only set a previous question to be a conditional one: {name}.').replace('{name}', qname), alerttitle); | ||||
|                         return false; | ||||
|                         return 'null'; | ||||
|                     } | ||||
|                     // validate question value | ||||
|                     var qtype = Number(q.QuestionType); | ||||
|                     var stype = Number(q.SubType); | ||||
|                     var isnumber = numberQuestionTypes.includes(qtype); | ||||
|                     var isdrop = dropQuestionTypes.includes(qtype); | ||||
|                     isnumber |= qtype == fuelRecordsType && numberSubTypes.includes(stype); | ||||
|                     isdrop |= qtype == fuelRecordsType && dropSubTypes.includes(stype); | ||||
|                     if (isnumber) { | ||||
|                         var nvalue = Number(c.Value); | ||||
|                         var n2value = Number(c.Value1); | ||||
|                         if (isNaN(nvalue)) { | ||||
|                             showAlert(questionTitle + GetTextByKey('P_CDH_ISVALUENAN', 'Invalid number of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                             return false; | ||||
|                         } | ||||
|                         if (c.Operator == 'between' && isNaN(n2value)) { | ||||
|                             showAlert(questionTitle + GetTextByKey('P_CDH_ISVALUE2NAN', 'Invalid end number of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                             return false; | ||||
|                         } | ||||
|                         if (integerQuestionTypes.includes(qtype) || (qtype == fuelRecordsType && integerSubTypes.includes(stype))) { | ||||
|                             // integer | ||||
|                             if (Math.floor(nvalue) != nvalue) { | ||||
|                                 showAlert(questionTitle + GetTextByKey('P_CDH_ISVALUENOTINTEGER', 'Invalid integer of question: {name}.').replace('{name}', q.DisplayText || q.Name), alerttitle); | ||||
|                                 return false; | ||||
|                             } | ||||
|                             if (c.Operator == 'between' && Math.floor(n2value) != n2value) { | ||||
|                                 showAlert(questionTitle + GetTextByKey('P_CDH_ISVALUE2NOTINTEGER', 'Invalid end integer of question: {name}.').replace('{name}', q.DisplayText || q.Name), alerttitle); | ||||
|                                 return false; | ||||
|                             } | ||||
|                         } | ||||
|                         if (c.Operator == 'between' && n2value < nvalue) { | ||||
|                             showAlert(questionTitle + GetTextByKey('P_CDH_INVALIDVALUERANGE', 'The end number must be greater than or equal to the start number of question: {name}.').replace('{name}', qname), alerttitle); | ||||
|                             return false; | ||||
|                         } | ||||
|                     } else if (!isdrop) { | ||||
|                         //showAlert(questionTitle + 'The question type is not supported: ' + qname + '.', alerttitle); | ||||
|                         //return false; | ||||
|                         return 'null'; | ||||
|                     } | ||||
|                 } | ||||
|             }; | ||||
|             if (nocheck) { | ||||
|                 if (conditional != null && conditional.QuestionId == null && conditional.SubItems?.length == 0) { | ||||
|                     return null; | ||||
|                 } | ||||
|                 return conditional; | ||||
|             } else { | ||||
|                 var result = checkConditional(conditional); | ||||
|                 if (result === false) { | ||||
|                     return false; | ||||
|                 } | ||||
|                 return result === 'null' ? null : conditional; | ||||
|             } | ||||
|         } | ||||
|         return null; | ||||
|     }; | ||||
|  | ||||
|     return conditionalWrapper; | ||||
| }) | ||||
| @@ -48,7 +48,7 @@ | ||||
|         tb.append(tr); | ||||
|         var optext = $('<input type="text" class="form-control" style="width:226px;margin-left:5px;"/>'); | ||||
|         this.dialog_text = optext; | ||||
|         var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|         var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|         addiText.click(function () { | ||||
|             Common.createMultiTextDialog(optext); | ||||
|         }); | ||||
|   | ||||
| @@ -1,4 +1,10 @@ | ||||
| define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'modules/templates/picture'], function (AddQuestion, Option, Common, Picture) { | ||||
| define(['modules/sections/addquestion', 'modules/sections/option', 'modules/sections/conditional', 'common', 'modules/templates/picture'], function (AddQuestion, Option, ConditionalTree, Common, Picture) { | ||||
|     var allowConditionQuestions = [3, 4, 5, 8, 9, 11, 12, 19]; | ||||
|     var dropdownType = 8; | ||||
|     var bannedLookupSources = [2, 3]; | ||||
|     var fuelRecordsType = 15; | ||||
|     var allowConditionSubTypes = [8, 9, 10, 11, 12]; | ||||
|  | ||||
|     var q = function (sm, question, index) { | ||||
|         this.sectionmodule = sm; | ||||
|         this.section = sm.section; | ||||
| @@ -6,6 +12,15 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|         this.holder = null; | ||||
|         this.questionholder = null; | ||||
|         this.index = index; | ||||
|         // calc id index | ||||
|         var idIndex = index + 1; | ||||
|         if (sm.pagemodule != null) { | ||||
|             var ss = sm.pagemodule.page.Sections; | ||||
|             for (var i = 0; i < sm.index; i++) { | ||||
|                 idIndex += ss[i].Questions.length; | ||||
|             } | ||||
|         } | ||||
|         this.idIndex = idIndex; | ||||
|  | ||||
|         this.txtName = null; | ||||
|         this.txtDisplayText = null; | ||||
| @@ -26,8 +41,10 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|         this.txtBarCodeValidate = null; | ||||
|  | ||||
|         this.optionholder = undefined; | ||||
|         this.conditionholder = undefined; | ||||
|         this.optiondiv = undefined; | ||||
|         this.btnoption = undefined; | ||||
|         this.btncondition = undefined; | ||||
|         this.optiontr = undefined; | ||||
|         this.optiontd = undefined; | ||||
|         this.multipleselectdiv = null; | ||||
| @@ -46,25 +63,22 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|  | ||||
|     q.prototype.createContent = function () { | ||||
|         var _this = this; | ||||
|         if (sectiontype === 0) { | ||||
|             if (!_this.question.IssueId || _this.question.IssueId == "") | ||||
|                 editable = true; | ||||
|             else | ||||
|                 editable = false; | ||||
|         } | ||||
|  | ||||
|         var holder = $('<div class="questionitem"></div>'); | ||||
|         _this.holder = holder; | ||||
|         var qholder = $('<div class="question-holder"></div>');//question holder | ||||
|         holder.append(qholder); | ||||
|         _this.questionholder = qholder; | ||||
|         var cholder = $('<div style="display: none"></div>');   // conditional hierarchy holder | ||||
|         holder.append(cholder); | ||||
|         _this.conditionholder = cholder; | ||||
|         var oholder = $('<div style="display:none;"></div>');//option holder | ||||
|         holder.append(oholder); | ||||
|         _this.optionholder = oholder; | ||||
|  | ||||
|         if (this.index % 2 == 1) | ||||
|             qholder.addClass('holder-even'); | ||||
|         var drag = $('<div class="question-icon" style="width:30px;"  title="' + GetTextByKey("P_IPT_XXX", "Move Question") + '"><em class="spanbtn iconmove rowdrag"></em></div>'); | ||||
|         var drag = $('<div class="question-icon" style="width:30px;"  title="' + GetTextByKey("P_IPT_MOVEQUESTION", "Move Question") + '"><em class="spanbtn iconmove rowdrag"></em></div>'); | ||||
|         qholder.append(drag); | ||||
|         if (!_this.section.IsLink && sectiontype == 1) { | ||||
|             drag.attr('draggable', true); | ||||
| @@ -107,15 +121,30 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             drag.hide(); | ||||
|  | ||||
|         qholder.append('<div class="question-icon" style="width:30px;"><em class="fa"></em></div>'); | ||||
|  | ||||
|         // index | ||||
|         qholder.append('<div class="question-cell question-index" style="width: 30px; text-align: right">#' + String(this.idIndex) + '</div>'); | ||||
|  | ||||
|         _this.txtName = $('<input type="text" class="question-input"  maxlength="100" autocomplete="off" style="width:146px;" />'); | ||||
|         var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|         var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|         addiText.click(function () { | ||||
|             Common.createMultiTextDialog(_this.txtName, _this.question); | ||||
|         }); | ||||
|         qholder.append($('<div class="question-cell question-name" style="width: 190px;padding-left:10px;"></div>').append(this.txtName).append(addiText)); | ||||
|         qholder.append($('<div class="question-cell question-name" style="width: 190px;padding-left:15px;"></div>').append(this.txtName).append(addiText)); | ||||
|  | ||||
|         _this.txtDisplayText = $('<input type="text" class="question-input"  maxlength="200" autocomplete="off" style="width:236px;" />'); | ||||
|         addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|         if (_this.sectionmodule.pagemodule != null) { | ||||
|             _this.txtDisplayText.on('change', function () { | ||||
|                 if (( | ||||
|                     allowConditionQuestions.includes(_this.question.QuestionType) || | ||||
|                     (_this.question.QuestionType === fuelRecordsType && allowConditionSubTypes.includes(_this.question.SubType)) | ||||
|                 ) && | ||||
|                     (q.question.QuestionType != dropdownType || !bannedLookupSources.includes(Number(q.question.LookupSource)))) { | ||||
|                     _this.sectionmodule.pagemodule.refreshIdIndex(); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|         addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|         addiText.click(function () { | ||||
|             Common.createMultiTextDialog(_this.txtDisplayText, _this.question); | ||||
|         }); | ||||
| @@ -130,7 +159,10 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|  | ||||
|         //this.selQuestionType<70><65>createQuestionTypeCtrl<72>и<EFBFBD>ֵ | ||||
|         var qt = createQuestionTypeCtrl().css('width', 140); | ||||
|         qholder.append($('<div class="question-cell question-type" style="width: 408px"></div>').append(qt)); | ||||
|         qholder.append($('<div class="question-cell question-type" style="width: 450px"></div>').append(qt)); | ||||
|         if (_this.sectionmodule.pagemodule != null) { | ||||
|             createConditionHierarchy(); | ||||
|         } | ||||
|         createOptions(); | ||||
|  | ||||
|         _this.chkIsRequired = $('<input type="checkbox" />'); | ||||
| @@ -208,13 +240,37 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             tr.append(td); | ||||
|             _this.selQuestionType = createQuestionType().addClass('question-input'); | ||||
|             td.append(_this.selQuestionType); | ||||
|             _this.selQuestionType.change(function () { | ||||
|             _this.selQuestionType.on('change', function () { | ||||
|                 _this.questionTypeChange(true); | ||||
|                 if (_this.sectionmodule.pagemodule != null && | ||||
|                     (allowConditionQuestions.includes(_this.question.QuestionType) || | ||||
|                         (_this.question.QuestionType === fuelRecordsType && allowConditionSubTypes.includes(_this.question.SubType)))) { | ||||
|                     _this.sectionmodule.pagemodule.refreshIdIndex(); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|             if (_this.sectionmodule.pagemodule != null) { | ||||
|                 td = $('<td></td>'); | ||||
|                 tr.append(td); | ||||
|                 _this.btncondition = $('<span class="spanbtn iconconditional" style="font-size: 12px" title="' + GetTextByKey("P_IPT_CONDITIONALHIERARCHY", "Conditional Hierarchy") + '"></span>'); | ||||
|                 td.append(_this.btncondition); | ||||
|                 _this.btncondition.click(function () { | ||||
|                     var icon = $(this); | ||||
|                     if (icon.hasClass('iconbold')) { | ||||
|                         icon.removeClass('iconbold'); | ||||
|                         _this.conditionholder.hide(); | ||||
|                     } | ||||
|                     else { | ||||
|                         icon.addClass('iconbold'); | ||||
|                         _this.conditionalTree.refresh(); | ||||
|                         _this.conditionholder.show(); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|             td = $('<td></td>'); | ||||
|             tr.append(td); | ||||
|             _this.btnoption = $('<span class="spanbtn iconangleleft" style="font-size:18px;" title="' + GetTextByKey("P_IPT_XXX","Display Options") + '"></span>'); | ||||
|             _this.btnoption = $('<span class="spanbtn iconangleleft" style="font-size:18px;" title="' + GetTextByKey("P_IPT_DISPLAYOPTIONS", "Display Options") + '"></span>'); | ||||
|             td.append(_this.btnoption); | ||||
|             _this.btnoption.click(function () { | ||||
|                 var icon = $(this); | ||||
| @@ -257,21 +313,21 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             }); | ||||
|             td.append(_this.txtTransactionDate); | ||||
|  | ||||
|             _this.selState = createState().addClass('question-input').css({ 'width': 116, 'margin-left': '3px' }); | ||||
|             _this.selState = createState().addClass('question-input').css({ 'width': 110, 'margin-left': '3px' }); | ||||
|             _this.selState.hide(); | ||||
|             _this.selState.change(function () { | ||||
|                 _this.stateChange(true); | ||||
|             }); | ||||
|             td.append(_this.selState); | ||||
|  | ||||
|             _this.selFuelType = createFuelType().addClass('question-input').css({ 'width': 116, 'margin-left': '3px' }); | ||||
|             _this.selFuelType = createFuelType().addClass('question-input').css({ 'width': 110, 'margin-left': '3px' }); | ||||
|             _this.selFuelType.hide(); | ||||
|             _this.selFuelType.change(function () { | ||||
|                 _this.fuelTypeChange(true); | ||||
|             }); | ||||
|             td.append(_this.selFuelType); | ||||
|  | ||||
|             _this.selDistributedBy = createDistributedBy().addClass('question-input').css({ 'width': 116, 'margin-left': '3px' }); | ||||
|             _this.selDistributedBy = createDistributedBy().addClass('question-input').css({ 'width': 110, 'margin-left': '3px' }); | ||||
|             _this.selDistributedBy.hide(); | ||||
|             _this.selDistributedBy.change(function () { | ||||
|                 _this.distributedByChange(true); | ||||
| @@ -318,6 +374,23 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             return tb; | ||||
|         } | ||||
|  | ||||
|         function createConditionHierarchy() { | ||||
|             var div = $('<div style="width:680px;margin-left:540px;padding-left:5px;padding-bottom:5px; border: 1px solid #a8a8a8;line-height:32px;"></div>'); | ||||
|             _this.conditionholder.append(div); | ||||
|  | ||||
|             div.append($('<span style="font-weight: bold; margin-right: 5px"></span>').text(GetTextByKey('P_IPT_CONDITIONHIERARCHY', 'Condition Hierarchy'))); | ||||
|             var root = new ConditionalTree(_this, 'question', _this.sectionmodule.pagemodule); | ||||
|             root.onchanged = function (id) { | ||||
|                 if (id === '-') { | ||||
|                     _this.btncondition.removeClass('iconexists'); | ||||
|                 } else { | ||||
|                     _this.btncondition.addClass('iconexists'); | ||||
|                 } | ||||
|             }; | ||||
|             _this.conditionalTree = root; | ||||
|             div.append(root.tree); | ||||
|         } | ||||
|  | ||||
|         function createOptions() { | ||||
|             _this.optiondiv = $('<div style="width:680px;margin-left:540px;padding-left:5px;padding-bottom:5px; border: 1px solid #a8a8a8;line-height:32px;"></div>'); | ||||
|             _this.optionholder.append(_this.optiondiv); | ||||
| @@ -364,8 +437,8 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             items.push({ 'Key': 16, "Value": GetTextByKey("P_IPT_QT_BARCODE", "Bar Code") }); | ||||
|             items.push({ 'Key': 17, "Value": GetTextByKey("P_IPT_QT_BARCODEVALIDATE", "Bar Code Validate") }); | ||||
|             items.push({ 'Key': 18, "Value": GetTextByKey("P_IPT_QT_FUELUSED", "Fuel Used") }); | ||||
|             items.push({ 'Key': 19, "Value": GetTextByKey("P_IPT_QT_XXX", "Asset Status") }); | ||||
|             var sel = $('<select style="width:140px; height:26px;"></select>'); | ||||
|             items.push({ 'Key': 19, "Value": GetTextByKey("P_IPT_QT_ASSETSTATUS", "Asset Status") }); | ||||
|             var sel = $('<select style="width:110px; height:26px;"></select>'); | ||||
|             for (var i = 0; i < items.length; i++) { | ||||
|                 var item = items[i]; | ||||
|                 sel.append('<option value="' + item.Key + '">' + item.Value + '</option>'); | ||||
| @@ -392,7 +465,7 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             items.push({ 'Key': 14, "Value": GetTextByKey("P_IPT_ST_NOTES", "Notes") }); | ||||
|             items.push({ 'Key': 15, "Value": GetTextByKey("P_IPT_ST_PICTURE", "Picture") }); | ||||
|             items.push({ 'Key': 16, "Value": GetTextByKey("P_IPT_ST_DISTRIBUTEDBY", "Distributed By") }); | ||||
|             var sel = $('<select style="width:125px; height:26px;"></select>'); | ||||
|             var sel = $('<select style="width:110px; height:26px;"></select>'); | ||||
|             for (var i = 0; i < items.length; i++) { | ||||
|                 var item = items[i]; | ||||
|                 sel.append('<option value="' + item.Key + '">' + item.Value + '</option>'); | ||||
| @@ -405,7 +478,7 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             items.push({ 'Key': "", "Value": "" }); | ||||
|             items.push({ 'Key': "0", "Value": GetTextByKey("P_FR_FUELINGSTATION", "Fueling Station") }); | ||||
|             items.push({ 'Key': "1", "Value": GetTextByKey("P_FR_FUELINGASSET", "Fueling Asset") }); | ||||
|             var sel = $('<select style="width:125px; height:26px;"></select>'); | ||||
|             var sel = $('<select style="width:110px; height:26px;"></select>'); | ||||
|             for (var i = 0; i < items.length; i++) { | ||||
|                 var item = items[i]; | ||||
|                 sel.append('<option value="' + item.Key + '">' + item.Value + '</option>'); | ||||
| @@ -665,6 +738,8 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             _this.optionholder.find('table').remove(); | ||||
|             _this.optionmodules = []; | ||||
|         } | ||||
|         else if (type == "5") | ||||
|             _this.additemspan.hide(); | ||||
|         else { | ||||
|             _this.additemspan.show(); | ||||
|         } | ||||
| @@ -762,6 +837,14 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             this.question = question; | ||||
|         } | ||||
|  | ||||
|         if (this.btncondition != null) { | ||||
|             if (question.Conditional != null) { | ||||
|                 this.btncondition.addClass('iconexists'); | ||||
|             } else { | ||||
|                 this.btncondition.removeClass('iconexists'); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         this.txtName.val(question.Name).data("texts", question.LocalNames); | ||||
|         this.txtDisplayText.val(question.DisplayText).data("texts", question.LocalDisplayTexts); | ||||
|         this.selQuestionType.val(question.QuestionType); | ||||
| @@ -881,12 +964,18 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|         //        } | ||||
|         //    } | ||||
|         //} | ||||
|  | ||||
|         var conditional = this.conditionalTree?.getConditional(nocheck, alerttitle); | ||||
|         if (conditional === false) { | ||||
|             return false; | ||||
|         } | ||||
|         question.Conditional = conditional; | ||||
|         return question; | ||||
|     }; | ||||
|     q.prototype.delete = function () { | ||||
|         var _this = this; | ||||
|         showConfirm(GetTextByKey("P_IPT_AREYOUSUREYOUWANTTODELETETHISQUESTION", 'Are you sure you want to delete this question?'), GetTextByKey("P_IPT_DELETEQUESTION", "Delete Question"), function () { | ||||
|             if (!_this.question.Id) { | ||||
|             if (_this.question._isadd) { | ||||
|                 _this.holder.remove(); | ||||
|                 return; | ||||
|             } | ||||
| @@ -894,8 +983,9 @@ define(['modules/sections/addquestion', 'modules/sections/option', 'common', 'mo | ||||
|             inspectionrequest("DeleteGlobalQuestion", p, function (data) { | ||||
|                 if (data !== 'OK') | ||||
|                     showAlert(data, GetTextByKey("P_IPT_DELETEQUESTION", "Delete Question")); | ||||
|                 else if (_this.sectionmodule && typeof _this.sectionmodule.refresh === "function") | ||||
|                 else if (_this.sectionmodule && typeof _this.sectionmodule.refresh === "function") { | ||||
|                     _this.sectionmodule.refresh(); | ||||
|                 } | ||||
|             }, function (err) { | ||||
|                 showAlert(GetTextByKey("P_IPT_FAILEDTODELETEQUESTION", 'Failed to delete question.'), GetTextByKey("P_IPT_DELETEQUESTION", "Delete Question")); | ||||
|             }); | ||||
|   | ||||
| @@ -1,14 +1,32 @@ | ||||
| define(['modules/sections/question', 'modules/sections/addsection', 'modules/sections/addquestion', 'common', 'modules/templates/picture'] | ||||
|     , function (Question, AddSection, AddQuestion, Common, Picture) { | ||||
|         var s = function (section, gsm, pm) { | ||||
| define(['modules/sections/question', 'modules/sections/addsection', 'modules/sections/addquestion', 'modules/sections/conditional', 'common', 'modules/templates/picture'] | ||||
|     , function (Question, AddSection, AddQuestion, ConditionalTree, Common, Picture) { | ||||
|         var s = function (section, gsm, pm, index) { | ||||
|             this.section = section; | ||||
|             this.content = null; | ||||
|             this.holder = null; | ||||
|             this.gsmodule = gsm; | ||||
|             this.pagemodule = pm; | ||||
|             if (pm != null) { | ||||
|                 if (isNaN(index)) { | ||||
|                     index = pm.page.Sections.length - 1; | ||||
|                 } | ||||
|                 this.index = index; | ||||
|                 // calc id index | ||||
|                 var idIndex = 1; | ||||
|                 var ss = pm.page.Sections; | ||||
|                 for (var i = 0; i < index; i++) { | ||||
|                     idIndex += ss[i].Questions.length; | ||||
|                 } | ||||
|                 this.idIndex = idIndex; | ||||
|             } else { | ||||
|                 this.index = index; | ||||
|             } | ||||
|  | ||||
|             this.txtName = null; | ||||
|             this.txtDisplayText = null; | ||||
|             this.displayonreportcontrol = null; | ||||
|             this.conditionholder = null; | ||||
|             this.btncondition = null; | ||||
|  | ||||
|             if (!this.section.Questions) | ||||
|                 this.section.Questions = []; | ||||
| @@ -22,23 +40,25 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|         s.prototype.createContent = function () { | ||||
|             var content = $('<div></div>'); | ||||
|             this.content = content; | ||||
|             var div = $('<div class="sectionitem"></div>'); | ||||
|             var holder = $('<div class="section-holder"></div>'); | ||||
|             content.append(holder); | ||||
|             var _this = this; | ||||
|             if (sectiontype === 0) { | ||||
|                 if (!_this.section.IssueId || _this.section.IssueId == "") | ||||
|                     editable = true; | ||||
|                 else | ||||
|                     editable = false; | ||||
|             div.append(holder); | ||||
|             var isGlobal = this.pagemodule == null; | ||||
|             if (!isGlobal) { | ||||
|                 var cholder = $('<div style="display: none"></div>');   // conditional hierarchy holder | ||||
|                 div.append(cholder); | ||||
|                 this.conditionholder = cholder; | ||||
|             } | ||||
|             content.append(div); | ||||
|             var _this = this; | ||||
|  | ||||
|             if (sectiontype === 0) { | ||||
|                 var package = $('<div class="question-icon section-packages" style="width:30px;padding-left:10px;"><em class="fa icon-menu icon-packages"></em></div>'); | ||||
|                 var package = $('<div class="question-icon section-packages" style="width:30px;"><em class="spanbtn icon-packages" style="font-size:16px;"></em></div>'); | ||||
|                 holder.append(package); | ||||
|             } | ||||
|  | ||||
|             if (sectiontype == 1) { | ||||
|                 var drag = $('<div class="question-icon" style="width:30px;" title="' + GetTextByKey("P_IPT_XXX","Move Section") + '"><em class="spanbtn iconmove rowdrag"></em></div>'); | ||||
|                 var drag = $('<div class="question-icon" style="width:30px;" title="' + GetTextByKey("P_IPT_MOVESECTION", "Move Section") + '"><em class="spanbtn iconmove rowdrag"></em></div>'); | ||||
|                 holder.append(drag); | ||||
|                 if (sectiontype == 1) { | ||||
|                     drag.attr('draggable', true); | ||||
| @@ -102,21 +122,21 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|                 } | ||||
|             }); | ||||
|             holder.append(btnsection); | ||||
|             this.txtName = $('<input type="text" class="section-input"  maxlength="100" autocomplete="off" style="width:156px;" />'); | ||||
|             this.txtName = $('<input type="text" class="section-input"  maxlength="100" autocomplete="off" style="width:191px;" />'); | ||||
|             this.txtName.change(function () { | ||||
|                 _this.onsave(); | ||||
|             }); | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             var addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(_this.txtName, _this.section); | ||||
|             }); | ||||
|             holder.append($('<div class="section-cell section-name" style="width:200px;flex-grow:0;"></div>').append(this.txtName).append(addiText)); | ||||
|             holder.append($('<div class="section-cell section-name" style="width:235px;flex-grow:0;"></div>').append(this.txtName).append(addiText)); | ||||
|  | ||||
|             this.txtDisplayText = $('<input type="text" class="section-input"  maxlength="200" autocomplete="off" style="width:236px;" />'); | ||||
|             this.txtDisplayText.change(function () { | ||||
|                 _this.onsave(); | ||||
|             }); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_XXX", "Language Selection") + '"/>'); | ||||
|             addiText = $('<span class="spanbtn iconmultitext" style="font-size:14px;" title="' + GetTextByKey("P_IPT_LANGUAGESELECTION", "Language Selection") + '"/>'); | ||||
|             addiText.click(function () { | ||||
|                 Common.createMultiTextDialog(_this.txtDisplayText, _this.section); | ||||
|             }); | ||||
| @@ -125,11 +145,55 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|                 var picturemodule = new Picture(false, _this.section, function () { _this.onsave() }); | ||||
|                 picturemodule.createContent(); | ||||
|             }); | ||||
|             holder.append($('<div class="section-cell section-display" style="width:230px;flex-grow: 1;"><span></span></div>').append(this.txtDisplayText).append(addiText).append(imgicon)); | ||||
|             if (sectiontype === 0) | ||||
|                 holder.append($('<div class="section-cell section-createdby" style="text-align:center;"><span></span></div>')); | ||||
|  | ||||
|             var funcs = $('<div class="section-cell section-func" style="width: 120px;text-align:right;padding-right:20px;"></div>'); | ||||
|             holder.append($('<div class="section-cell section-display" style="flex-grow: 0;"><span></span></div>').css('width', isGlobal ? 680 : 425).append(this.txtDisplayText).append(addiText).append(imgicon)); | ||||
|             this.displayonreportcontrol = $('<input type="checkbox" />') | ||||
|                 .attr('title', GetTextByKey("P_IPT_SECITONDISPLAYONREPORTTIPS", 'Checked indicates that the section breakout \n will appear on the final report.\n\n Unchecked indicates that the section is only \n visible during inspection completion.')); | ||||
|             this.displayonreportcontrol.change(function () { | ||||
|                 _this.onsave(); | ||||
|             }); | ||||
|  | ||||
|             if (!isGlobal) { | ||||
|                 var tb = (function () { | ||||
|                     var tb = $('<table style="line-height:unset;"></table>'); | ||||
|                     var tr = $('<tr></tr>'); | ||||
|                     tb.append(tr); | ||||
|                     var td = $('<td></td>'); | ||||
|                     tr.append(td); | ||||
|                     _this.btncondition = $('<span class="spanbtn iconconditional" style="font-size: 12px" title="' + GetTextByKey("P_IPT_CONDITIONALHIERARCHY", "Conditional Hierarchy") + '"></span>'); | ||||
|                     td.append(_this.btncondition); | ||||
|                     _this.btncondition.click(function () { | ||||
|                         var icon = $(this); | ||||
|                         if (icon.hasClass('iconbold')) { | ||||
|                             icon.removeClass('iconbold'); | ||||
|                             _this.conditionholder.hide(); | ||||
|                         } | ||||
|                         else { | ||||
|                             icon.addClass('iconbold'); | ||||
|                             _this.conditionalTree.refresh(); | ||||
|                             _this.conditionholder.show(); | ||||
|                         } | ||||
|                     }); | ||||
|                     return tb; | ||||
|                 })(); | ||||
|                 holder.append($('<div class="section-cell" style="width: 255px; flex-grow: 0"></div>').append(tb)); | ||||
|  | ||||
|                 !(function createConditionHierarchy() { | ||||
|                     var div = $('<div style="width:680px;margin-left:540px;padding-left:5px;padding-bottom:5px; border: 1px solid #a8a8a8;line-height:32px;"></div>'); | ||||
|                     _this.conditionholder.append(div); | ||||
|  | ||||
|                     div.append($('<span style="font-weight: bold; margin-right: 5px"></span>').text(GetTextByKey('P_IPT_CONDITIONHIERARCHY', 'Condition Hierarchy'))); | ||||
|                     var root = new ConditionalTree(_this, 'section', _this.pagemodule); | ||||
|                     _this.conditionalTree = root; | ||||
|                     div.append(root.tree); | ||||
|                 })(); | ||||
|             } | ||||
|  | ||||
|             holder.append($('<div class="section-cell section-displayonreport" style="width:80px;text-align:center;flex-grow:0;"></div>').append(this.displayonreportcontrol)); | ||||
|  | ||||
|             holder.append($('<div style="min-width:265px;flex-grow:1;"></div>'));//ռλ | ||||
|  | ||||
|             var funcs = $('<div class="section-cell section-func" style="width: 160px;text-align:right;padding-right:20px;"></div>'); | ||||
|             holder.append(funcs); | ||||
|  | ||||
|             //holder.find('.section-name span').click(function () { | ||||
| @@ -163,7 +227,19 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|                         //    } | ||||
|                         //    $('#right_popup1').empty().append(aq.createContent()).show(); | ||||
|                         //} | ||||
|                         var question = { QuestionType: '0', IsRequired: false, CanComment: false, IsImportant: false, SeverityLevel: 0, LookupSource: 0, SelectItems: [] }; | ||||
|                         var question = { | ||||
|                             _isadd: true, | ||||
|                             QuestionType: '0', | ||||
|                             IsRequired: false, | ||||
|                             CanComment: false, | ||||
|                             IsImportant: false, | ||||
|                             SeverityLevel: 0, | ||||
|                             LookupSource: 0, | ||||
|                             SelectItems: [] | ||||
|                         }; | ||||
|                         if (!isGlobal) { | ||||
|                             question.Id = $.generateUUID(); | ||||
|                         } | ||||
|                         _this.section.Questions.push(question); | ||||
|                         _this.addQuestionModule(question); | ||||
|                     }).attr('title', GetTextByKey("P_IPT_ADDQUESTION", 'Add Question'))); | ||||
| @@ -207,6 +283,7 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|             if (templatereadonly || !editable) { | ||||
|                 this.txtName.prop('disabled', true); | ||||
|                 this.txtDisplayText.prop('disabled', true); | ||||
|                 this.displayonreportcontrol.prop('disabled', true); | ||||
|  | ||||
|                 this.holder.find(".iconmultitext").hide(); | ||||
|                 this.holder.find(".iconimage").hide(); | ||||
| @@ -236,23 +313,29 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|         s.prototype.updateContent = function (section) { | ||||
|             if (section) { | ||||
|                 if (sectiontype === 0) { | ||||
|                     if (!section.IssueId || section.IssueId == "") { | ||||
|                     if (!section.IssueId || section.IssueId == "") | ||||
|                         this.holder.find('.section-packages em').hide(); | ||||
|                         this.holder.find('.section-createdby span').text(''); | ||||
|                     } | ||||
|                     else { | ||||
|                     else | ||||
|                         this.holder.find('.section-packages em').show(); | ||||
|                         this.holder.find('.section-createdby span').text(section.IssueName); | ||||
|                     } | ||||
|                 } | ||||
|                 this.txtName.val(section.Name).data("texts", section.LocalNames); | ||||
|                 this.txtDisplayText.val(section.DisplayText).data("texts", section.LocalDisplayTexts);; | ||||
|                 this.txtDisplayText.val(section.DisplayText).data("texts", section.LocalDisplayTexts); | ||||
|  | ||||
|                 if (this.btncondition != null) { | ||||
|                     if (section.Conditional != null) { | ||||
|                         this.btncondition.addClass('iconexists'); | ||||
|                     } else { | ||||
|                         this.btncondition.removeClass('iconexists'); | ||||
|                     } | ||||
|                 } | ||||
|                 this.displayonreportcontrol.attr('checked', section.DisplayOnReport); | ||||
|             } | ||||
|         }; | ||||
|         s.prototype.getSectionValue = function (noalert, nocheck) { | ||||
|             var section = this.section; | ||||
|             section.Name = this.txtName.val(); | ||||
|             section.DisplayText = this.txtDisplayText.val(); | ||||
|             section.DisplayOnReport = this.displayonreportcontrol.prop('checked'); | ||||
|             var alerttitle = GetTextByKey("P_IPT_SECTION", "Section"); | ||||
|             if (!nocheck) { | ||||
|                 if (!section.Name || section.Name.length == 0) { | ||||
| @@ -282,6 +365,11 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|                     section.Questions.push(q); | ||||
|                 } | ||||
|             } | ||||
|             var conditional = this.conditionalTree?.getConditional(nocheck, alerttitle); | ||||
|             if (conditional === false) { | ||||
|                 return false; | ||||
|             } | ||||
|             section.Conditional = conditional; | ||||
|             return section; | ||||
|         }; | ||||
|         s.prototype.updateQuestions = function (questions) { | ||||
| @@ -291,10 +379,11 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|             this.questionmodules = []; | ||||
|             this.content.children('.question-holder').remove(); | ||||
|             for (var i = 0; i < questions.length; i++) { | ||||
|                 this.addQuestionModule(questions[i]); | ||||
|                 this.addQuestionModule(questions[i], true); | ||||
|             } | ||||
|             this.pagemodule?.refreshIdIndex(); | ||||
|         }; | ||||
|         s.prototype.addQuestionModule = function (q) { | ||||
|         s.prototype.addQuestionModule = function (q, init) { | ||||
|             var _this = this; | ||||
|             if (this.section.IsLink) | ||||
|                 q.IsLink = true; | ||||
| @@ -305,13 +394,21 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|             qmodule.ondelete = function (qm) {//qm:question module | ||||
|                 _this.section.Questions.splice(_this.section.Questions.indexOf(qm.question), 1); | ||||
|                 _this.questionmodules.splice(_this.questionmodules.indexOf(qm), 1); | ||||
|                 _this.pagemodule?.refreshIdIndex(); | ||||
|             } | ||||
|             this.questionmodules.push(qmodule); | ||||
|             this.content.append(qmodule.createContent()); | ||||
|             if (!init) { | ||||
|                 this.pagemodule?.refreshIdIndex(); | ||||
|             } | ||||
|         }; | ||||
|         s.prototype.oncopyquestion = function (question) { | ||||
|             question = JSON.parse(JSON.stringify(question)); | ||||
|             question.Id = ""; | ||||
|             question._isadd = true; | ||||
|             if (this.pagemodule != null) { | ||||
|                 question.Id = $.generateUUID(); | ||||
|             } | ||||
|             question.Conditional = null; | ||||
|             //question.IsLink = false; | ||||
|             //question.ReferenceId = ""; | ||||
|             if (!this.section.Questions) | ||||
| @@ -366,6 +463,7 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|             if (this.section.Questions.length == 0) { | ||||
|                 this.section.Questions.push(qm.question); | ||||
|                 this.questionmodules.push(qm); | ||||
|                 this.pagemodule?.refreshIdIndex(); | ||||
|                 return; | ||||
|             } | ||||
|             var tindex = 0; | ||||
| @@ -377,6 +475,7 @@ define(['modules/sections/question', 'modules/sections/addsection', 'modules/sec | ||||
|             if (tindex >= 0) { | ||||
|                 this.section.Questions.splice(tindex, 0, qm.question); | ||||
|                 this.questionmodules.splice(tindex, 0, qm); | ||||
|                 this.pagemodule?.refreshIdIndex(); | ||||
|             } | ||||
|         }; | ||||
|         s.prototype.dragInSection = function () {//called when section dragged end at question | ||||
|   | ||||
		Reference in New Issue
	
	Block a user