Пример #1
0
        public WorkingLogSubordinate(HtmlDocument doc, int today)
        {
            // 名前
            var personNameNode = doc.DocumentNode.SelectSingleNode("//span[@id='ctl00_ContentMain_lblName']");

            if (personNameNode != null)
            {
                PersonName = personNameNode.InnerText;
            }

            var detailTdNodes = doc.DocumentNode.SelectNodes("//table[@id='ctl00_ContentMain_grdMonthlyTotal']//tr[2]/td");

            if (detailTdNodes != null)
            {
                // 所定労働時間
                TotalMonthlyNeeds = Converter.ToTimeSpan(detailTdNodes[0].InnerText);
                // 勤務時間
                TotalMonthlyCurrent = Converter.ToTimeSpan(detailTdNodes[1].InnerText);
                // 不就労
                TotalMonthlyRemains = Converter.ToTimeSpan(detailTdNodes[7].InnerText);
            }

            // 日々の履歴
            Histories = new List <LogItem>();

            var trNodes = doc.DocumentNode.SelectNodes("//table[@id='ctl00_ContentMain_gvResults']//tr");

            // 1行目はヘッダなので、2行目から検索
            for (int i = 1, len = trNodes.Count; i < len; ++i)
            {
                var trNode = trNodes[i];
                var log    = new LogItem();

                // 日付
                log.Day = i;

                // 過去の日付かどうか
                var isPastDay = log.Day < today;

                // 平日かどうか
                var bgColor = trNode.GetAttributeValue("style", "");
                log.IsWeekday = (bgColor.Contains("background-color:White;") || (bgColor.Contains("background-color:#F0F0F0;")));

                var tdNodes = trNode.SelectNodes("./td");

                // 年月日
                log.Date = tdNodes[0].FirstChild.InnerText;

                // 変更
                var inputNode = tdNodes[6].FirstChild;
                log.IsChangeButtonEnabled = (inputNode != null && inputNode.GetAttributeValue("disabled", "") != "disabled");

                // 勤務時間
                var workingHour = tdNodes[8].InnerText;
                log.WorkingHour = Converter.ToTimeSpan(workingHour);

                // 昨日までで、入力すべき日に入力しているかどうか
                if (isPastDay && log.IsWeekday && string.IsNullOrEmpty(workingHour))
                {
                    log.HasEmptyForm = true;
                    EmptyFormsCount++;
                }

                // 標準差
                log.Overtime = Converter.ToTimeSpan(tdNodes[10].InnerText);

                // 勤務時間の累計
                if (isPastDay && log.IsWeekday)
                {
                    // 累計残業時間
                    TotalMonthlyOvertime += log.Overtime;
                }

                Histories.Add(log);
            }
        }
Пример #2
0
        public WorkingLogOwn(HtmlDocument doc, int today)
        {
            // 名前
            var personNameNode = doc.DocumentNode.SelectSingleNode("//span[@id='ctl00_ContentMain_PageHeaderUC1_lblEmployeeName']");

            if (personNameNode != null)
            {
                PersonName = personNameNode.InnerText;
            }

            // 月次確定
            var monthlyCommitButtonNode = doc.DocumentNode.SelectSingleNode("//input[@id='ctl00_ContentMain_MonthlyCommitButton']");

            if (monthlyCommitButtonNode != null)
            {
                IsMonthlyCommitButtonEnabled = (monthlyCommitButtonNode.GetAttributeValue("disabled", "") != "disabled");
            }

            var detailTdNodes = doc.DocumentNode.SelectNodes("//table[@id='ctl00_ContentMain_grdMonthlyTotal']//tr[2]/td");

            if (detailTdNodes != null)
            {
                // 所定労働時間
                TotalMonthlyNeeds = Converter.ToTimeSpan(detailTdNodes[0].InnerText);
                // 勤務時間
                TotalMonthlyCurrent = Converter.ToTimeSpan(detailTdNodes[1].InnerText);
                // 不就労
                TotalMonthlyRemains = Converter.ToTimeSpan(detailTdNodes[7].InnerText);
            }

            // 日々の履歴
            Histories = new List <LogItem>();

            var trNodes = doc.DocumentNode.SelectNodes("//div[@id='ctl00_ContentMain_pnlAttendData']//tr");

            // 1行目はヘッダなので、2行目から検索
            for (int i = 1, len = trNodes.Count; i < len; ++i)
            {
                var trNode = trNodes[i];
                var log    = new LogItem();

                // 日付
                log.Day = i;

                // 過去の日付かどうか
                var isPastDay = log.Day < today;

                // 平日かどうか
                var bgColor = trNode.GetAttributeValue("style", "");
                log.IsWeekday = bgColor.Contains("background-color:White;");

                // 勤務時間が入力されているかどうか
                var hasWorkingTime = false;

                foreach (var tdNode in trNode.ChildNodes)
                {
                    var className = tdNode.GetAttributeValue("class", null);
                    var idName    = tdNode.GetAttributeValue("id", null);

                    if (className == "DateWod")
                    {
                        // 年月日
                        log.Date = tdNode.InnerText;
                    }
                    else if (className == "AttendDivBtn")
                    {
                        // 「変更」ボタンが押せるかどうか
                        var inputNode = tdNode.FirstChild;
                        log.IsChangeButtonEnabled = (inputNode.GetAttributeValue("disabled", "") != "disabled");
                    }
                    else if (idName != null)
                    {
                        if (idName.EndsWith("_celFreeColumn1"))
                        {
                            // 勤務時間
                            hasWorkingTime  = true;
                            log.WorkingHour = Converter.ToTimeSpan(tdNode.InnerText);
                        }
                        else if (idName.EndsWith("_celFreeColumn2"))
                        {
                            // 標準差
                            log.Overtime = Converter.ToTimeSpan(tdNode.InnerText);
                        }
                    }
                }

                // 昨日までで、入力すべき日に入力しているかどうか
                if (isPastDay && log.IsWeekday && !hasWorkingTime)
                {
                    log.HasEmptyForm = true;
                    EmptyFormsCount++;
                }

                // 勤務時間の累計
                if (hasWorkingTime)
                {
                    // 累計残業時間
                    TotalMonthlyOvertime += log.Overtime;
                    // 働いた最後の日
                    LastWorkdayLog = log;
                }

                if (log.IsWeekday)
                {
                    // 最後の平日を記憶
                    lastWeekdayLog = log;
                }

                Histories.Add(log);
            }
        }