コード例 #1
0
        /// <summary>
        ///     Получение списка праздников за выбранный период
        /// </summary>
        /// <param name="startDate">Дата начала</param>
        /// <param name="endDate">Дата конца</param>
        /// <returns>Датасет с праздниками за выбранный период</returns>
        public HolidaysInfoDs CompleteHolidaysInfoDs(DateTime startDate, DateTime endDate)
        {
            var nStartDate = startDate.ToSqlDateNormalized();
            var nEndDate   = endDate.ToSqlDateNormalized();

            var sStartDate = nStartDate.ToString("yyyy-MM-dd HH:mm:ss");
            var sEndDate   = nEndDate.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");

            var result = new HolidaysInfoDs();

            var sql = string.Format(
                "SELECT Дата, Название, РабочийВыходной, Праздник FROM Праздники WHERE (Дата >= convert(datetime, '{0}', 120)) AND (Дата <= convert(datetime, '{1}', 120)) AND (КодТерритории = 188)",
                sStartDate, sEndDate);
            var dt = DBManager.GetData(sql, Global.ConnectionString);

            result.Праздники.Clear();
            result.Праздники.Merge(dt);
            return(result);
        }
コード例 #2
0
        /// <summary>
        ///     Получение списка дней за выбранный период
        /// </summary>
        /// <param name="startPeriodParam">Дата начала</param>
        /// <param name="endPeriodParam">Дата конца</param>
        /// <param name="semplId">ID сотрудника</param>
        /// <param name="stz">Таймзона</param>
        public void CompleteDaysTable(DateTime?startPeriodParam, DateTime?endPeriodParam, string semplId, string stz)
        {
            int tz, emplId;

            try
            {
                tz = Convert.ToInt32(stz);
            }
            catch
            {
                tz = 0;
            }

            try
            {
                emplId = Convert.ToInt32(semplId);
            }
            catch
            {
                emplId = 0;
            }

            //bool hasNewIds = _needCheckIndex && (EmployeeTimePeriodsInfo.GetMaxId(_startDate, _endDate, _emplId, -tz) != _maxIndex);
            //bool sourceChanged = (_startDate == DateTime.MinValue) || (_endDate == DateTime.MinValue) || hasNewIds;
            //bool sourceChanged = true;
            var startPeriod = startPeriodParam ?? DateTime.MinValue;
            var endPeriod   = endPeriodParam ?? DateTime.MinValue;

            //if (emplId != _emplId || sourceChanged)
            //{
            //    ClearCash();
            //}
            ClearCash();
            if (startPeriod != _startDate || endPeriod != _endDate)
            {
                IsError   = false;
                _holidays = CompleteHolidaysInfoDs(startPeriod, endPeriod);
                var minDate = DateTime.MaxValue;
                var maxDate = DateTime.MinValue;

                var temp = _sourceTable.Clone();

                foreach (DataRow row in _sourceTable.Rows)
                {
                    if (((DateTime)row["DAY_VALUE"]).Date <= endPeriod.Date &&
                        ((DateTime)row["DAY_VALUE"]).Date >= startPeriod.Date)
                    {
                        if (minDate > ((DateTime)row["DAY_VALUE"]).Date)
                        {
                            minDate = ((DateTime)row["DAY_VALUE"]).Date;
                        }

                        if (maxDate < ((DateTime)row["DAY_VALUE"]).Date)
                        {
                            maxDate = ((DateTime)row["DAY_VALUE"]).Date;
                        }

                        temp.ImportRow(row);
                    }
                }

                _sourceTable.Rows.Clear();
                _sourceTable = temp.Copy();

                EmployeePeriodsInfoDs periodsDs;

                if (maxDate < minDate)
                {
                    _startDate = DateTime.MinValue;
                    _endDate   = DateTime.MinValue;
                    periodsDs  = new ExecQuery().CompleteEmployeePeriodsInfoDs(emplId, startPeriod.Date, endPeriod.Date,
                                                                               -tz);
                }
                else
                {
                    if (minDate.Date != startPeriod.Date && maxDate.Date != endPeriod.Date)
                    {
                        periodsDs = new ExecQuery().CompleteEmployeePeriodsInfoDs(emplId, startPeriod.Date,
                                                                                  minDate.Date, maxDate.Date, endPeriod.Date.AddDays(1));
                    }
                    else if (minDate.Date != startPeriod.Date)
                    {
                        periodsDs = new ExecQuery().CompleteEmployeePeriodsInfoDs(emplId, startPeriod.Date,
                                                                                  minDate.Date, -tz);
                    }
                    else if (maxDate.Date != endPeriod.Date)
                    {
                        periodsDs = new ExecQuery().CompleteEmployeePeriodsInfoDs(emplId, maxDate.Date, endPeriod.Date,
                                                                                  -tz);
                    }
                    else
                    {
                        periodsDs = new EmployeePeriodsInfoDs();
                    }

                    _startDate = minDate;
                    _endDate   = maxDate;
                }

                if (periodsDs.Сотрудники.Rows.Count > 0)
                {
                    _empNameRus = ((EmployeePeriodsInfoDs.СотрудникиRow)periodsDs.Сотрудники.Rows[0]).Сотрудник;
                    _empNameLat = ((EmployeePeriodsInfoDs.СотрудникиRow)periodsDs.Сотрудники.Rows[0]).Employee;
                }

                var dayIntervals = new EmployeeTimeInervals();

                for (var curentDay = startPeriod; curentDay <= endPeriod; curentDay = curentDay.AddDays(1))
                {
                    dayIntervals.Add(new TimeInterval(curentDay.Date, curentDay.Date.AddDays(1), -1));
                }
                var isEnterPrevDayByDay = false;
                foreach (TimeInterval curInterval in dayIntervals)
                {
                    if (curInterval.StartTime.Date >= _startDate.Date &&
                        curInterval.StartTime.Date <= _endDate.Date)
                    {
                        continue;
                    }

                    var periodsInfo = new EmployeeTimePeriodsInfo(curInterval.StartTime, curInterval.EndTime, emplId,
                                                                  PrimaryEmployeeCalc, periodsDs.ПроходыСотрудников, true, isEnterPrevDayByDay);
                    isEnterPrevDayByDay = periodsInfo.IsEnterPrevDayByDay;
                    var internetAccessInfo =
                        new EmployeeInternetAccessInfo(curInterval.StartTime, curInterval.EndTime, emplId);

                    object linkCell = null;

                    if (periodsInfo.EntranceTime != null || periodsInfo.ExitTime != null ||
                        periodsInfo.ExitTimePrevDay != null && periodsInfo.EnterTimeNextDay != null)
                    {
                        linkCell = string.Format(
                            "<A href=\"#\" onclick=\"cmd('cmd', 'openDetails', 'id', '{0}', 'from', '{1}', 'to', '{2}');\"><IMG src=\"{3}detail.GIF\" border=\"0\" title=\"{4}\"></A>",
                            emplId, curInterval.StartTime, curInterval.EndTime, Global.Styles,
                            _resx.GetString("hPageSubTitleDetails2"));
                    }

                    var totalWorkTime   = periodsInfo.TotalWorkTime;
                    var totalAbsentTime = periodsInfo.TotalAbsentTime;

                    var strEntranceTime   = "";
                    var strExitTime       = "";
                    var isEnterAfterExit  = "";
                    var isEnterAfterExit2 = "";

                    if (periodsInfo.ExitTime != null)
                    {
                        strExitTime = ((DateTime)periodsInfo.ExitTime).ToString("HH:mm:ss");
                    }

                    if (periodsInfo.EntranceTime != null)
                    {
                        strEntranceTime = ((DateTime)periodsInfo.EntranceTime).ToString("HH:mm:ss");
                    }

                    if (periodsInfo.ExitTime != null && periodsInfo.EntranceTime != null &&
                        (DateTime)periodsInfo.EntranceTime > (DateTime)periodsInfo.ExitTime)
                    {
                        isEnterAfterExit  = "<div>00:00:00</div><hr />";
                        isEnterAfterExit2 = "<hr /><div>24:00:00</div>";
                    }

                    if (periodsInfo.ExitTime == null && periodsInfo.EntranceTime == null &&
                        periodsInfo.ExitTimePrevDay != null && periodsInfo.EnterTimeNextDay != null)
                    {
                        //strExitTime = String.Format("{0}-{1}-{2} {3}:{4}:{5}", ((DateTime)periodsInfo.ExitTimePrevDay).Year.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.ExitTimePrevDay).Month.ToString(CultureInfo.InvariantCulture), ((DateTime)periodsInfo.ExitTimePrevDay).Day.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.ExitTimePrevDay).Hour.ToString(CultureInfo.InvariantCulture), ((DateTime)periodsInfo.ExitTimePrevDay).Minute.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.ExitTimePrevDay).Second.ToString(CultureInfo.InvariantCulture));
                        strExitTime = ((DateTime)periodsInfo.ExitTimePrevDay).ToString("HH:mm:ss");
                        //strEntranceTime = String.Format("{0}-{1}-{2} {3}:{4}:{5}", ((DateTime)periodsInfo.EnterTimeNextDay).Year.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.EnterTimeNextDay).Month.ToString(CultureInfo.InvariantCulture), ((DateTime)periodsInfo.EnterTimeNextDay).Day.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.EnterTimeNextDay).Hour.ToString(CultureInfo.InvariantCulture), ((DateTime)periodsInfo.EnterTimeNextDay).Minute.ToString(CultureInfo.InvariantCulture),
                        //    ((DateTime)periodsInfo.EnterTimeNextDay).Second.ToString(CultureInfo.InvariantCulture));
                        strEntranceTime   = ((DateTime)periodsInfo.EnterTimeNextDay).ToString("HH:mm:ss");
                        isEnterAfterExit  = "<div>00:00:00</div><hr />";
                        isEnterAfterExit2 = "<hr /><div>24:00:00</div>";
                    }

                    if (periodsInfo.ExitTime == null && periodsInfo.EntranceTime != null &&
                        periodsInfo.EnterTimeNextDay != null)
                    {
                        strExitTime = "24:00:00";
                    }
                    if (periodsInfo.ExitTime != null && periodsInfo.EntranceTime == null &&
                        periodsInfo.ExitTimePrevDay != null)
                    {
                        strEntranceTime = "00:00:00";
                    }

                    object absentTime = null;
                    object workTime   = null;

                    if (totalAbsentTime.TotalSeconds > 0)
                    {
                        absentTime = string.Format("{0}:{1}:{2}", totalAbsentTime.Hours + totalAbsentTime.Days * 24,
                                                   totalAbsentTime.Minutes.ToString("D2"), totalAbsentTime.Seconds.ToString("D2"));
                    }

                    if (totalWorkTime.TotalSeconds > 0)
                    {
                        //workTime = String.Format("<P align=\"center\">{0}:{1}:{2}</P>", totalWorkTime.Hours + (totalWorkTime.Days * 24), totalWorkTime.Minutes.ToString("D2"),
                        //    totalWorkTime.Seconds.ToString("D2"));
                        workTime = string.Format("{0}:{1}:{2}", totalWorkTime.Hours + totalWorkTime.Days * 24,
                                                 totalWorkTime.Minutes.ToString("D2"), totalWorkTime.Seconds.ToString("D2"));
                        if (periodsInfo.HasErrors)
                        {
                            workTime = workTime + " *";
                        }
                    }

                    var internetAccessInfoCount = internetAccessInfo.Count;
                    var internetAccessCount     = "";
                    if (internetAccessInfoCount != 0)
                    {
                        internetAccessCount = internetAccessInfoCount.ToString(CultureInfo.InvariantCulture);
                    }

                    string internetAccessTotal;
                    var    internetAccessInfoTotal = internetAccessInfo.Total;
                    if (internetAccessInfoTotal == 0)
                    {
                        internetAccessTotal = "";
                    }
                    else
                    {
                        internetAccessTotal = new TimeSpan(0, 0, internetAccessInfoTotal).ToString();
                    }

                    _sourceTable.Rows.Add(linkCell, curInterval.StartTime, strEntranceTime, strExitTime, absentTime,
                                          workTime, totalAbsentTime, totalWorkTime, periodsInfo.HasErrors ? "errorRow" : "singleRow",
                                          internetAccessCount, internetAccessTotal, isEnterAfterExit, isEnterAfterExit2);
                    if (periodsInfo.HasErrors && !IsError)
                    {
                        IsError = true;
                    }
                }

                _emplId    = emplId;
                _startDate = startPeriod;
                _endDate   = endPeriod;
                //_maxIndex = EmployeeTimePeriodsInfo.GetMaxId(_startDate, _endDate, _emplId, -tz);
                //_needCheckIndex = (_maxIndex == EmployeeTimePeriodsInfo.GetMaxId(_emplId)) || (_maxIndex == -1);
            }
        }