Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

datepicker.component.js 29KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. var Unibase;
  2. (function (Unibase) {
  3. let Forms;
  4. (function (Forms) {
  5. let Controls;
  6. (function (Controls) {
  7. class DatePicker {
  8. constructor() {
  9. this._bizgaze_dateFormat = 'DD/MM/YYYY';
  10. this.IsTimePicker = false;
  11. this._time = false;
  12. this.propval = "";
  13. this.dtime = false;
  14. this.disableFutureDate = false;
  15. }
  16. init(formpropertyid, prop, callback) {
  17. var instance = DatePicker.Instance();
  18. let TimePicker = prop.PropertySettings.filter(t => t.ControlPropertyName == "IsTime" && t.ControlPropertyValue == "true");
  19. if (TimePicker.length > 0) {
  20. instance.IsTimePicker = true;
  21. }
  22. else {
  23. instance.IsTimePicker = false;
  24. }
  25. if (callback != null && callback != 1)
  26. callback();
  27. instance.loadControlSettings(prop.ControlJsonText, prop.FormPropertyId);
  28. var container = "control-container-" + formpropertyid;
  29. $("#" + container).find('#date_' + prop.FormPropertyId + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  30. $("#" + container).find('#date_' + prop.FormPropertyId).val(picker.startDate.format('YYYY/MM/DD'));
  31. });
  32. var currentYear = (new Date()).getFullYear();
  33. if (this._time == true) {
  34. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  35. autoUpdateInput: false,
  36. timePicker: true,
  37. timePicker24Hour: true,
  38. locale: {
  39. format: 'DD/MM/YYYY HH:mm',
  40. firstDay: 1,
  41. },
  42. singleDatePicker: true,
  43. showDropdowns: true,
  44. minYear: 1901,
  45. });
  46. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  47. $("#" + container).find('#date_' + formpropertyid).val(picker.startDate.format('DD/MM/YYYY HH:mm'));
  48. $("#" + container).find('#hfdate_' + formpropertyid).val(picker.startDate.format('YYYY/MM/DD HH:mm'));
  49. });
  50. this._time = false;
  51. }
  52. else {
  53. $("#" + container).find('#date_' + prop.FormPropertyId).daterangepicker({
  54. locale: {
  55. format: 'DD/MM/YYYY',
  56. firstDay: 1,
  57. },
  58. singleDatePicker: true,
  59. showDropdowns: true,
  60. minYear: 1901,
  61. maxDate: new Date(2050, 11, 31)
  62. }, function (start, end, label) {
  63. $("#" + container).find('#hfdate_' + prop.FormPropertyId).val(end.format('YYYY-MM-DD'));
  64. });
  65. }
  66. if (instance.propval == "") {
  67. $("#" + container).find('#date_' + prop.FormPropertyId).val('');
  68. }
  69. $(".date_" + prop.DocPropertyName).keypress(function (e) {
  70. $(".date_" + prop.DocPropertyName).attr("maxlength", "10");
  71. if (e.which != 8 && e.which != 0 && (e.which < 47 || e.which > 57)) {
  72. return false;
  73. }
  74. else {
  75. var value = $(".date_" + prop.DocPropertyName).val().toString().replace(/^(\d\d)(\d)$/g, '$1/$2').replace(/^(\d\d\/\d\d)(\d+)$/g, '$1/$2').replace(/[^\d\/]/g, '');
  76. $(".date_" + prop.DocPropertyName).val(value);
  77. }
  78. });
  79. $(".date_" + prop.DocPropertyName).focusout(function (e) {
  80. if ($(".date_" + prop.DocPropertyName).val() == "") {
  81. $('#hfdate_' + prop.FormPropertyId).val("");
  82. }
  83. });
  84. instance.loadPropertySettings(prop.PropertySettings, formpropertyid, prop.DocPropertyName);
  85. }
  86. loadControl(containerid, prop) {
  87. var regExpr = "";
  88. var ErrMsg = "";
  89. var validationlist = prop.Validations;
  90. if (validationlist != null) {
  91. for (var i = 0; i < validationlist.length; i++) {
  92. regExpr += validationlist[i].RegularExp + '||';
  93. ErrMsg += validationlist[i].ErrorMessage + '||';
  94. }
  95. }
  96. var Isrequired = prop.IsRequired != true ? 'hidden' : '';
  97. var requiredClass = prop.IsRequired != true ? '' : 'required';
  98. var reqMark = prop.IsRequired != true ? '' : '*';
  99. var CurrentStageId = $("#hf_" + $("#hfLayout_InstalledPageId").val() + "_StageId").val();
  100. if (prop.IncludedStages != null && prop.IncludedStages != "") {
  101. var StagesForRequired = prop.IncludedStages.split('|');
  102. Isrequired = StagesForRequired.find(x => x == CurrentStageId) ? '' : 'hidden';
  103. requiredClass = StagesForRequired.find(x => x == CurrentStageId) ? 'required' : '';
  104. reqMark = StagesForRequired.find(x => x == CurrentStageId) ? '*' : '';
  105. }
  106. if (prop.ExcludedStages != null && prop.ExcludedStages != "") {
  107. var ExcludedStages = prop.ExcludedStages.split('|');
  108. Isrequired = ExcludedStages.find(x => x == CurrentStageId) ? 'hidden' : '';
  109. requiredClass = ExcludedStages.find(x => x == CurrentStageId) ? '' : 'required';
  110. reqMark = ExcludedStages.find(x => x == CurrentStageId) ? '' : '*';
  111. }
  112. let ControlId = 'txt_' + prop.DocPropertyId;
  113. if (prop.IsRequired)
  114. requiredClass = 'required';
  115. let isReadOnly = '';
  116. if (!Unibase.Themes.Compact.Components.Index.Instance().desktopMode) {
  117. isReadOnly = 'readonly';
  118. }
  119. const { helpTooltipHtml, helpTextHtml, helpClass } = Unibase.Platform.Forms.Components.FormViewer.Instance().getControlHelpHtml(prop);
  120. let html = `<div class="floating-label-form-group CancelBtnFloating_${prop.UniqueId} ${helpClass}" id ="div_${prop.UniqueId}">` +
  121. '<label for="lbl" id="lbl_' + prop.ControlId + '">' + helpTooltipHtml + '<span class="label-name">' + prop.LabelName + '</span><span class="text-danger ' + Isrequired + '" id="spnIsRequired_' + prop.DocPropertyId + '"> *</span></label>' +
  122. '<div class="input-group">' +
  123. '<input type="hidden" id="hfdate_' + prop.UniqueId + '" class="value-control hfdate_' + prop.DocPropertyName + '" value=""/>' +
  124. '<input type="text" id="date_' + prop.UniqueId + '" class="form-control type-control datepicker-input hasDatepicker ' + requiredClass + ' floating-label-control txt_' + prop.UniqueId + ' date_' + prop.DocPropertyName + '" placeholder="' + prop.LabelName + " " + reqMark + '" data-placeholder="' + prop.Placeholder + '" data-label="' + prop.LabelName + " " + reqMark + '" data-regularexp="' + regExpr + '" data-validatemsg="' + ErrMsg + '"' + isReadOnly + '>' +
  125. '<span class="input-group-addon mt-10 cursor-pointer"><i class="fa fa-calendar calender_' + prop.DocPropertyName + '"></i></span>' +
  126. '<input type="hidden" id="hf_' + prop.ControlId + '" /></div>' + helpTextHtml + '</div>';
  127. $("#" + containerid).append(html);
  128. Unibase.Forms.Controls.DatePicker.Instance().loadDate(prop.UniqueId, prop);
  129. }
  130. loadControlSettings(controlsettingjson, formpropertyid) {
  131. return null;
  132. }
  133. loadDate(formpropertyid, prop) {
  134. var container = "control-container-" + formpropertyid;
  135. if (this._time == true) {
  136. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  137. autoUpdateInput: false,
  138. timePicker: true,
  139. timePicker24Hour: true,
  140. locale: {
  141. format: 'DD/MM/YYYY HH:mm',
  142. firstDay: 1,
  143. },
  144. singleDatePicker: true,
  145. showDropdowns: true,
  146. minYear: 1901,
  147. });
  148. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  149. $("#" + container).find('#date_' + formpropertyid).val(picker.startDate.format('DD/MM/YYYY HH:mm'));
  150. $("#" + container).find('#hfdate_' + formpropertyid).val(picker.startDate.format('YYYY/MM/DD HH:mm'));
  151. });
  152. this._time = false;
  153. }
  154. else {
  155. $("#" + container).find('#date_' + prop.FormPropertyId).daterangepicker({
  156. locale: {
  157. format: 'DD/MM/YYYY',
  158. firstDay: 1,
  159. },
  160. singleDatePicker: true,
  161. showDropdowns: true,
  162. minYear: 1901,
  163. }, function (start, end, label) {
  164. $("#" + container).find('#hfdate_' + prop.FormPropertyId).val(end.format('YYYY-MM-DD'));
  165. });
  166. }
  167. $(`.calender_${prop.DocPropertyName}`).click(function () {
  168. $(this).parents('.input-group').find('.datepicker-input').trigger('click');
  169. });
  170. }
  171. loadPropertySettings(propertysettings, formpropertyid, DocPropertyName) {
  172. var instance = this;
  173. var istime = false;
  174. var dateNow = new Date();
  175. var container = "control-container-" + formpropertyid;
  176. if (propertysettings != null) {
  177. for (var i = 0; i < propertysettings.length; i++) {
  178. var data = propertysettings[i];
  179. if (data.ControlPropertyName == "IsTodayDate") {
  180. if (data.ControlPropertyValue == "true") {
  181. var DateTime_Value = $("#" + container).find('#date_' + formpropertyid).val();
  182. if (DateTime_Value == "") {
  183. var maxDate;
  184. if (instance.disableFutureDate)
  185. maxDate = new Date();
  186. else
  187. maxDate = new Date(2050, 11, 31);
  188. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  189. singleDatePicker: true,
  190. showDropdowns: true,
  191. minYear: 1901,
  192. locale: {
  193. format: 'DD/MM/YYYY',
  194. firstDay: 1,
  195. },
  196. maxDate: maxDate
  197. });
  198. var todayDate = $("#" + container).find('#date_' + formpropertyid).val();
  199. var hfformat = "YYYY/MM/DD";
  200. var tdate = moment(todayDate, "DD/MM/YYYY").format("YYYY/MM/DD");
  201. $("#" + container).find('#hfdate_' + formpropertyid).val(tdate);
  202. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  203. $("#" + container).find('#date_' + formpropertyid).val(picker.startDate.format('DD/MM/YYYY'));
  204. $("#" + container).find('#hfdate_' + formpropertyid).val(picker.startDate.format('YYYY/MM/DD'));
  205. $("#" + container).find('#div_' + formpropertyid).addClass('floating-label-form-group-with-value');
  206. });
  207. }
  208. $("#" + container).find('#div_' + formpropertyid).addClass('floating-label-form-group-with-value');
  209. $("#" + container).find('#date_' + formpropertyid).keypress(function (e) {
  210. $(this).attr("maxlength", "10");
  211. if (e.which != 8 && e.which != 0 && (e.which < 47 || e.which > 57)) {
  212. return false;
  213. }
  214. else {
  215. var value = $(this).val().toString().replace(/^(\d\d)(\d)$/g, '$1/$2').replace(/^(\d\d\/\d\d)(\d+)$/g, '$1/$2').replace(/[^\d\/]/g, '');
  216. $(this).val(value);
  217. }
  218. });
  219. if (instance.dtime == false) {
  220. if (istime == true) {
  221. var DateTime_Value = $("#" + container).find('#date_' + formpropertyid).val();
  222. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  223. autoUpdateInput: false,
  224. timePicker: true,
  225. timePicker24Hour: true,
  226. singleDatePicker: true,
  227. showDropdowns: true,
  228. minYear: 1901,
  229. locale: {
  230. format: 'DD/MM/YYYY HH:mm',
  231. firstDay: 1,
  232. },
  233. });
  234. var cdate = new Date();
  235. var currentdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalTime(cdate, "DD/MM/YYYY HH:mm");
  236. $("#" + container).find('#date_' + formpropertyid).val(currentdate);
  237. var hfcdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerLocalDateTime(cdate, "YYYY/MM/DD HH:mm");
  238. $("#" + container).find('#hfdate_' + formpropertyid).val(hfcdate);
  239. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  240. $("#" + container).find('#date_' + formpropertyid).val(picker.startDate.format('DD/MM/YYYY HH:mm'));
  241. $("#" + container).find('#hfdate_' + formpropertyid).val(picker.startDate.format('YYYY/MM/DD HH:mm'));
  242. });
  243. let curren = new Date();
  244. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('show.daterangepicker', function (ev, picker) {
  245. var dateTime_New = $("#" + container).find('#date_' + formpropertyid).val();
  246. var hours = dateTime_New.toString().substring(dateTime_New.toString().indexOf(":") - 2, dateTime_New.toString().indexOf(":"));
  247. if (hours.substring(0, 1) == "0") {
  248. hours = hours.substring(1);
  249. }
  250. var minutes = dateTime_New.toString().substring(dateTime_New.toString().indexOf(":") + 1, dateTime_New.toString().indexOf(":") + 3);
  251. if (minutes.substring(0, 1) == "0") {
  252. minutes = minutes.substring(1);
  253. }
  254. $('.show-calendar').find('.hourselect option:selected').removeAttr('selected');
  255. $('.show-calendar').find('.minuteselect option:selected').removeAttr('selected');
  256. $('.hourselect option[value="' + hours + '"]').attr("selected", "selected");
  257. $('.minuteselect option[value="' + minutes + '"]').attr("selected", "selected");
  258. });
  259. }
  260. }
  261. }
  262. }
  263. if (data.ControlPropertyName == "IsTime") {
  264. if (instance.dtime == false) {
  265. if (data.ControlPropertyValue == "true") {
  266. istime = true;
  267. var DateTime_Value = $("#" + container).find('#date_' + formpropertyid).val();
  268. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  269. autoUpdateInput: false,
  270. timePicker: true,
  271. timePicker24Hour: true,
  272. singleDatePicker: true,
  273. showDropdowns: true,
  274. minYear: 1901,
  275. locale: {
  276. format: 'DD/MM/YYYY HH:mm',
  277. firstDay: 1,
  278. },
  279. });
  280. var cdate = new Date();
  281. var currentdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalTime(cdate, "DD/MM/YYYY HH:mm");
  282. $("#" + container).find('#date_' + formpropertyid).val(currentdate);
  283. var hfcdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerLocalDateTime(cdate, "YYYY/MM/DD HH:mm");
  284. $("#" + container).find('#hfdate_' + formpropertyid).val(hfcdate);
  285. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('apply.daterangepicker', function (ev, picker) {
  286. $("#" + container).find('#date_' + formpropertyid).val(picker.startDate.format('DD/MM/YYYY HH:mm'));
  287. $("#" + container).find('#hfdate_' + formpropertyid).val(picker.startDate.format('YYYY/MM/DD HH:mm'));
  288. });
  289. let curren = new Date();
  290. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').on('show.daterangepicker', function (ev, picker) {
  291. var dateTime_New = $("#" + container).find('#date_' + formpropertyid).val();
  292. var hours = dateTime_New.toString().substring(dateTime_New.toString().indexOf(":") - 2, dateTime_New.toString().indexOf(":"));
  293. if (hours.substring(0, 1) == "0") {
  294. hours = hours.substring(1);
  295. }
  296. var minutes = dateTime_New.toString().substring(dateTime_New.toString().indexOf(":") + 1, dateTime_New.toString().indexOf(":") + 3);
  297. if (minutes.substring(0, 1) == "0") {
  298. minutes = minutes.substring(1);
  299. }
  300. $('.show-calendar').find('.hourselect option:selected').removeAttr('selected');
  301. $('.show-calendar').find('.minuteselect option:selected').removeAttr('selected');
  302. $('.hourselect option[value="' + hours + '"]').attr("selected", "selected");
  303. $('.minuteselect option[value="' + minutes + '"]').attr("selected", "selected");
  304. });
  305. $(".hasDatepicker").keypress(function (e) {
  306. $(this).attr("maxlength", "19");
  307. var value = $(this).val().toString().replace(/^(\d\d\/\d\d)(\d+)$/g, '$1/$2').replace(/^(\d\d\/\d\d\/\d\d\d\d)(\d)/g, '$1 ').replace(/^(\d\d\/\d\d\/\d\d\d\d\s\d\d)(\d)/g, '$1:$2$2:');
  308. $(this).val(value);
  309. });
  310. }
  311. }
  312. }
  313. if (data.ControlPropertyName == "DisableFutureDate") {
  314. if (data.ControlPropertyValue == "true") {
  315. $("#" + container).find('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  316. singleDatePicker: true,
  317. showDropdowns: true,
  318. autoUpdateInput: false,
  319. minYear: 1901,
  320. maxDate: new Date(),
  321. locale: {
  322. format: 'DD/MM/YYYY',
  323. firstDay: 1,
  324. },
  325. }, function (start, end, label) {
  326. $("#" + container).find('#hfdate_' + formpropertyid).val(end.format('YYYY-MM-DD'));
  327. });
  328. $('#date_' + formpropertyid + '.datepicker-input').keyup(function (e) {
  329. let dateString = $(this).val();
  330. let errorMsgDiv = $(this).parents('.formValidate').find('.form-error-message').attr('id');
  331. let myDate = moment(dateString, ['DD/MM/YYYY', 'D/M/YYYY', 'DD/M/YYYY', 'D/MM/YYYY'], true);
  332. MessageHelper.Instance().hideMessage();
  333. $(this).attr('data-isValid', 'false');
  334. if (dateString.length >= 8 && dateString != "") {
  335. if (myDate.isValid() == false) {
  336. MessageHelper.Instance().showError('Enter Correct Date Format!.', errorMsgDiv);
  337. }
  338. else if (moment(dateString, 'DD/MM/YYYY').isSameOrBefore(moment().format()) == false) {
  339. MessageHelper.Instance().showError('You cannot enter a date in the future.', errorMsgDiv);
  340. }
  341. else if (moment(dateString, 'DD/MM/YYYY').isSameOrAfter('01/01/1901', 'year') == false) {
  342. MessageHelper.Instance().showError('You cannot enter a date before 1901.', errorMsgDiv);
  343. }
  344. else {
  345. MessageHelper.Instance().hideMessage();
  346. $('#hfdate_' + formpropertyid).val(moment(dateString, 'DD/MM/YYYY').format('YYYY-MM-DD'));
  347. $(this).attr('data-isValid', 'true');
  348. }
  349. }
  350. });
  351. instance.disableFutureDate = true;
  352. $('#date_' + formpropertyid + '.datepicker-input').focusout(function (e) {
  353. let isDateValid = $(this).attr('data-isValid');
  354. if (isDateValid == 'false') {
  355. $(this).val("");
  356. $('#hfdate_' + formpropertyid).val("");
  357. $(this).attr('data-isValid', 'true');
  358. }
  359. });
  360. }
  361. }
  362. }
  363. }
  364. instance.propval = "";
  365. instance.dtime = false;
  366. }
  367. bindEditFormDetails(formpropertyid, propval, DocPropertyName) {
  368. var instance = this;
  369. var format = "DD/MM/YYYY";
  370. var hfformat = "YYYY/MM/DD";
  371. var hfdate = "";
  372. if (instance.IsTimePicker) {
  373. instance.propval = moment(propval).format("DD/MM/YYYY HH:mm");
  374. hfdate = moment(propval).format("YYYY/MM/DD HH:mm");
  375. instance._time = true;
  376. $('#date_' + formpropertyid + '.datepicker-input').daterangepicker({
  377. autoUpdateInput: false,
  378. timePicker: true,
  379. timePicker24Hour: true,
  380. singleDatePicker: true,
  381. showDropdowns: true,
  382. minYear: 1901,
  383. locale: {
  384. format: 'DD/MM/YYYY HH:mm',
  385. firstDay: 1,
  386. },
  387. });
  388. instance.dtime = true;
  389. }
  390. else {
  391. instance.propval = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate1(propval, format);
  392. hfdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerLocalDate(propval, hfformat);
  393. }
  394. var formattedPropVal = Unibase.Platform.Helpers.DateTimeHelper.Instance().serverDateformat(instance.propval);
  395. if (instance.propval == "Invalid date" || formattedPropVal == "01/01/1901" || formattedPropVal == "01/01/1900" || formattedPropVal == "01/01/2001" || formattedPropVal == "01/01/0001") {
  396. instance.propval = "";
  397. }
  398. $("#hfdate_" + formpropertyid).val(hfdate);
  399. $("#date_" + formpropertyid).val(instance.propval);
  400. if ($("#date_" + formpropertyid).val() != "") {
  401. $("#div_" + formpropertyid).addClass("floating-label-form-group-with-value");
  402. }
  403. }
  404. static Instance() {
  405. if (this.instance === undefined)
  406. this.instance = new DatePicker();
  407. return this.instance;
  408. }
  409. }
  410. Controls.DatePicker = DatePicker;
  411. })(Controls = Forms.Controls || (Forms.Controls = {}));
  412. })(Forms = Unibase.Forms || (Unibase.Forms = {}));
  413. })(Unibase || (Unibase = {}));