Example #1
0
        /// <summary>
        /// Копирующий конструктор.
        /// </summary>
        /// <param name="usInfo">Информация о статусе пользователя.</param>
        public XMLSerializableUserStatusInfo( UserStatusInfo usInfo )
        {
            if( usInfo == null )
                throw new ArgumentNullException( "usInfo" );

            UserID = usInfo.UserID;
            UserName = usInfo.UserName;
            USLName = usInfo.USLName;
            Status = usInfo.Status;
            BeginWork = usInfo.BeginWork;
            EndWork = usInfo.EndWork;
            EventType = (WorkEventType) usInfo.EventType.ID;
        }
Example #2
0
        /// <summary>
        /// Возвращает список информаций о статусах пользователей за указанную дату.
        /// </summary>
        /// <param name="date">Дата для получения информации о пользователях.</param>
        /// <returns>Список информаций о статусах пользователей за указанную дату.</returns>
        public static UserStatusInfo[] GetStatusesList( DateTime date )
        {
            List<UserStatusInfo> usersList = new List<UserStatusInfo>();
            Person[] activeUsers = GetEmployeeList();

            if( ( activeUsers == null ) || ( activeUsers.Length == 0 ) )
                return usersList.ToArray();

            foreach( Person user in activeUsers )
            {
                // Отсеять московских служащих.
                if( user.EmployeesUlterSYSMoscow )
                    continue;

                // Получить последнее событие пользователя.
                WorkEvent lastEvent = WorkEvent.GetCurrentEventOfDate( user.ID.Value, date, true );
                // Для получения времени рабочего периода.
                WorkEvent workEvent = null;

                // Получить статус пользователя.
                UptimeEventType status;

                if( lastEvent == null )
                {
                    // Нет событий за сегодня. Человек не приходил.
                    status = UptimeEventType.GetEventType( (int) WorkEventType.TimeOff );
                }
                else
                {
                    switch( lastEvent.EventType )
                    {
                        case WorkEventType.BusinessTrip:
                        case WorkEventType.Ill:
                        case WorkEventType.TrustIll:
                        case WorkEventType.Vacation:
                            status = UptimeEventType.GetEventType( lastEvent.EventTypeID );
                            break;

                        case WorkEventType.MainWork:
                            workEvent = lastEvent;
                            if( lastEvent.IsOpen )
                            { status = UptimeEventType.GetEventType( (int) WorkEventType.MainWork ); }
                            else
                            { status = UptimeEventType.GetEventType( (int) WorkEventType.TimeOff ); }
                            break;

                        default:
                            workEvent = WorkEvent.GetMainWorkEvent( user.ID.Value, date );
                            if( lastEvent.IsOpen )
                            { status = UptimeEventType.GetEventType( lastEvent.EventTypeID ); }
                            else
                            {
                                if( workEvent == null )
                                { status = UptimeEventType.GetEventType( (int) WorkEventType.TimeOff ); }
                                else
                                {
                                    if( workEvent.IsOpen )
                                    { status = UptimeEventType.GetEventType( (int) WorkEventType.MainWork ); }
                                    else
                                    { status = UptimeEventType.GetEventType( (int) WorkEventType.TimeOff ); }
                                }
                            }
                            break;
                    }
                }

                // Создать информацию о пользователе.
                String loginName = string.Empty;
                IList<string> dnNames = user.DomainNames;
                if( dnNames != null && dnNames.Count > 0 )
                {
                    loginName = dnNames[ 0 ];
                    int startIndex = loginName.LastIndexOf( "\\" );
                    if( !string.IsNullOrEmpty( loginName ) && ( startIndex > 0 ) )
                        loginName = loginName.Substring( startIndex + 1, 3 );
                }

                UserStatusInfo info;
                if( workEvent == null )
                    info = new UserStatusInfo( user.ID.Value, user.FullName, loginName, status );
                else
                {
                    UserTimeCalculator timesCalc = new UserTimeCalculator( user.ID.Value );

                    // Время до окончания дня.
                    TimeSpan todayRest = timesCalc.GetRateWithLunch( DateTime.Today );

                    // Окончание работы (расчётное или фактическое).
                   /* if (workEvent.BeginTime == workEvent.EndTime)
                        workEvent.EndTime = (todayRest.TotalMilliseconds > 0)
                                                ? workEvent.BeginTime.Add(todayRest)
                                                : DateTime.Now;*/
                        /*if( todayRest.TotalMilliseconds > 0 )
                            workEvent.EndTime = DateTime.Now.Add( todayRest );
                        else
                            workEvent.EndTime = DateTime.Now;*/

                    info = new UserStatusInfo( user.ID.Value, user.FullName, loginName, status, workEvent.BeginTime, workEvent.EndTime );
                }

                usersList.Add( info );
            }

            return usersList.ToArray();
        }