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 = "
" + beginGreatEqualChild + childInfo.minChildBegin + "
" + ignore + "
" + endLessThanChild + childInfo.maxChildEnd + "
" + ignore + "
" + beginLessThanParent + data.selectedProgramBegin + "
" + ignore + "
" + endGreatThanParent + data.selectedProgramEnd + "
" + ignore + "