コード例 #1
0
    // получаем часы переработок - возвращается 0 - если у человека 0 часов переработок. 1 - если у человека есть ненулевое количество переработок, -1 - нет такого сотрудника
    public int insertOvertimeHoursToDB(string employee_id, string start_period, string begda, string endda, int count_days, int month, int year, string accountant_id, int period_id)
    {
        SQLDB db = new SQLDB();
        Date dt = new Date();

        int day = 1;

        EmployeeList emp_list = new EmployeeList();

        List<TimekeeperHours> current = emp_list.getEmployeesTimekeeperHours(employee_id, start_period, begda, endda);
        List<HRHours> hr_current = emp_list.getEmployeesHRHours(employee_id, start_period, begda, endda);
        List<Schedule> schedule = emp_list.getEmployeesSchedule(employee_id, start_period, begda, endda);
        List<ScheduleDeflection> dschedule = emp_list.getEmployeesScheduleDeflection(employee_id, start_period, begda, endda);

        decimal overhours_count = db.getOverhoursSum(employee_id, start_period, begda, endda);

        bool t13 = false;
        bool diversity = false;

        if (overhours_count == 0)
        {
            db.insertOverhoursToManagement(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), 0, accountant_id, period_id);
            return 0;
        }

        if (overhours_count <= 8) t13 = true;
        else diversity = true;

        // если кол-во переработок больше 8 часов, то используем эти переменные
        decimal m111 = 0; // тип переработок M111 - сумма первых 2 часов переработок, кроме выходных
        decimal m122 = 0; // тип переработок M122 - сумма оставшихся часов и переработки в выходные и праздничные дни
        decimal m210 = 0; // тип переработок M210 - сумма только ночных переработок

        foreach (Schedule sch in schedule)
        {

            // если у нас день не совпадает с днем в графике, заполняю пустым квадратом
            int d = Convert.ToInt32(sch.DayPeriod);

            while (d != day)
            {
                if (day == count_days) break;
                day++;
            }

            HRHours hrh = hr_current.Find(delegate(HRHours h) { return h.Day == day.ToString(); });
            decimal hr_sum = 0;
            if (hrh != null)
                hr_sum = hrh.DayOverHours + hrh.NightOverHours;

            ScheduleDeflection sd = dschedule.Find(delegate(ScheduleDeflection dsch) { return Convert.ToInt32(dsch.DayPeriod) == day; });
            if (sd == null)
            {
                // если у нас выходной то считаем все переработки за этот день
                if (((sch.DaySchedule == "FREE") && (Convert.ToInt32(sch.TimeHours) == 0)) || (sch.DayScheduleVar == "F"))
                {
                    if (hrh != null)
                    {

                        db.insertOverhoursToManagement(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                        if (t13) db.insertOverhoursToT13(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                    }
                    if ((diversity) && (hrh != null)) m122 += hr_sum;
                }
                else        // если рабочий день
                {
                    if (hrh != null)
                    {
                        db.insertOverhoursToManagement(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                        if (t13) db.insertOverhoursToT13(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                    }
                    if ((diversity) && (hrh != null))
                    {
                        if (hr_sum <= 2) m111 += hr_sum;
                        else
                        {
                            m111 += 2;
                            m122 += (hr_sum - 2);
                        }
                        if (hrh.NightOverHours != 0) m210 += hrh.NightOverHours;
                    }

                }
            }
            else // !!!!!!!!!!!! Посмотреть внимательно, когда будет действовать блок закачки переработок в SAP !!!!!!!!!
            {
                // смотрим отклонение Отзыв из отпуска. Если в этот день есть переработка - пишем ее
                if (sd.AbsAttType.Equals("2000") || sd.AbsAttType.Equals("2001"))
                {
                    // если у нас выходной то считаем все переработки за этот день
                    if (((sch.DaySchedule == "FREE") && (Convert.ToInt32(sch.TimeHours) == 0)) || (sch.DayScheduleVar == "F"))
                    {
                        if (hrh != null)
                        {

                            db.insertOverhoursToManagement(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                            if (t13) db.insertOverhoursToT13(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                        }
                        if ((diversity) && (hrh != null)) m122 += hr_sum;
                    }
                    else        // если рабочий день
                    {
                        if (hrh != null)
                        {
                            db.insertOverhoursToManagement(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                            if (t13) db.insertOverhoursToT13(employee_id, start_period, begda, endda, dt.getDateToSQL(day, month, year), hr_sum, accountant_id, period_id);
                        }
                        if ((diversity) && (hrh != null))
                        {
                            if (hr_sum <= 2) m111 += hr_sum;
                            else
                            {
                                m111 += 2;
                                m122 += (hr_sum - 2);
                            }
                            if (hrh.NightOverHours != 0) m210 += hrh.NightOverHours;
                        }

                    }
                }
            }

            day++;
        }

        if (m111 > 0) db.insertOverhoursDiversity(employee_id, start_period, begda, endda, dt.getDateFromSAPToSQL(endda), m111, "M111", accountant_id, period_id);
        if (m122 > 0) db.insertOverhoursDiversity(employee_id, start_period, begda, endda, dt.getDateFromSAPToSQL(endda), m122, "M122", accountant_id, period_id);
        if (m210 > 0) db.insertOverhoursDiversity(employee_id, start_period, begda, endda, dt.getDateFromSAPToSQL(endda), m210, "M210", accountant_id, period_id);

        return 1;
    }