| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- window.ignoreTips = {
- 'beyondBudgetTip' : false,
- 'dateTip' : false
- };
- window.toggleBudgetUnit = function(unit)
- {
- $('[data-name="budget"] > .has-prefix > .input-control-prefix > a').text(currencySymbol[unit]);
- $('[name="budgetUnit"]').val(unit);
- };
- var batchEditDateTips = new Array();
- /**
- * 设置计划结束时间。
- * Set plan end date.
- *
- * @access public
- * @return void
- */
- function setDate()
- {
- const delta = $('input[name=delta]:checked').val();
- computeEndDate(delta);
- }
- /**
- * 计算两个时间的天数。
- * Compute delta of two days.
- *
- * @param string date1
- * @param string date2
- * @access public
- * @return int
- */
- function computeDaysDelta(date1, date2)
- {
- date1 = zui.createDate(date1);
- date2 = zui.createDate(date2);
- delta = (date2 - date1) / (1000 * 60 * 60 * 24) + 1;
- if(isNaN(delta)) return;
- weekEnds = 0;
- for(i = 0; i < delta; i++)
- {
- if((weekend == 2 && date1.getDay() == 6) || date1.getDay() == 0) weekEnds ++;
- date1 = date1.valueOf();
- date1 += 1000 * 60 * 60 * 24;
- date1 = new Date(date1);
- }
- return delta - weekEnds;
- }
- /**
- * 计算可用工作日天数。
- * Compute work days.
- *
- * @param string currentID
- * @access public
- * @return void
- */
- window.computeWorkDays = function(e)
- {
- isBactchEdit = false;
- let currentID = typeof e == 'object' ? $(e.target).attr('id') : '';
- if(currentID)
- {
- index = currentID.replace('begins[', '');
- index = index.replace('ends[', '');
- index = index.replace(']', '');
- if(!isNaN(index)) isBactchEdit = true;
- }
- if(isBactchEdit)
- {
- beginDate = $('#begins\\[' + index + '\\]').val();
- endDate = $('#ends\\[' + index + '\\]').val();
- }
- else
- {
- beginDate = $('#begin').zui('datepicker').$.state.value;
- endDate = $('#end').zui('datepicker').$.state.value;
- var begin = zui.createDate(beginDate);
- var end = zui.createDate(endDate);
- var time = end.getTime() - begin.getTime();
- var days = String(parseInt(time / zui.TIME_DAY) + 1);
- $("#delta" + days).prop('checked', true);
- if(endDate === longTime) $("#delta999").prop('checked', true);
- }
- outOfDateTip(isBactchEdit ? index : 0);
- }
- /**
- * 计算并设置计划完成时间。
- * Compute the end date for project.
- *
- * @param int delta
- * @access public
- * @return void
- */
- function computeEndDate(delta)
- {
- let $begin = $('#begin').zui('datepicker');
- let $end = $('#end').zui('datepicker');
- let beginDate = $begin.$.state.value;
- if(!beginDate) return;
- delta = parseInt(delta);
- if(delta == 999)
- {
- $end.$.setDate('');
- $end.render({disabled: true});
- outOfDateTip();
- $('#end').addClass('hidden');
- $('#end').next().removeClass('hidden');
- return false;
- }
- $end.render({disabled: false});
- $('#days').closest('.form-row').removeClass('hidden');
- beginDate = zui.createDate(beginDate);
- if((delta == 7 || delta == 14) && (beginDate.getDay() == 1))
- {
- delta = (weekend == 2) ? (delta - 2) : (delta - 1);
- }
- $('#end').removeClass('hidden');
- $('#end').next().addClass('hidden');
- const endDate = zui.formatDate(zui.addDate(beginDate, delta - 1), 'yyyy-MM-dd');
- $end.$.setValue(endDate);
- computeWorkDays();
- }
- /**
- * If future is checked, disable budget input.
- *
- * @param object e
- * @access public
- * @return void
- */
- window.toggleBudget = function(e)
- {
- const future = e.target;
- if($(future).prop('checked'))
- {
- $('#budget').val('').attr('disabled', 'disabled');
- }
- else
- {
- $('#budget').removeAttr('disabled');
- }
- }
- /**
- * If change multiple, set delta.
- *
- * @param object e
- * @access public
- * @return void
- */
- window.toggleMultiple = function(e)
- {
- const multiple = e.target;
- $('#delta_999').closest('.radio-primary').toggle($(multiple).val() != 0);
- if($('#delta_999').prop('checked') && $(multiple).val() == 0)
- {
- $('#delta_999').prop('checked', false);
- $('#end').removeAttr('disabled').val('');
- $('#days').closest('.form-row').removeClass('hidden');
- }
- }
- /**
- * compare childlish date.
- *
- * @access public
- * @return void
- */
- function compareChildDate()
- {
- if(window.ignoreTips['dateTip']) return;
- if(page == 'create') return;
- let begin = $('#begin').zui('datepicker').$.state.value;
- let end = $('#end').zui('datepicker').$.state.value;
- let selectedProgramID = $('#parent').val();
- if($('#dateTip').length > 0) $('#dateTip').closest('.form-row').remove();
- if(end == longTime) end = LONG_TIME;
- if(end.length > 0 && begin.length > 0)
- {
- var programEnd = new Date(end);
- var programBegin = new Date(begin);
- if(typeof(programID) == 'undefined') programID = 0;
- $.get($.createLink('project', 'ajaxGetProjectFormInfo', 'objectType=program&objectID=' + programID + '&selectedProgramID=' + selectedProgramID), function(data)
- {
- var childInfo = JSON.parse(data);
- if(childInfo.maxChildEnd == '' || childInfo.minChildBegin == '') return;
- var childBegin = new Date(childInfo.minChildBegin);
- var childEnd = new Date(childInfo.maxChildEnd);
- if(programBegin <= childBegin && programEnd >= childEnd) return;
- var dateTip = '';
- if(programBegin > childBegin)
- {
- dateTip = "<tr><td></td><td colspan='2'><span id='dateTip' class='text-remind'><p>" + beginGreatEqualChild + childInfo.minChildBegin + "</p><p id='ignore' onclick='ignoreTip(this)'>" + ignore + "</p></span></td></tr>";
- }
- else if(programEnd < childEnd)
- {
- dateTip = "<tr><td></td><td colspan='2'><span id='dateTip' class='text-remind'><p>" + endLessThanChild + childInfo.maxChildEnd + "</p><p id='ignore' onclick='ignoreTip(this)'>" + ignore + "</p></span></td></tr>";
- }
- $('#dateBox').parent().parent().after(dateTip);
- $('#dateTip').parent().css('line-height', '0');
- });
- }
- }
- /**
- *The date is out of the range of the parent project set, and a prompt is given.
- *
- * @param string $currentID
- * @access public
- * @return void
- */
- function outOfDateTip(currentID)
- {
- if(window.ignoreTips['dateTip']) return;
- let begin = $('#begin').zui('datepicker').$.state.value;
- let end = $('#end').zui('datepicker').$.state.value;
- if($('#dateTip').length > 0) $('#dateTip').closest('.form-row').remove();
- if(end == longTime) end = LONG_TIME;
- if(end.length > 0 && begin.length > 0)
- {
- var selectedProgramID = $('#parent').val();
- var programEnd = new Date(end);
- var programBegin = new Date(begin);
- if(selectedProgramID == 0)
- {
- compareChildDate();
- return;
- }
- if(typeof(programID) == 'undefined') programID = 0;
- $.get($.createLink('project', 'ajaxGetProjectFormInfo', 'objectType=program&objectID=' + programID + "&selectedProgramID=" + selectedProgramID), function(data)
- {
- var dateTip = '';
- var data = JSON.parse(data);
- var parentEnd = new Date(data.selectedProgramEnd);
- var parentBegin = new Date(data.selectedProgramBegin);
- if(programBegin >= parentBegin && programEnd <= parentEnd)
- {
- compareChildDate();
- return;
- }
- if(programBegin < parentBegin)
- {
- dateTip = "<div class='form-row' id='dateTipBox'><div class='form-group'><div class='input-group'><span id='dateTip' class='text-remind'><p>" + beginLessThanParent + data.selectedProgramBegin + "</p><p id='ignore' onclick='ignoreTip(this)'>" + ignore + "</p></span></div></div></div>";
- }
- else if(programEnd > parentEnd)
- {
- dateTip = "<div class='form-row' id='dateTipBox'><div class='form-group'><div class='input-group'><span id='dateTip' class='text-remind'><p>" + endGreatThanParent + data.selectedProgramEnd + "</p><p id='ignore' onclick='ignoreTip(this)'>" + ignore + "</p></span></div></div></div>";
- }
- $('#begin').closest('.form-row').after(dateTip);
- });
- }
- }
- /**
- * Append prompt when the budget exceeds the parent project set.
- *
- * @access public
- * @return void
- */
- window.budgetOverrunTips = function(e)
- {
- if(window.ignoreTips['beyondBudgetTip']) return;
- var selectedProgramID = $('[name=parent]').zui('picker').$.state.value;
- var budget = $('#budget').val();
- if(selectedProgramID == 0)
- {
- $('#budgetTip').addClass('hidden');
- return false;
- }
- if(typeof(programID) == 'undefined') programID = 0;
- $.get($.createLink('project', 'ajaxGetProjectFormInfo', 'objectType=program&objectID=' + programID + "&selectedProgramID=" + selectedProgramID), function(data)
- {
- var data = JSON.parse(data);
- if(budget !=0 && budget !== null && budget > data.availableBudget)
- {
- let ignoreBtn = "<span id='ignore' onclick='ignoreTip(this)'>" + ignore + "</span>";
- var tip = budgetOverrun.replace('%s', currencySymbol[data.budgetUnit] + data.availableBudget) + ignoreBtn;
- $('#budgetTip').html(tip).removeClass('hidden');
- }
- });
- }
- /**
- * Make this prompt no longer appear.
- *
- * @param string $obj
- * @access public
- * @return void
- */
- window.ignoreTip = function(obj)
- {
- var parentID = obj.parentNode.id;
- $('#' + parentID).addClass('hidden');
- if(parentID == 'dateTip') window.ignoreTips['dateTip'] = true;
- if(parentID == 'beyondBudgetTip') window.ignoreTips['beyondBudgetTip'] = true;
- }
- window.onDateChange = () =>
- {
- if(window.ignoreTips['dateTip']) return;
- let programBegin = $('[name=begin]').val();
- let programEnd = $('[name=end]').val();
- let parentBegin = $('[data-name=parent]').data('parentBegin');
- let parentEnd = $('[data-name=parent]').data('parentEnd');
- const ignoreBtn = "<span id='ignore' onclick='ignoreTip(this)'>" + ignore + "</span>";
- if(programBegin && parentBegin && new Date(parentBegin) > new Date(programBegin))
- {
- $('#dateTip').html(beginLessThanParent + parentBegin + ignoreBtn).removeClass('hidden');
- }
- if(programEnd && parentEnd && new Date(parentEnd) < new Date(programEnd))
- {
- $('#dateTip').html(endGreatThanParent + parentEnd + ignoreBtn).removeClass('hidden');
- }
- };
- window.getDateMenu = function()
- {
- if(!endList) return [];
- const begin = $('input[name=begin]').val();
- if(!begin) return [];
- let endMenu = [];
- const beginDate = new Date(begin);
- for(let key in endList)
- {
- endMenu.push({'text': endList[key], 'data-set-date': zui.formatDate(new Date(beginDate.getTime() + 1000 * 60 * 60 * 24 * parseInt(key)), 'yyyy-MM-dd')});
- }
- return endMenu;
- }
|