Ejemplo n.º 1
0
 /// <summary>
 /// Возвращает все события пользователя за указанную дату.
 /// </summary>
 /// <param name="user">Пользователь.</param>
 /// <param name="date">Дата.</param>
 /// <returns>Все события пользователя за указанную дату.</returns>
 public static MoscowUserEvents[] GetUserEvents(MoscowUser user, DateTime date)
 {
     if (user == null)
         return new MoscowUserEvents[0];
     return GetUserEvents(user.USLName, date);
 }
Ejemplo n.º 2
0
    /// <summary>
    /// Возвращает дневную норму пользователя за сегодня.
    /// </summary>
    /// <param name="user">Пользователь.</param>
    /// <returns>Дневная норма пользователя за сегодня.</returns>
    private TimeSpan GetDayRate(MoscowUser user)
    {
        if (user == null)
            return TimeSpan.Zero;

        CalendarItem cItem = CalendarItem.GetCalendarItem(DateTime.Today);

        TimeSpan output;
        if (cItem == null)
        { output = new TimeSpan(8, 30, 0); }
        else
        { output = cItem.WorkTime;	}

        double seconds = output.TotalSeconds;
        seconds = seconds * user.PartTimeFactor;
        output = TimeSpan.FromSeconds(seconds);
        return output;
    }
Ejemplo n.º 3
0
    /// <summary>
    /// Возвращает массив постоянных пользователей.
    /// </summary>
    /// <returns>Массив постоянных пользователей.</returns>
    public static MoscowUser[] GetLongServiceUsers()
    {
        List<MoscowUser> coll = new List<MoscowUser>();

        try
        {
            DbProviderFactory dbFactory = DbProviderFactories.GetFactory( ConfigurationManager.ConnectionStrings["DBConnStr"].ProviderName );
            using (DbConnection connection = dbFactory.CreateConnection())
            {
                connection.ConnectionString = ConfigurationManager.ConnectionStrings["DBConnStr"].ConnectionString;
                using (DbCommand command = dbFactory.CreateCommand())
                {
                    command.Connection = connection;
                    command.CommandText = "SELECT Name_ld, FirstName, LastName, PartTimeFactor FROM Collaborators WHERE (DateDischarged IS NULL)";

                    connection.Open();

                    using( DbDataReader reader = command.ExecuteReader() )
                    {
                        while( reader.Read() )
                        {
                            MoscowUser user = new MoscowUser();
                            user.USLName = (string)reader["Name_ld"];
                            user.FirstName = (string)reader["FirstName"];
                            user.LastName = (string)reader["LastName"];
                            user.PartTimeFactor = (float)reader["PartTimeFactor"];
                            coll.Add(user);
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Logger.Log.Error(Resources.Strings.GetUsersListError, ex);
        }

        return coll.ToArray();
    }
Ejemplo n.º 4
0
    /// <summary>
    /// Возвращает статус пользователя.
    /// </summary>
    /// <param name="user">Пользователь.</param>
    /// <param name="userEvents">События пользователя.</param>
    /// <returns>Статус пользователя.</returns>
    private XMLSerializableUserStatusInfo GetUserStatus(MoscowUser user, MoscowUserEvents[] userEvents)
    {
        if (user == null)
            return null;
        if ((userEvents == null) || (userEvents.Length == 0))
        {
            XMLSerializableUserStatusInfo absentInfo = new XMLSerializableUserStatusInfo();
            absentInfo.UserID = -1; // Не определен общий идентификатор пользователя.
            absentInfo.USLName = user.USLName;
            absentInfo.UserName = user.FullName;
            absentInfo.EventType = WorkEventType.TimeOff;
            absentInfo.Status = GetEventName(absentInfo.EventType);
            return absentInfo;
        }

        XMLSerializableUserStatusInfo usInfo = new XMLSerializableUserStatusInfo();
        usInfo.UserID = -1; // Не определен общий идентификатор пользователя.
        usInfo.USLName = user.USLName;
        usInfo.UserName = user.FullName;

        WorkEventType? eventType = null;
        DateTime begin = DateTime.MaxValue;
        DateTime now = DateTime.Now;
        TimeSpan workDuration = TimeSpan.Zero;
        bool userWorked = false;
        bool workEventClosed = true;

        foreach (MoscowUserEvents curEvent in userEvents)
        {
            switch (curEvent.EventType)
            {
                case MoscowEventType.BusinessTrip:
                    eventType = WorkEventType.BusinessTrip;
                    break;
                case MoscowEventType.Ill:
                    eventType = WorkEventType.Ill;
                    break;
                case MoscowEventType.TrustIll:
                    eventType = WorkEventType.TrustIll;
                    break;
                case MoscowEventType.Vacation:
                    eventType = WorkEventType.Vacation;
                    break;
                case MoscowEventType.OffDay:
                    eventType = WorkEventType.Vacation;
                    break;
                case MoscowEventType.TakenDay:
                    eventType = WorkEventType.Vacation;
                    break;
                case MoscowEventType.WorkDay:
                    if (curEvent.BeginTime != null)
                    {
                        userWorked = true;
                        if (begin > curEvent.BeginTime.Value)
                            begin = curEvent.BeginTime.Value;
                        if (curEvent.EndTime != null)
                        {
                            workDuration += (curEvent.EndTime.Value - curEvent.BeginTime.Value);
                        }
                        else
                        {
                            DateTime bt = new DateTime(now.Year, now.Month, now.Day, curEvent.BeginTime.Value.Hour, curEvent.BeginTime.Value.Minute, curEvent.BeginTime.Value.Second);
                            workDuration += (now - bt);
                            workEventClosed = false;
                        }
                    }
                    break;
            }
        }

        if (eventType != null)
        {
            usInfo.EventType = eventType.Value;
            usInfo.Status = GetEventName(usInfo.EventType);
        }
        else
        {
            // Пользователь не работал.
            if (!userWorked)
            {
                usInfo.EventType = WorkEventType.TimeOff;
                usInfo.Status = GetEventName( WorkEventType.TimeOff );
            }
            else
            {
                // Пользователь работал
                usInfo.BeginWork = begin;
                if (workEventClosed)
                {
                    // Если рабочий интервал закрыт.
                    usInfo.EventType = WorkEventType.TimeOff;
                    usInfo.Status = GetEventName( WorkEventType.TimeOff );
                }
                else
                {
                    // Если рабочий интервал не закрыт.
                    usInfo.EventType = WorkEventType.MainWork;
                    usInfo.Status = GetEventName( WorkEventType.MainWork );
                }
                // Расчет времени окончания работы.
                TimeSpan restTime = GetDayRate(user) - workDuration;
                if (restTime < TimeSpan.Zero)
                    restTime = TimeSpan.Zero;
                usInfo.EndWork = now + restTime;
            }
        }

        return usInfo;
    }