<%@ Register TagPrefix="WpNs0" Namespace="PAC.Holidays.AddHoliday" Assembly="PAC.Holidays, Version=1.0.0.0, Culture=neutral, PublicKeyToken=07821a8e1ea7c82c"%>
<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" meta:progid="SharePoint.WebPartPage.Document" meta:webpartpageexpansion="full" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<asp:Content ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
<SharePoint:EncodedLiteral runat="server" text="<%$Resources:wss,multipages_homelink_text%>" EncodeMethod="HtmlEncode"/>
- <SharePoint:ProjectProperty Property="Title" runat="server"/>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageImage" runat="server"><img src="/_layouts/images/blank.gif" width='1' height='1' alt="" /></asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageTitleInTitleArea" runat="server">
<label class="ms-hidden">
<SharePoint:ProjectProperty Property="Title" runat="server"/></label>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderTitleAreaClass" runat="server">
<SharePoint:UIVersionedContent runat="server" UIVersion="<=3">
<ContentTemplate>
<style type="text/css">
td.ms-titleareaframe, .ms-pagetitleareaframe {
height: 10px;
}
div.ms-titleareaframe {
height: 100%;
}
.ms-pagetitleareaframe table {
background: none;
height: 10px;
}
</style> </ContentTemplate>
</SharePoint:UIVersionedContent>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderAdditionalPageHead" runat="server">
<meta name="CollaborationServer" content="SharePoint Team Web Site" />
<style type="text/css">
.s4-nothome {
display:none;
}
</style>
<script type="text/javascript">
// <![CDATA[
var navBarHelpOverrideKey = "WSSEndUser";
// ]]>
</script>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderSearchArea" runat="server">
<SharePoint:DelegateControl runat="server"
ControlId="SmallSearchInputBox"/>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderLeftActions" runat="server">
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageDescription" runat="server">
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderBodyAreaClass" runat="server">
<style type="text/css">
.ms-bodyareaframe {
padding: 0px;
}
</style>
</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
<table cellspacing="0" border="0" width="100%">
<tr class="s4-die">
<td class="ms-pagebreadcrumb">
<asp:SiteMapPath SiteMapProvider="SPContentMapProvider" id="ContentMap" SkipLinkText="" NodeStyle-CssClass="ms-sitemapdirectional" runat="server"/>
</td>
</tr>
<tr>
<td class="ms-webpartpagedescription">
<SharePoint:ProjectProperty Property="Description" runat="server"/></td>
</tr>
<tr>
<td>
<table width="100%" cellpadding="0" cellspacing="0" style="padding: 5px 10px 10px 10px;">
<tr>
<script type="text/javascript">
//Переопределение indexOf, т.к. не работает в IE 8
if (!Array.prototype.indexOf){
Array.prototype.indexOf = function(obj){
for(var i=0; i<this.length; i++){
if(this[i]==obj){
return i;
}
}
return -1;
}
}
$(document).ready(function()
{
//Получаем параметры из урла по названию
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
//Текущий пользователь логин
var UserCurrentLogin = $().SPServices.SPGetCurrentUser({
fieldName: "UserName",
debug: false
});
//Текущий пользователь
var UserCurrent = $().SPServices.SPGetCurrentUser({
fieldName: "Title",
debug: false
});
//Таблица периодов
var $periodTable = $("table[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_PeriodTable']");
//Таблица авансового периода
var $avanseTable = $("table[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_AvanseTable']");
$avanseTable.hide();
var $avanseDescription = $("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__avanseDesc']");
$avanseDescription.hide();
//Удаляем существующие строки в авансовом
var $avanseExistRows = $avanseTable.find('tr');
$avanseExistRows.each(function(i)
{
$(this).closest('tr').remove();
});
//Ошибка
var $error = $("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__error']");
//Кнопка сохранить
var $saveButton = $("<input>").attr("type", "button").val("Сохранить");
$saveButton.insertBefore($error);
//Кнопка отмена
var $cancelButton = $("<input>").attr("type", "button").val("Отмена");
$cancelButton.css("margin", "0 0 0 20px");
$cancelButton.insertBefore($error);
//Можно заполнять динамический план
var canAddDynamic = true;
$cancelButton.on("click", function() {
//Получаем сотрудника
var $fio = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_upLevelDiv']");
var $fioText = "";
if($fio.html().length > 100)
{
$fioText = $fio.find('span#content').html();
}
else
{
$fioText = $fio.html();
}
//Переходим в график
var _url = document.location.href;
//отрезаем source=
_url = _url.substring(_url.indexOf('source=') + 7);
if (_url.indexOf("user") == -1)
{
_url += "&user=" + $fioText;
}
window.location.href = _url;
});
$saveButton.hide();
//Один день в миллисекундах
var oneDay = 24*60*60*1000;
//Смотрим, есть ли в URL ID. Если есть, то это изменение и необходимо подтянуть данные сотрудника и несогласованный статический план
var _id = getParameterByName('ID');
if(_id != "")
{
//удаляем существующие строки
var $existRows = $periodTable.find('tr');
$existRows.each(function(i)
{
$(this).closest('tr').remove();
});
}
//Смотрим тип в URL
var _type = getParameterByName('type');
//Тип
var $_type = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']");
//Вид
var $_view = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__viewList']");
$_view.find("option[value='фактический']").remove();
if(_type != "")
{
$_type.val(_type);
$_view.find("option[value='динамический план']").remove();
$_view.val("фактический");
}
//Даты праздников
var excludeDays = [];
LoadUserData();
//Прячем поля
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__vacationDaysRemaining']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__approvedStaticDaysCount']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__compensatoryHoliday']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__workStart']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__twoWeaks']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isHR']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isAdmin']").closest('tr').hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isManager']").closest('tr').hide();
$("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__departmentList']").hide();
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__depID']").hide();
var isHR = false;
var isAdmin = false;
var isManager = false;
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isHR']").html() == "true")
{
isHR = true;
}
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isAdmin']").html() == "true")
{
isAdmin = true;
}
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__isManager']").html() == "true")
{
isManager = true;
}
//Новый сотрудник - вышел в этом году
var newEmploye = false;
//Для обычного сотрудника запрещаем выбор другого сотрудника
if(!isHR && !isAdmin && !isManager)
{
var $fio_ = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_upLevelDiv']");
$fio_.attr("contentEditable",false);
$("a[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_checkNames']").hide();
$("a[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_browse']").hide();
}
//При изменении типа
$_type.change(function() {
var selType = $(this).val();
//Сначала удаляем существующие строки, затем добавляем новые
var $existRows = $periodTable.find('tr');
$existRows.each(function(i)
{
$(this).closest('tr').remove();
});
$periodTable.find('tbody').append("<tr><td><input type='text' class='holiday-start-date'></td><td><input type='text' class='holiday-end-date'></td><td></td><td><span class='holidays-dayscount'></span></td></tr>");
if(selType == "командировка")
{
var staticExist = $_view.find("option[value='статический план']").length;
if(staticExist == 0)
{
$_view.append(new Option('статический план','статический план'));
}
$_view.find("option[value='динамический план']").remove();
$_view.val("фактический");
//Показываем кнопку "Добавить"
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").show();
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").next("span").show();
$avanseTable.hide();
$avanseDescription.hide();
//Удаляем существующие строки в авансовом
var $existRows = $avanseTable.find('tr');
$existRows.each(function(i)
{
$(this).closest('tr').remove();
});
}
else if(selType == "основной ежегодный")
{
if(isHR || isAdmin || isManager)
{
var dynamicExist = $_view.find("option[value='динамический план']").length;
if(dynamicExist == 0)
{
$_view.append(new Option('динамический план','динамический план'));
}
var staticExist = $_view.find("option[value='статический план']").length;
if(staticExist == 0)
{
$_view.append(new Option('статический план','статический план'));
}
}
$_view.val("статический план");
//Показываем кнопку "Добавить"
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").show();
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").next("span").show();
$avanseTable.hide();
$avanseDescription.hide();
//Удаляем существующие строки в авансовом
var $existRows = $avanseTable.find('tr');
$existRows.each(function(i)
{
$(this).closest('tr').remove();
});
LoadUserData();
}
else if(selType == "авансовый")
{
if(isHR || isAdmin || isManager)
{
$_view.find("option[value='статический план']").remove();
var dynamicExist = $_view.find("option[value='динамический план']").length;
if(dynamicExist == 0)
{
$_view.append(new Option('динамический план','динамический план'));
}
}
$_view.val("динамический план");
//Прячем кнопку "Добавить"
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").hide();
$("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']").next("span").hide();
LoadUserData();
//Добавляем строку с датой начала и окончания в таблицу нового периода из следующего года
$avanseTable.show();
$avanseDescription.show();
$avanseTable.find('tbody').append("<tr><td><input type='text' class='holiday-start-date'></td><td><input type='text' class='holiday-end-date'></td><td></td><td><span class='holidays-dayscount'></span></td></tr>");
}
SetDatePicker(selType);
});
//При изменении вида
$_view.change(function() {
LoadUserData();
});
//Автор в поле ФИО
//$("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_upLevelDiv']").html(UserCurrent + ";");
//Кнопка загрузить данные
var $btn = $("<input>").attr("type", "button").val("Загрузить данные");
var $div = $("<div>");
$div.append($btn);
$div.appendTo($("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_ButtonPanel']"));
function parseDate(dateString) {
var dateTime = dateString.split(".");
var dd = dateTime[0];
var mm = dateTime[1];
var yyyy = dateTime[2];
var temp = new Date(yyyy +"-"+ mm +"-"+ dd);
return new Date(temp);
}
//Загрузка данных
function LoadUserData()
{
var $fio = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_upLevelDiv']");
var $fioText = "";
if($fio.html().length > 100)
{
$fioText = $fio.find('span#content').html();
}
else
{
$fioText = $fio.html();
}
//Период - берем параметр из URL
var period = getParameterByName('period');
//Вид
var view = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__viewList']").children("option:selected").text();
//Тип
var curType = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']").children("option:selected").text();
if(curType == "авансовый")
{
//Получаем статический план на следующий год
var nextPeriod = parseInt(period);
nextPeriod ++;
period = nextPeriod;
view = "статический план";
//console.log(_type);
}
$.ajax(
{
//url: "/hr/holidays/LoadUserData.ashx",
//type: "POST", data: {user: $fioText, period: period, view:view, id:_id, type:_type },
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "LoadUserData", user: $fioText, period: period, view:view, id:_id, type:_type},
success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
if(data != "")
{
var dts = data.split('~');
//Табельный номер
$("input[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__personnelNumber']").val(dts[0]);
//Должность
$("input[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__position']").val(dts[1]);
//Отдел
$("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__departmentList']").val(dts[2]);
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__depID").html(dts[2]);
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__depTitle").html(dts[13]);
//Руководитель
if(dts[3] != "")
{
var mng = dts[3] + ";";
$("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_ManagerPE_upLevelDiv']").text(mng);
}
//Кол-во дней отпуска
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__vacationDaysRemaining']").html(dts[4]);
//Кол-во дней отпуска с прошлых периодов
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html(dts[5]);
//Управленческий отпуск
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__compensatoryHoliday']").html(dts[6]);
//Дата выхода на работу
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__workStart']").html(dts[7]);
//Уже запланировано дней
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html(dts[8]);
//Уже запланирован отпуск не менее 14 дней
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__twoWeaks']").html(dts[9]);
//Если должность подтянулась
if($("input[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__position']").val() != "")
{
$saveButton.show();
$("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_ButtonPanel']").hide();
//Блокируем редактирование пользователя
$fio.attr("contentEditable",false);
$("a[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_checkNames']").hide();
$("a[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_browse']").hide();
}
else
{
alert("Создание заявки невозможно. Обратитесь в отдел персонала для заполнения табельного номера");
}
//Юр. лицо
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__company']").html(dts[10]);
//Уже запланировано дней
var _alreadyPlaned = 0;
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html() != "")
{
_alreadyPlaned = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html());
}
var _ostatki = 0;
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html() != "")
{
_ostatki = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html());
}
if(dts[7] != "")
{
//Дата выхода на работу
var firstWorkDate = parseDate(dts[7]);
//Год выхода на работу
var firstWorkYear = firstWorkDate.getFullYear();
if(parseInt(period) > firstWorkYear)
{
newEmploye = false;
}
else if(parseInt(period) == firstWorkYear)
{
newEmploye = true;
}
}
else
{
newEmploye == true;
}
var possibleDaysCount = 0;
//Если сотрудник принят на работу до 1 января текущего года, то доступно (28 - уже использовано)
if(!newEmploye)
{
possibleDaysCount = 28;
}
else if(newEmploye)
{
//Если сотрудник принят на работу в текущем году, то применяется формула
possibleDaysCount = parseInt(dts[4]);
//console.log(possibleDaysCount);
}
//var possibleDaysCount = 28;// + _ostatki;
var _possible = 0;
if(possibleDaysCount - _alreadyPlaned < 0)
{
_possible = 0;
}
else
{
_possible = possibleDaysCount - _alreadyPlaned;
}
//Кол-во доступных дней
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html(_possible);
//Если изменение
if(_id != "")
{
var _dates = null;
//Если Тип отпуска основной ежегодный - берем dts[11]
if(_type == "основной ежегодный")
{
_dates = dts[11];
}
//Если Тип отпуска командировка - берем dts[16]
else if(_type == "командировка")
{
_dates = dts[16];
}
var dates = _dates.split('@');
//Сначала удаляем существующие строки, затем добавляем новые
var $existRows = $periodTable.find('tr');
$existRows.each(function(i)
{
$(this).closest('tr').remove();
});
$(dates).each(function(i) {
var curValue = dates[i];
var curID = curValue.substring(curValue.indexOf('!') + 1);
curValue = curValue.split('!')[0];
var start = curValue.split('-')[0];
var end = curValue.substring(curValue.indexOf('-') + 1);
$periodTable.find('tbody').append("<tr><td><input type='text' class='holiday-start-date' value='"+start+"'></td><td><input type='text' class='holiday-end-date' value='"+end+"'></td><td><img curid='"+ curID +"' class='del-button' src='../../_layouts/img/delete.png' style='border-width:0px;width:18px;height:18px;'></td><td><span class='holidays-dayscount'></span></td></tr>");
});
}
//Кол-во согласованных дней
$("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__approvedStaticDaysCount']").html(dts[12]);
//Можно ли планировать динамический план
var canAddDynamicText = dts[14];
if(canAddDynamicText == "false")
{
canAddDynamic = false;
}
if(!canAddDynamic)
{
if(!isHR && !isAdmin && !isManager)
{
$_view.find("option[value='динамический план']").remove();
}
}
//Заполняем массив праздничных дней
var _exclDays = dts[15];
var exclDates = _exclDays.split('!');
$(exclDates).each(function(i) {
excludeDays.push(exclDates[i])
});
var _selType = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']").children("option:selected").text();
SetDatePicker(_selType);
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Ошибка загрузки. Попробуйте перезагрузить страницу и попробовать еще раз");
},
});
}
//Кнопка загрузить данные
$btn.on("click", function() {
LoadUserData();
return false;
});
//Русификатор календаря
jQuery(function ($) {
$.datepicker.regional['ru'] = {
closeText: 'Закрыть',
prevText: '<Пред',
nextText: 'След>',
currentText: 'Сегодня',
monthNames: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
monthNamesShort: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь',
'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
dayNames: ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'],
dayNamesShort: ['вск', 'пнд', 'втр', 'срд', 'чтв', 'птн', 'сбт'],
dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],
weekHeader: 'Нед',
dateFormat: 'dd.mm.yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['ru']);
});
//Проверка на пересечение с праздниками
function GetHolidaysDaysCount(_startDate, _endDate, days, callback)
{
var _period = getParameterByName('period');
//Тип
var curType = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']").children("option:selected").text();
if(curType == "авансовый")
{
//Получаем статический план на следующий год
var nextPeriod = parseInt(_period);
nextPeriod ++;
_period = nextPeriod;
}
var daysLeft = "";
$.ajax(
{
//url: "/hr/holidays/GetHolidaysDaysCount.ashx",
//type: "POST", data: {startDate:_startDate, endDate:_endDate, period:_period},
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "GetHolidaysDaysCount", startDate:_startDate, endDate:_endDate, period:_period},
success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
if(data != null)
{
daysLeft = data;
}
callback(days, daysLeft);
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Ошибка проверки пересечения с праздничными днями");
},
});
}
var existIsLoaded = false;
function SetDatePicker(selType)
{
var period = getParameterByName('period');
var nextPeriod = parseInt(period);
nextPeriod ++;
//Контролы даты и времени начала и окончания
if(selType == "основной ежегодный" || selType == "авансовый")
{
$periodTable.find('.holiday-start-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(period, 0, 1),
maxDate: new Date(period, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//Отображаем кол-во дней
var $_endDate = $(this).parent().parent().find('.holiday-end-date');
var endDate = $_endDate.datepicker('getDate');
var startDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_endDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
//Если дата окончания еще не заполнена - заполняем ее (дата начала + 7 дней)
if($_endDate.val() == "")
{
var newEnd = $(this).datepicker('getDate');
if(newEnd != null)
{
newEnd.setDate(newEnd.getDate() + 6);
$_endDate.datepicker('setDate', newEnd);
endDate = $_endDate.datepicker('getDate');
//console.log(startDate);
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}
},
//Исключаем праздники
beforeShowDay: function(date){
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [ excludeDays.indexOf(string) == -1 ]
}
})
//АВАНСОВЫЙ
$avanseTable.find('.holiday-start-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(nextPeriod, 0, 1),
maxDate: new Date(nextPeriod, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//Отображаем кол-во дней
var $_endDate = $(this).parent().parent().find('.holiday-end-date');
var endDate = $_endDate.datepicker('getDate');
var startDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_endDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
//Если дата окончания еще не заполнена - заполняем ее (дата начала + 7 дней)
if($_endDate.val() == "")
{
var newEnd = $(this).datepicker('getDate');
if(newEnd != null)
{
newEnd.setDate(newEnd.getDate() + 6);
$_endDate.datepicker('setDate', newEnd);
endDate = $_endDate.datepicker('getDate');
//console.log(startDate);
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}
},
//Исключаем праздники
//beforeShowDay: $.datepicker.noWeekends, function(date){
beforeShowDay: function(date){
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
//return [ excludeDays.indexOf(string) == -1 ]
for (var i = 0; i < excludeDays.length; i++)
{
if (excludeDays.indexOf(string) != -1 )
{
return [ false ];
}
}
//Выходные
var weekenddate = $.datepicker.noWeekends(date);
return weekenddate;
}
})
}
else if(selType == "командировка")
{
$('.holiday-start-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(period, 0, 1),
maxDate: new Date(period, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//Отображаем кол-во дней
var $_endDate = $(this).parent().parent().find('.holiday-end-date');
var endDate = $_endDate.datepicker('getDate');
var startDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_endDate.val()!= "")
{
$(this).parent().parent().find('.holidays-dayscount').html(days + " дней");
}
var $thisControl = $(this);
//Если дата окончания еще не заполнена - заполняем ее (дата начала + 7 дней)
if($_endDate.val() == "")
{
var newEnd = $(this).datepicker('getDate');
if(newEnd != null)
{
newEnd.setDate(newEnd.getDate() + 6);
$_endDate.datepicker('setDate', newEnd);
endDate = $_endDate.datepicker('getDate');
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
$(this).parent().parent().find('.holidays-dayscount').html(days + " дней");
$thisControl.attr("days", days);
}
}
else if($_endDate.val() != "")
{
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
$(this).parent().parent().find('.holidays-dayscount').html(days + " дней");
$thisControl.attr("days", days);
}
}
})
}
//Отключаем автопозаполнение
$('.holiday-start-date').attr('autocomplete', 'off');
//Маска на поле
$('.holiday-start-date').mask("99.99.9999",{completed:function(){
//Отображаем кол-во дней
var $_endDate = $(this).parent().parent().find('.holiday-end-date');
var endDate = $_endDate.datepicker('getDate');
var startDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
//Ограничиваем дату начала при ручном вводе
var mayStartDate = new Date(parseInt(period), 0, 1);
if(startDate < mayStartDate)
{
startDate.setDate(mayStartDate);
$(this).datepicker('setDate', mayStartDate);
}
if($_endDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
else if($_endDate.val() == "")
{
var startDate = $(this).datepicker('getDate');
var newEnd = $(this).datepicker('getDate');
if(newEnd != null)
{
newEnd.setDate(newEnd.getDate() + 6);
$_endDate.datepicker('setDate', newEnd);
endDate = $_endDate.datepicker('getDate');
//console.log(startDate);
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}
}});
if(selType == "основной ежегодный" || selType == "авансовый")
{
$periodTable.find('.holiday-end-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(period, 0, 1),
maxDate: new Date(period, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//Получаем день недели
if($(this).val() != "")
{
/*
var seldate = $(this).datepicker('getDate');
seldate = seldate.toDateString();
seldate = seldate.split(' ');
var weekday=new Array();
weekday['Mon']="Monday";
weekday['Tue']="Tuesday";
weekday['Wed']="Wednesday";
weekday['Thu']="Thursday";
weekday['Fri']="Friday";
weekday['Sat']="Saturday";
weekday['Sun']="Sunday";
var dayOfWeek = weekday[seldate[0]];
//Если пятница, ставим воскресенье
if(dayOfWeek == "Friday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 2);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в пятницу, новый срок окончания - воскресенье');
}
//Если суббота, ставим воскресенье
if(dayOfWeek == "Saturday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 1);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в субботу, новый срок окончания - воскресенье');
}
*/
//Отображаем кол-во дней
var $_startDate = $(this).parent().parent().find('.holiday-start-date');
var startDate = $_startDate.datepicker('getDate');
var endDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_startDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $_startDate;
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($(this));
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}
else
{
$(this).parent().parent().find('.holidays-dayscount').html("");
}
},
//Исключаем праздники
beforeShowDay: function(date){
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [ excludeDays.indexOf(string) == -1 ]
}
})
//АВАНСОВЫЙ
$avanseTable.find('.holiday-end-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(nextPeriod, 0, 1),
maxDate: new Date(nextPeriod, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//Получаем день недели
if($(this).val() != "")
{
/*
var seldate = $(this).datepicker('getDate');
seldate = seldate.toDateString();
seldate = seldate.split(' ');
var weekday=new Array();
weekday['Mon']="Monday";
weekday['Tue']="Tuesday";
weekday['Wed']="Wednesday";
weekday['Thu']="Thursday";
weekday['Fri']="Friday";
weekday['Sat']="Saturday";
weekday['Sun']="Sunday";
var dayOfWeek = weekday[seldate[0]];
//Если пятница, ставим воскресенье
if(dayOfWeek == "Friday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 2);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в пятницу, новый срок окончания - воскресенье');
}
//Если суббота, ставим воскресенье
if(dayOfWeek == "Saturday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 1);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в субботу, новый срок окончания - воскресенье');
}
*/
//Отображаем кол-во дней
var $_startDate = $(this).parent().parent().find('.holiday-start-date');
var startDate = $_startDate.datepicker('getDate');
var endDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_startDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $_startDate;
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($(this));
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}
else
{
$(this).parent().parent().find('.holidays-dayscount').html("");
}
},
//Исключаем праздники
beforeShowDay: function(date){
var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [ excludeDays.indexOf(string) == -1 ]
}
})
}
else if(selType == "командировка")
{
$('.holiday-end-date').datepicker({
constrainInput: true, // Запретить вводить буквы
//minDate: new Date(), // Запретить выбор даты меньше чем сегодня
minDate: new Date(period, 0, 1),
maxDate: new Date(period, 11, 31),
showOn: 'button', // Выбор даты через кнопку
autoSize: true, // автоматически изменяемый размер поля
altFormat: 'yy-mm-dd', // Формат даты
dateFormat: 'dd.mm.yy',
//changeYear: true,
//beforeShowDay: $.datepicker.noWeekends, // Запрещаем выбор выходных
firstDay: 1, // Первый день недели понедельник
onSelect: function(date) {
//var $thisControl = $(this);
//Получаем день недели
if($(this).val() != "")
{
//Отображаем кол-во дней
var $_startDate = $(this).parent().parent().find('.holiday-start-date');
var startDate = $_startDate.datepicker('getDate');
var endDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_startDate.val()!= "")
{
$(this).parent().parent().find('.holidays-dayscount').html(days + " дней");
$_startDate.attr("days", days);
}
}
else
{
$(this).parent().parent().find('.holidays-dayscount').html("");
}
}
})
}
//Отключаем автозаполнение
$('.holiday-end-date').attr('autocomplete', 'off');
//Маска на поле
$('.holiday-end-date').mask("99.99.9999",{completed:function(){
//Отображаем кол-во дней и не давем выбирать пятницу и субботу
if(selType == "основной ежегодный" || selType == "авансовый")
{
/*
var seldate = $(this).datepicker('getDate');
seldate = seldate.toDateString();
seldate = seldate.split(' ');
var weekday=new Array();
weekday['Mon']="Monday";
weekday['Tue']="Tuesday";
weekday['Wed']="Wednesday";
weekday['Thu']="Thursday";
weekday['Fri']="Friday";
weekday['Sat']="Saturday";
weekday['Sun']="Sunday";
var dayOfWeek = weekday[seldate[0]];
//Если пятница, ставим воскресенье
if(dayOfWeek == "Friday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 2);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в пятницу, новый срок окончания - воскресенье');
}
//Если суббота, ставим воскресенье
if(dayOfWeek == "Saturday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 1);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в субботу, новый срок окончания - воскресенье');
}
*/
}
//Отображаем кол-во дней
var $_startDate = $(this).parent().parent().find('.holiday-start-date');
var startDate = $_startDate.datepicker('getDate');
var endDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
//Ограничиваем дату окончания при ручном вводе
var mayEndDate = new Date(parseInt(period), 11, 31);
//console.log(mayEndDate);
if(endDate > mayEndDate)
{
endDate.setDate(mayEndDate);
$(this).datepicker('setDate', mayEndDate);
}
if($_startDate.val()!= "")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $_startDate;
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($(this));
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
}});
//Русифицируем календарь
$.datepicker.regional['ru'];
//Если загружаем существующие, то сразу отображаем кол-во дней
if(_id != "" && existIsLoaded == false)
{
var $startDates = $periodTable.find('.holiday-start-date');
var $endDates = $periodTable.find('.holiday-end-date');
var datesCount = $startDates.length;
var curDatesIndex = 0;
$startDates.each(function(i) {
var startDate = $(this).datepicker('getDate');
var endDate = $($endDates[i]).datepicker('getDate');
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($($endDates[i]));
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
});
}
//Считаем кол-во дней при вводе
$('.holiday-start-date').on('keyup', function () {
//var currentVal = $(this).val();
//$.datepicker._clearDate(this);
//$(this).parent().parent().find('.holidays-dayscount').html("");
var $thisControl = $(this);
if($(this).val().length > 7)
{
//Отображаем кол-во дней
var $_endDate = $(this).parent().parent().find('.holiday-end-date');
var endDate = $_endDate.datepicker('getDate');
var startDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_endDate.val()!= "")
{
if(selType == "основной ежегодный" || selType == "авансовый")
{
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
else if(selType == "командировка")
{
$thisControl.attr("days", days);
$thisControl.parent().parent().find('.holidays-dayscount').html(days + " дней");
}
}
//var $_endDate = $(this).parent().parent().find('.holiday-end-date');
else if($_endDate.val() == "")
{
var startDate = $(this).datepicker('getDate');
var newEnd = $(this).datepicker('getDate');
if(newEnd != null)
{
if(selType == "основной ежегодный" || selType == "авансовый")
{
newEnd.setDate(newEnd.getDate() + 6);
$_endDate.datepicker('setDate', newEnd);
endDate = $_endDate.datepicker('getDate');
//console.log(startDate);
diff = endDate - startDate;
days = Math.ceil(diff / oneDay);
days ++;
//Проверяем пересечение с праздниками
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $(this);
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($_endDate);
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
else if(selType == "командировка")
{
$thisControl.attr("days", days);
$thisControl.parent().parent().find('.holidays-dayscount').html(days + " дней");
}
}
}
}
});
//При вводе считаем кол-во дней и не даем выбирать пятницу и субботу
$('.holiday-end-date').on('keyup', function () {
//var currentVal = $(this).val();
//$.datepicker._clearDate(this);
//Получаем день недели
if($(this).val().length > 7)
{
/*
var seldate = $(this).datepicker('getDate');
seldate = seldate.toDateString();
seldate = seldate.split(' ');
var weekday=new Array();
weekday['Mon']="Monday";
weekday['Tue']="Tuesday";
weekday['Wed']="Wednesday";
weekday['Thu']="Thursday";
weekday['Fri']="Friday";
weekday['Sat']="Saturday";
weekday['Sun']="Sunday";
var dayOfWeek = weekday[seldate[0]];
//Если пятница, ставим воскресенье
if(dayOfWeek == "Friday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 2);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в пятницу, новый срок окончания - воскресенье');
}
//Если суббота, ставим воскресенье
if(dayOfWeek == "Saturday")
{
var endDate = $(this).datepicker('getDate');
endDate.setDate(endDate.getDate() + 1);
$(this).datepicker('setDate', endDate);
alert('Окончание отпуска не может быть в субботу, новый срок окончания - воскресенье');
}
*/
//Отображаем кол-во дней
var $_startDate = $(this).parent().parent().find('.holiday-start-date');
var startDate = $_startDate.datepicker('getDate');
var endDate = $(this).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if($_startDate.val()!= "")
{
if(selType == "основной ежегодный" || selType == "авансовый")
{
var startDate1 = $.datepicker.formatDate('dd-MM-yy', startDate);
var endDate1 = $.datepicker.formatDate('dd-MM-yy', endDate);
var $thisControl = $_startDate;
GetHolidaysDaysCount(startDate1, endDate1, days, function(days1, daysLeft){
var dts = daysLeft.split('~');
var firstDayHoliday = dts[1];
var lastdayHoliday = dts[2];
if(firstDayHoliday == "true" || lastdayHoliday == "true")
{
alert("Отпуск не может начинаться или заканчиваться праздничным днем");
//$.datepicker._clearDate($thisControl);
$.datepicker._clearDate($(this));
$thisControl.parent().parent().find('.holidays-dayscount').html("");
}
else if(firstDayHoliday == "false" && lastdayHoliday == "false")
{
var dl = parseInt(dts[0]);
var dc = days1 - dl;
if(dl > 0)
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней и "+ dl + " праздничных дней(я)");
}
else
{
$thisControl.attr("days", dc);
$thisControl.parent().parent().find('.holidays-dayscount').html(dc + " дней");
}
}
});
}
else if(selType == "командировка")
{
$_startDate.attr("days", days);
$_startDate.parent().parent().find('.holidays-dayscount').html(days + " дней");
}
}
}
else
{
$(this).parent().parent().find('.holidays-dayscount').html("");
}
});
//Кнопка удалить для каждого периода
$delButton = $(".del-button");
$delButton.css('cursor', 'pointer');
$delButton.on("click", function() {
$(this).hide();
var id_ = $(this).attr("curid");
if(id_ != null)
{
$.ajax(
{
//url: "/hr/holidays/Delete.ashx",
//type: "POST", data: {id:id_}, success: function (data)
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "Delete", id:id_}, success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
if(data == "success")
{
$(this).parent().closest('tr').remove();
$delButton.show();
LoadUserData();
}
else if(data != "success")
{
alert("Ошибка удаления. Попробуйте еще раз");
$delButton.show();
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Ошибка удаления. Попробуйте еще раз");
$delButton.show();
},
});
}
else if(id_ == null)
{
$(this).parent().closest('tr').remove();
}
});
}
//SetDatePicker("основной ежегодный");
//SetDatePicker("командировка");
//Кнопка добавить
$addButton = $("img[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_Image1']");
$addButton.css('cursor', 'pointer');
var $addSpan = $("<span style='margin: 0 0 0 10px;'>Добавить период</span>");
$addSpan.insertAfter($addButton);
$addButton.on("click", function() {
$periodTable.find('tbody').append("<tr><td><input type='text' class='holiday-start-date'></td><td><input type='text' class='holiday-end-date'></td><td><img class='del-button' src='../../_layouts/img/delete.png' style='border-width:0px;width:18px;height:18px;'></td><td><span class='holidays-dayscount'></span></td></tr>");
var _selType = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']").children("option:selected").text();
SetDatePicker(_selType);
});
//ID новых периодов
var newPeriodsIndexes = [];
//ID редактируемых периодов
var editPeriodsIndexes = [];
//Сохранение
function Save(fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView)
{
$saveButton.hide();
$cancelButton.hide();
var $startDates = $periodTable.find('.holiday-start-date');
//var $endDates = $('.holiday-end-date');
$startDates.each(function(i) {
var $del = $(this).parent().parent("tr").find(".del-button");
var curid = $del.attr("curid");
if(curid != null)
{
editPeriodsIndexes.push(i);
}
else if(curid == null)
{
newPeriodsIndexes.push(i);
}
});
/*
console.log("всего новых периодов: " + newPeriodsIndexes.length);
if(newPeriodsIndexes.length > 0)
{
for(j=0; j<newPeriodsIndexes.length; j++)
{
console.log(newPeriodsIndexes[j]);
}
}
console.log("всего редактируемых периодов: " + editPeriodsIndexes.length);
if(editPeriodsIndexes.length > 0)
{
for(k=0; k<editPeriodsIndexes.length; k++)
{
console.log(editPeriodsIndexes[k]);
}
}
*/
DoSave(0, fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView);
}
function DoSave(i, fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView)
{
//Период
var period = getParameterByName('period');
var $startDates = $periodTable.find('.holiday-start-date');
var $endDates = $periodTable.find('.holiday-end-date');
//Юр лицо
var company = $("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__company']").html();
var startDate = $($startDates[i]).datepicker('getDate');
var endDate = $($endDates[i]).datepicker('getDate');
//Кол-во дней
//var diff = endDate - startDate; // разница в миллисекундах
//var days = Math.ceil(diff / oneDay);
//days ++;
var days = $($startDates[i]).attr("days");
startDate = $.datepicker.formatDate('dd-MM-yy', startDate);
endDate = $.datepicker.formatDate('dd-MM-yy', endDate);
//Авансовый
var avanseStartDate = "";
var avanseEndDate = "";
var avanseDays = "";
if(selectedType == "авансовый")
{
var $avanseStartDates = $avanseTable.find('.holiday-start-date');
var $avanseEndDates = $avanseTable.find('.holiday-end-date');
var avanseStartDate = $($avanseStartDates[i]).datepicker('getDate');
var avanseEndDate = $($avanseEndDates[i]).datepicker('getDate');
avanseStartDate = $.datepicker.formatDate('dd-MM-yy', avanseStartDate);
avanseEndDate = $.datepicker.formatDate('dd-MM-yy', avanseEndDate);
avanseDays = $($avanseStartDates[i]).attr("days");
}
//Последний элемент (на нем создаем элемент согласования)
var lastItem = "false";
var cnt = $startDates.length - 1;
if(i == cnt)
{
lastItem = "true";
}
var _curid = 0;
if (newPeriodsIndexes.indexOf(i) != -1)
{
_curid = 0;
//console.log('new');
//var ind = i+1;
//DoSave(ind, fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView);
}
else if(editPeriodsIndexes.indexOf(i) != -1)
{
var $startDates = $periodTable.find('.holiday-start-date');
var $del = $($startDates[i]).parent().parent("tr").find(".del-button");
var _curid = $del.attr("curid");
//console.log('edit ' + curid);
//var ind = i+1;
//DoSave(ind, fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView);
}
$.ajax(
{
//url: "/hr/holidays/Save.ashx",
//type: "POST", data: {user:fioText, period:period, personnelNumber:personnelNumber, department:department, position:position, startDate:startDate, endDate:endDate, days:days, avanseStartDate:avanseStartDate, avanseEndDate:avanseEndDate, avanseDays:avanseDays, company:company, managerText:managerText, deputyText:deputyText, lastItem:lastItem, selectedType:selectedType, selectedView:selectedView, curid:_curid },
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "Save", user:fioText, period:period, personnelNumber:personnelNumber, department:department, position:position, startDate:startDate, endDate:endDate, days:days, avanseStartDate:avanseStartDate, avanseEndDate:avanseEndDate, avanseDays:avanseDays, company:company, managerText:managerText, deputyText:deputyText, lastItem:lastItem, selectedType:selectedType, selectedView:selectedView, curid:_curid},
success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
if(data == "success")
{
//Переходим в график
var _url = document.location.href;
//отрезаем source=
_url = _url.substring(_url.indexOf('source=') + 7);
if(lastItem == "true")
{
//_url = _url.substring(_url.indexOf('source=') + 7);
if (_url.indexOf("user") == -1)
{
_url += "&user=" + fioText;
}
//window.location.replace(_url);
window.location.href = _url;
}
else if(lastItem == "false")
{
var ind = i+1;
DoSave(ind, fioText, personnelNumber, department, position, managerText, deputyText, selectedType, selectedView);
}
}
else if(data != "success")
{
alert("Ошибка сохранения. Попробуйте еще раз");
$saveButton.show();
$cancelButton.show();
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Ошибка сохранения. Попробуйте еще раз");
$saveButton.show();
$cancelButton.show();
},
});
}
//Проверка пересечения новых периодов
function IsOverlap(from1, to1, from2, to2)
{
return (((from1 <= from2) && (to1 >= from2)) ||
((from1 <= to2) && (to1 >= to2)) ||
((from1 >= from2) && (to1 <= to2)));
}
//Закрываем остатки
function DoCloseRemaining(ostatki, selectedDaysCount, $fioText, $personnelNumber, $department, $position, $managerText, $deputyText, selectedType, selectedView)
{
//Сначала проверяем заместителя. Если у заместителя на этот период отпуск или командировка, то не сохраняем
var $startDates = $periodTable.find('.holiday-start-date');
var $endDates = $periodTable.find('.holiday-end-date');
var startDatesString = "";
var endDatesString = "";
//Период
var period = getParameterByName('period');
$startDates.each(function(i) {
var startDate1 = $(this).datepicker('getDate');
var endDate1 = $($endDates[i]).datepicker('getDate');
var _startDate = $.datepicker.formatDate('dd-MM-yy', startDate1);
var _endDate = $.datepicker.formatDate('dd-MM-yy', endDate1);
startDatesString += _startDate + ";";
endDatesString += _endDate + ";";
});
$.ajax(
{
//url: "/hr/holidays/CheckDeputy.ashx",
//type: "POST", data: {deputy:$deputyText, allStartDates:startDatesString, allEndDates:endDatesString, period:period},
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "CheckDeputy", deputy:$deputyText, allStartDates:startDatesString, allEndDates:endDatesString, period:period},
success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
//Замещающий получен и свободен на выбранные даты
if(data == "free")
{
if(selectedType == "основной ежегодный" && selectedView == "динамический план")
{
//Если есть остатки - спарва закрываем их
if(ostatki != 0)
{
//Параметры: остатки, выбранное кол-во дней (закрываем остатки в адресной книге), сотрудник
$.ajax(
{
//url: "/hr/holidays/CloseRemaining.ashx",
//type: "POST", data: {ostatki: ostatki, daysCount: selectedDaysCount, user: $fioText},
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "CloseRemaining", ostatki: ostatki, daysCount: selectedDaysCount, user: $fioText},
success: function (data1)
{
data1 = data1.split('\n')[0];
data1 = data1.substring(0, data1.length - 1);
//Остатки успешно изменены
if(data1 == "success")
{
//Запускаем сохранение
//console.log('start save');
Save($fioText, $personnelNumber, $department, $position, $managerText, $deputyText, selectedType, selectedView);
}
else if(data1 != "success")
{
alert('Не удалось сохранить остатки, попробуйте сохранить еще раз');
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Не удалось сохранить остатки, попробуйте сохранить еще раз");
},
});
}
//Если остатков нет - сразу сохраняем
else if(ostatki == 0)
{
Save($fioText, $personnelNumber, $department, $position, $managerText, $deputyText, selectedType, selectedView);
}
}
//Командировку просто сохраняем
else if(selectedType == "командировка" || selectedType == "авансовый" || (selectedType == "основной ежегодный" && selectedView == "статический план"))
{
Save($fioText, $personnelNumber, $department, $position, $managerText, $deputyText, selectedType, selectedView);
}
}
else if(data == "busy")
{
alert("Необходимо выбрать другого заместителя, т.к. " + $deputyText + " будет в отпуске или командировке в это один из выбранных вами периодов отпуска.");
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Не удалось проверить занятость заместителя. Попробуйте еще раз.");
},
});
}
//Кнопка Сохранить
$saveButton.on("click", function() {
$error.html("");
//Проверяем поля
var goNext = true;
//ФИО
var $fio = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_FioPE_upLevelDiv']");
var $fioText = "";
if($fio.html().length > 100)
{
$fioText = $fio.find('span#content').html();
}
else
{
$fioText = $fio.html();
}
if($fioText == "" || $fioText.length == 0)
{
$error.html($error.html()+"<br/>Не заполнено поле ФИО");
goNext = false;
}
//Табельный номер
var $personnelNumber = $("input[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__personnelNumber']");
if($personnelNumber.val() == "")
{
$error.html($error.html() + "<br/>Не заполнено поле Табельный номер");
goNext = false;
}
//Отдел
var $department = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__departmentList']").val();
if($department == "(выбрать)")
{
$error.html($error.html() + "<br/>Не заполнено поле Отдел");
goNext = false;
}
//Должность
var $position = $("input[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__position']").val();
if($position == "")
{
$error.html($error.html() + "<br/>Не заполнено поле должность");
goNext = false;
}
//Руководитель
var $manager = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_ManagerPE_upLevelDiv']");
var $managerText = "";
if($manager.html().length > 100)
{
$managerText = $manager.find('span#content').html();
}
else
{
$managerText = $manager.html();
}
/*
if($managerText == "" || $managerText.length == 0)
{
$error.html($error.html()+"<br/>Не заполнено поле Руководитель");
goNext = false;
}
*/
//Заместитель
var $deputy = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_DeputyPE_upLevelDiv']");
var $deputyText = "";
if($deputy.html().length > 100)
{
$deputyText = $deputy.find('span#content').html();
}
else
{
$deputyText = $deputy.html();
}
/*
if($deputyText == "" || $deputyText.length == 0)
{
$error.html($error.html()+"<br/>Не заполнено поле Заместитель");
goNext = false;
}
*/
//Проверка заполнения дат
//ПЛАН
var $startDates = $periodTable.find('.holiday-start-date');
var $endDates = $periodTable.find('.holiday-end-date');
//АВАНС
var $avanseStartDates = $avanseTable.find('.holiday-start-date');
var $avanseEndDates = $avanseTable.find('.holiday-end-date');
var allDatesFilled = true;
//План
$startDates.each(function(i) {
var currentVal = $(this).val();
if(currentVal == "" || currentVal.length < 8)
{
allDatesFilled = false;
}
});
$endDates.each(function(i) {
var currentVal = $(this).val();
if(currentVal == ""|| currentVal.length < 8)
{
allDatesFilled = false;
}
});
//Аванс
$avanseStartDates.each(function(i) {
var currentVal = $(this).val();
if(currentVal == "" || currentVal.length < 8)
{
allDatesFilled = false;
}
});
$avanseEndDates.each(function(i) {
var currentVal = $(this).val();
if(currentVal == ""|| currentVal.length < 8)
{
allDatesFilled = false;
}
});
if(allDatesFilled == false)
{
$error.html($error.html()+"<br/>Не все даты заполнены");
goNext = false;
}
//Проверка что дата окончания больше даты начала
var allDatesCorrect = true;
//План
$startDates.each(function(i) {
var startDate = $(this).datepicker('getDate');
var endDate = $($endDates[i]).datepicker('getDate');
if(startDate > endDate)
{
allDatesCorrect = false;
}
});
//Аванс
$avanseStartDates.each(function(i) {
var startDate = $(this).datepicker('getDate');
var endDate = $($avanseEndDates[i]).datepicker('getDate');
if(startDate > endDate)
{
allDatesCorrect = false;
}
});
if(allDatesCorrect == false)
{
$error.html($error.html()+"<br/>Дата окончания не может быть меньше даты начала");
goNext = false;
}
//Проверка что один из периодов не менее 14 дней
var twoWeak = false;
//Проверка что период не может быть в прошлом
var allDatesInFeature = true;
//Тип
var selectedType = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__typeList']").children("option:selected").text();
if(selectedType == "командировка" || selectedType == "авансовый")
{
twoWeak = true;
}
else if(selectedType == "основной ежегодный")
{
//Проверка что один из периодов не менее 14 дней
var view = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__viewList']").children("option:selected").text();
//Только для статический план
if(view == "статический план")
{
//Ранее уже был запланирован - не проверяем
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__twoWeaks']").html() == "false")
{
$startDates.each(function(i) {
var startDate = $(this).datepicker('getDate');
var endDate = $($endDates[i]).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
if(days >= 14)
{
twoWeak = true;
}
});
if(twoWeak == false)
{
$error.html($error.html()+"<br/>Одна часть отпуска должна быть не менее 14 календарных дней");
goNext = false;
}
}
else if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__twoWeaks']").html() == "true")
{
twoWeak = true;
}
}
else if(view == "динамический план")
{
twoWeak = true;
}
//Проверка что период не может быть в прошлом
$startDates.each(function(i) {
var today = new Date();
var startDate = $(this).datepicker('getDate');
//var endDate = $($endDates[i]).datepicker('getDate');
if(today > startDate)// endDate)
{
allDatesInFeature = false;
}
});
if(allDatesInFeature == false)
{
$error.html($error.html()+"<br/>Дата отпуска не может быть в прошлом");
goNext = false;
}
}
//Если все даты заполнены и заполнены корректно - продолжаем считать
if(allDatesFilled && allDatesCorrect && twoWeak && allDatesInFeature)
{
if(selectedType == "основной ежегодный" || selectedType == "авансовый")
{
//Считаем сумму дней (не больше 28 + остатки с прошлых периодов, запланировано + уже использованные)
var selectedDaysCount = 0;
$startDates.each(function(i) {
var days = parseInt($($startDates[i]).attr("days"));
selectedDaysCount += days;
/*
var startDate = $(this).datepicker('getDate');
var endDate = $($endDates[i]).datepicker('getDate');
var diff = endDate - startDate; // разница в миллисекундах
var days = Math.ceil(diff / oneDay);
days ++;
selectedDaysCount += days;
*/
});
//Если авансовый, проверяем что кол-во дней авансового и из следующего периода совпадает
var avanseDaysCountEqual = true;
if(selectedType == "авансовый")
{
//План
$startDates.each(function(i) {
var days1 = $(this).attr("days");
$avanseStartDates.each(function(i) {
var days2 = $(this).attr("days");
if(days1 != days2)
{
avanseDaysCountEqual = false;
}
});
});
}
if(avanseDaysCountEqual == false)
{
$error.html($error.html()+"<br/>Кол-во дней авансового отпуска и из следующего периода должно совпадать");
goNext = false;
}
//Уже запланировано дней
var alreadyPlaned = 0;
//Если создание, то берем уже запланированное кол-во дней
if(_id == "")
{
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html() != "")
{
alreadyPlaned = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html());
}
}
//Если редактирование, то берем только согласованное кол-во дней
else if(_id != "")
{
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__approvedStaticDaysCount']").html() != "")
{
alreadyPlaned = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__approvedStaticDaysCount']").html());
}
}
//запланировано + уже использованные
var allPeriodDays = alreadyPlaned + selectedDaysCount;
//Если больше (28 дней + остатки с прошлых периодов), то не разрешаем
var ostatki = 0;
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html() != "")
{
ostatki = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html());
}
var possibleDaysCount = 0; // + ostatki;
//Вид
var view = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__viewList']").children("option:selected").text();
if(view == "статический план")
{
if(!newEmploye)
{
possibleDaysCount = 28;
}
else if(newEmploye)
{
//possibleDaysCount = 28;
possibleDaysCount = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html());
}
if(allPeriodDays > possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во дней за период " + period + " не должно превышать "+ possibleDaysCount +" дней. У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
else if(allPeriodDays < possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во запланированных дней за период " + period + " должно быть не менее "+ possibleDaysCount +". У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
}
else if(view == "динамический план")
{
allPeriodDays = selectedDaysCount;
if(!newEmploye)
{
//possibleDaysCount = 28 + ostatki;
possibleDaysCount = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html()) + ostatki;
}
else if(newEmploye)
{
//possibleDaysCount = 28 + ostatki;
possibleDaysCount = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html()) + ostatki;
}
if(allPeriodDays > possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во дней за период " + period + " не должно превышать "+ possibleDaysCount +" дней. У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
}
/*
if(allPeriodDays > possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во дней за период " + period + " не должно превышать "+ possibleDaysCount +" дней. У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
else if(allPeriodDays < possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во запланированных дней за период " + period + " должно быть не менее "+ possibleDaysCount +". У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
*/
}
//Считаем остатки аванса
if(selectedType == "авансовый")
{
//Считаем сумму дней (не больше 28 запланировано в следующем периоде + уже использованные)
var selectedDaysCount = 0;
$avanseStartDates.each(function(i) {
var days = parseInt($($avanseStartDates[i]).attr("days"));
selectedDaysCount += days;
});
//Уже запланировано дней
var alreadyPlaned = 0;
//Если создание, то берем уже запланированное кол-во дней
if(_id == "")
{
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html() != "")
{
alreadyPlaned = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html());
}
}
//запланировано + уже использованные
var allPeriodDays = alreadyPlaned + selectedDaysCount;
//Если больше (28 дней + остатки с прошлых периодов), то не разрешаем
var ostatki = 0;
//if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html() != "")
//{
// ostatki = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__daysFromPreviousPeriods']").html());
//}
if($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html() != "")
{
ostatki = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__usedDaysCount']").html());
}
var possibleDaysCount = 0; // + ostatki;
//allPeriodDays = selectedDaysCount;
if(!newEmploye)
{
//possibleDaysCount = 28 + ostatki;
possibleDaysCount = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html()) + ostatki;
}
else if(newEmploye)
{
//possibleDaysCount = 28 + ostatki;
possibleDaysCount = parseInt($("span[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__possibleDaysCount']").html()) + ostatki;
}
if(allPeriodDays > possibleDaysCount)
{
var period = getParameterByName('period');
$error.html($error.html()+"<br/>Общее кол-во дней за период " + period + " не должно превышать "+ possibleDaysCount +" дней. У Вас получается "+ allPeriodDays +" с учетом ранее запланированных");
goNext = false;
}
}
//Проверяем пересечение выбранных периодов
var newDatesIsOverlap = false;
//ID существующих элементов, которые исключаем из проверки на пересечение с существующими
var existIDs = "";
var startDatesString = "";
var endDatesString = "";
var avanseStartDatesString = "";
var avanseEndDatesString = "";
$startDates.each(function(i) {
var $del = $(this).parent().parent("tr").find(".del-button");
var curid = $del.attr("curid");
if(curid != null)
{
if(existIDs == "")
{
existIDs += curid;
}
else if(existIDs != "")
{
existIDs += ";" + curid;
}
}
var startDate1 = $(this).datepicker('getDate');
var endDate1 = $($endDates[i]).datepicker('getDate');
var _startDate = $.datepicker.formatDate('dd-MM-yy', startDate1);
var _endDate = $.datepicker.formatDate('dd-MM-yy', endDate1);
startDatesString += _startDate + ";";
endDatesString += _endDate + ";";
if($startDates.length > 1)
{
$startDates.each(function(j) {
if(j != i)
{
var startDate2 = $(this).datepicker('getDate');
var endDate2 = $($endDates[j]).datepicker('getDate');
var overlap = IsOverlap(startDate1, endDate1, startDate2, endDate2);
if(overlap)
{
newDatesIsOverlap = true;
}
}
});
}
});
$avanseStartDates.each(function(i) {
var $del = $(this).parent().parent("tr").find(".del-button");
var curid = $del.attr("curid");
if(curid != null)
{
if(existIDs == "")
{
existIDs += curid;
}
else if(existIDs != "")
{
existIDs += ";" + curid;
}
}
var startDate1 = $(this).datepicker('getDate');
var endDate1 = $($endDates[i]).datepicker('getDate');
var _startDate = $.datepicker.formatDate('dd-MM-yy', startDate1);
var _endDate = $.datepicker.formatDate('dd-MM-yy', endDate1);
avanseStartDatesString += _startDate + ";";
avanseEndDatesString += _endDate + ";";
if($avanseStartDates.length > 1)
{
$avanseStartDates.each(function(j) {
if(j != i)
{
var startDate2 = $(this).datepicker('getDate');
var endDate2 = $($endDates[j]).datepicker('getDate');
var overlap = IsOverlap(startDate1, endDate1, startDate2, endDate2);
if(overlap)
{
newDatesIsOverlap = true;
}
}
});
}
});
if(newDatesIsOverlap == true)
{
$error.html($error.html()+"<br/>Периоды оптуска не должны пересекаться");
goNext = false;
}
//Проверяем что выбранные периоды не пересекаются с существующими
var period = getParameterByName('period');
//Вид
var view = $("select[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb__viewList']").children("option:selected").text()
var ids = 0;
if(existIDs != "")
{
ids = existIDs;
}
//Заместитель
var $deputy1 = $("div[id$='_g_8d7a025b_ae34_4910_9075_75791a5a89eb_DeputyPE_upLevelDiv']");
var $deputyText1 = "";
if($deputy1.html().length > 100)
{
$deputyText1 = $deputy1.find('span#content').html();
}
else
{
$deputyText1 = $deputy1.html();
}
$.ajax(
{
//url: "/hr/holidays/CheckOverlap.ashx",
//type: "POST", data: {user:$fioText, period:period, startDates:startDatesString, endDates:endDatesString, view:view, id:ids},
url: "/hr/holidays/handlers.aspx",
type: "POST", data: {action: "CheckOverlap", user:$fioText, period:period, startDates:startDatesString, endDates:endDatesString, view:view, id:ids},
success: function (data)
{
data = data.split('\n')[0];
data = data.substring(0, data.length - 1);
if(data == "false" || data == "bt")
{
if(data == "bt")
{
alert("Периоды отпуска пересекаются с командировкой");
}
if(goNext)
{
DoCloseRemaining(ostatki, selectedDaysCount, $fioText, $personnelNumber.val(), $department, $position, $managerText, $deputyText1, selectedType, view);
}
}
else if(data == "true")
{
$error.html($error.html()+"<br/>Периоды оптуска не должны пересекаться с существующими периодами");
goNext = false;
}
else
{
alert("Ошибка проверки. Попробуйте еще раз");
goNext = false;
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Ошибка проверки. Попробуйте еще раз");
goNext = false;
},
});
/*
//Если проверка полей пройдена, проверяем даты
if(goNext)
{
//Если есть остатки - спарва закрываем их
if(ostatki != 0)
{
//Параметры: остатки, выбранное кол-во дней (закрываем остатки в адресной книге), сотрудник
$.ajax(
{
url: "/hr/holidays/CloseRemaining.ashx",
type: "POST", data: {ostatki: ostatki, daysCount: selectedDaysCount, user: $fioText}, success: function (data)
{
//Остатки успешно изменены
if(data == "success")
{
//Запускаем сохранение
//console.log('start save');
Save($fioText, $personnelNumber.val(), $department, $position, $managerText, $deputyText);
}
else if(data != "success")
{
alert('Не удалось сохранить остатки, попробуйте сохранить еще раз');
}
},
error: function (xhr, ajaxOptions, thrownError)
{
alert("Не удалось сохранить остатки, попробуйте сохранить еще раз");
},
});
}
//Если остатков нет - сразу сохраняем
else if(ostatki == 0)
{
Save($fioText, $personnelNumber.val(), $department, $position, $managerText, $deputyText);
}
}
*/
}
});
});
</script>
<td valign="top" width="100%">
<WebPartPages:WebPartZone runat="server" FrameType="TitleBarOnly" ID="Left" Title="loc:Left"><ZoneTemplate>
<WpNs0:AddHoliday runat="server" ImportErrorMessage="Не удается импортировать эту веб-часть." Title="Добавить отпуск" ID="g_8d7a025b_ae34_4910_9075_75791a5a89eb" __MarkupType="vsattributemarkup" __WebPartId="{8D7A025B-AE34-4910-9075-75791A5A89EB}" WebPart="true" __designer:IsClosed="false" partorder="2"></WpNs0:AddHoliday>
</ZoneTemplate></WebPartPages:WebPartZone>
</td>
<td> </td>
<td> </td>
</tr>
</table>
</td>
</tr>
</table>
</asp:Content>