private void Inquire_Click(object sender, RoutedEventArgs e)
        {
            //TODO : 계정 권한에 따라 접근을 거부하는 코드 필요.
            string accType = ParentWindow.Client.AccountType;

            if (!AuthorityChecker.CheckAuthority(accType, null, null, AccessType.Inquire, ObjectToAccess.Accounts))
            {
                MessageBox.Show("데이터에 접근할 권한이 없습니다.\n\n대기중인 계정 목록을 조회하려면 전 학년 총괄 관리자여야 합니다.",
                                "권한 없음", MessageBoxButton.OK, MessageBoxImage.Error);

                return;
            }

            ParentWindow.ChildManager.TryToShow <LoadingWindow>("서버와 통신 중...", (WaitCallback)((o) =>
            {
                ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
                {
                    TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "[교사 ID]", "[성명]", "[계정 구분]" }, "[교사 목록]",
                                                                              $"[가입 허가 여부]=True", "[성명]");
                    ParentWindow.Client.RequestDataSet(dataReq);

                    RecentTeachersReq = dataReq;
                })).Wait();
            }));

            this.IsEnabled = false;
        }
Beispiel #2
0
        private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
        {
            DataRow selectedRow;

            try
            {
                selectedRow = mStuListTable.Rows[StuDataGrid.SelectedIndex];
                SelectedStudentText.Text = $"현재 선택된 학생: {mCurrentGrade}학년 {mCurrentClass}반 {(string)selectedRow["번호"]}번 {(string)selectedRow["성명"]}";
            }
            catch (Exception)
            {
                ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("조회하고자 하는 학생을 정확히 선택해주십시오.", "학생 선택 실패", MessageBoxButton.OK, MessageBoxImage.Warning));
                return;
            }

            // 선택된 학생의 정해진 기간의 출석부 조회. (무단 기록이 있는 것만)
            ParentWindow.ChildManager.TryToShow <LoadingWindow>("서버와 통신 중...", (WaitCallback)((o) =>
            {
                ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
                {
                    TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "*" }, "[출석부]",
                                                                              $"[일자] BETWEEN {mCurrentFirst.ToSQLString()} AND {mCurrentSecond.ToSQLString()} AND [학년]={mCurrentGrade.ToSQLString()} AND [반]={mCurrentClass.ToSQLString()} AND [번호]={((string)selectedRow["번호"]).ToSQLString()} AND ({ONLY_FAULTS_WHERE})", null);
                    ParentWindow.Client.RequestDataSet(dataReq);

                    RecentAttReq = dataReq;
                })).Wait();
            }));

            mCurrentInquiredRow = selectedRow;
            this.IsEnabled      = false;
        }
Beispiel #3
0
        private void Inquire_Click(object sender, RoutedEventArgs e)
        {
            if (FirstDateControl.SelectedDate == null || SecondDateControl.SelectedDate == null)
            {
                ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("기간을 설정해주십시오.", "기간 입력 없음", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            if (FirstDateControl.SelectedDate.Value > SecondDateControl.SelectedDate.Value)
            {
                ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("기간이 올바르게 입력되지 않았습니다. 첫번째날이 두번째날보다 나중이여선 안됩니다.", "기간 입력 오류", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            string gradeStr = null, classStr = null;

            ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                gradeStr = ParentWindow.GradeCombo.Text;
                classStr = ParentWindow.ClassCombo.Text;
            })).Wait();

            //TODO : 계정 권한에 따라 접근을 거부하는 코드 필요.
            string accType = ParentWindow.Client.AccountType;

            if (!AuthorityChecker.CheckAuthority(accType, gradeStr, classStr, AccessType.Inquire, ObjectToAccess.StudentList))
            {
                MessageBox.Show("데이터에 접근할 권한이 없습니다.\n\n특정 학급의 출석부와 학생 명단을 조회하려면 그 학급의 담임이거나, 전 학년 총괄 관리자여야 합니다.",
                                "권한 없음", MessageBoxButton.OK, MessageBoxImage.Error);

                return;
            }

            ToExcel.IsEnabled = false;

            mCurrentGrade  = gradeStr;
            mCurrentClass  = classStr;
            mCurrentFirst  = FirstDateControl.SelectedDate.Value;
            mCurrentSecond = SecondDateControl.SelectedDate.Value;

            InquiredText.Text = $"{mCurrentFirst.ToShortDateString()} ~ {mCurrentSecond.ToShortDateString()}";

            ParentWindow.ChildManager.TryToShow <LoadingWindow>("서버와 통신 중...", (WaitCallback)((o) =>
            {
                // 해당 기간에 맞는 학생명단 요청
                ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
                {
                    TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "*" }, "[학생 명단]",
                                                                              $"[등록 날짜]<{SecondDateControl.SelectedDate.Value.ToSQLString()} AND [학년]={mCurrentGrade.ToSQLString()} AND [반]={mCurrentClass.ToSQLString()}", "Val([번호])");
                    ParentWindow.Client.RequestDataSet(dataReq);

                    RecentStuListReq = dataReq;
                })).Wait();
            }));

            this.IsEnabled = false;
        }
Beispiel #4
0
        public static DataSet DBSelect(TcpDataSetRequirement requirement)
        {
            if (requirement == null)
            {
                throw new ArgumentNullException("requirement");
            }

            return(DBSelect(string.Join(", ", requirement.Columns), requirement.TableName, requirement.Where, requirement.OrderBy));
        }
        public void Clear()
        {
            mCurrentClass = null;
            mCurrentGrade = null;
            mTable?.Clear();
            mOriginal?.Clear();
            RecentStuListReq = new TcpDataSetRequirement();

            AddStu.IsEnabled  = false;
            ToExcel.IsEnabled = false;
        }
        private void Inquire_Click(object sender, RoutedEventArgs e)
        {
            string gradeStr = null, classStr = null;

            ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                gradeStr = ParentWindow.GradeCombo.Text;
                classStr = ParentWindow.ClassCombo.Text;
            })).Wait();

            //TODO : 계정 권한에 따라 접근을 거부하는 코드 필요.
            string accType = ParentWindow.Client.AccountType;

            if (!AuthorityChecker.CheckAuthority(accType, gradeStr, classStr, AccessType.Inquire, ObjectToAccess.Attendance))
            {
                MessageBox.Show("데이터에 접근할 권한이 없습니다.\n\n특정 학급의 출석부를 조회하려면 그 학급의 담임이거나, 전 학년 총괄 관리자여야 합니다.",
                                "권한 없음", MessageBoxButton.OK, MessageBoxImage.Error);

                return;
            }

            MessageBoxResult?checkResult = CheckSave(true);

            if (checkResult != null)
            {
                if (checkResult.Value != MessageBoxResult.Yes && checkResult.Value != MessageBoxResult.No)
                {
                    return;
                }
            }

            if (DateControl.SelectedDate == null)
            {
                return;
            }

            mCurrentGrade = gradeStr;
            mCurrentClass = classStr;

            ParentWindow.ChildManager.TryToShow <LoadingWindow>("서버와 통신 중...", (WaitCallback)((o) =>
            {
                // 해당 날짜, 반에 대한 출석부가 생성되었는지 확인
                ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
                {
                    TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "*" }, "[출석부]",
                                                                              $"[일자]={DateControl.SelectedDate.Value.ToSQLString()} AND [학년]={mCurrentGrade.ToSQLString()} AND [반]={mCurrentClass.ToSQLString()}", "Val([번호])");
                    ParentWindow.Client.RequestDataSet(dataReq);

                    RecentAttReq = dataReq;
                })).Wait();
            }));

            this.IsEnabled = false;
        }
 public void Clear()
 {
     mTable?.Clear();
     mOriginal?.Clear();
     mCurrentClass              = null;
     mCurrentGrade              = null;
     RecentAttReq               = new TcpDataSetRequirement();
     DateControl.SelectedDate   = DateTime.Now;
     ToExcel.IsEnabled          = false;
     ToExcel_Selected.IsEnabled = false;
     TopCheckBox.IsChecked      = false;
 }
Beispiel #8
0
        public void Clear()
        {
            mCurrentGrade = null;
            mCurrentClass = null;
            RecentAttReq  = new TcpDataSetRequirement();
            mStuPenaltyList?.Clear();

            ToExcel.IsEnabled              = false;
            FirstDateControl.SelectedDate  = DateTime.Now;
            SecondDateControl.SelectedDate = DateTime.Now;
            MainDataGrid.DataContext       = null;
            InquiredText.Text              = "- ~ -";
            RefText.Text = "0";
        }
Beispiel #9
0
        public void Clear()
        {
            mStuListTable?.Clear();
            mFaultsTable?.Clear();
            mCurrentClass                  = null;
            mCurrentGrade                  = null;
            mCurrentInquiredRow            = null;
            RecentAttReq                   = new TcpDataSetRequirement();
            RecentStuListReq               = new TcpDataSetRequirement();
            FirstDateControl.SelectedDate  = DateTime.Now;
            SecondDateControl.SelectedDate = DateTime.Now;

            ToExcel.IsEnabled        = false;
            TopCheckBox.IsChecked    = false;
            InquiredText.Text        = "- ~ -";
            SelectedStudentText.Text = "";
        }
        public void Clear()
        {
            if (mLoading != null)
            {
                mLoading.Close();
            }

            mStudents?.Clear();
            mFaultsTable?.Clear();
            RecentAttReq = new TcpDataSetRequirement();
            FirstDateControl.SelectedDate  = DateTime.Now;
            SecondDateControl.SelectedDate = DateTime.Now;

            InquiredText.Text        = "- ~ -";
            SelectedStudentText.Text = "";

            ToExcel.IsEnabled = false;
        }
Beispiel #11
0
        static void Main(string[] args)
        {
            DatabaseManager.Initialize();

            Console.Write("서버 데이터베이스 accdb 파일의 경로를 입력하십시오: ");
            string path = Console.ReadLine();

            ServerDatabaseManager.Initialize(path);

            TcpDataSetRequirement stuListReq = new TcpDataSetRequirement(new string[] { "*" }, "[학생 명단]", null, "Val([번호])");
            DataSet stuList = DatabaseManager.DBSelect(stuListReq);

            int attEdited, stuEdited;
            int attEdited_Sum = 0, stuEdited_Sum = 0;

            foreach (DataRow row in stuList.Tables[0].Rows)
            {
                Console.WriteLine($"{row["학년"].ToString()}학년 {row["반"].ToString()}반 {row["번호"].ToString()}번호 작업 중...");

                TcpDataUpdate update = new TcpDataUpdate();
                update.TableName = "[출석부]";
                update.Setter.Add("[성명]", row["성명"].ToString().ToSQLString());
                update.Where = $"[학년]={row["학년"].ToString().ToSQLString()} AND [반]={row["반"].ToString().ToSQLString()} AND [번호]={row["번호"].ToString().ToSQLString()}";
                attEdited    = ServerDatabaseManager.DBUpdate(update);

                update           = new TcpDataUpdate();
                update.TableName = "[학생 명단]";
                update.Setter.Add("[성명]", row["성명"].ToString().ToSQLString());
                update.Where = $"[학년]={row["학년"].ToString().ToSQLString()} AND [반]={row["반"].ToString().ToSQLString()} AND [번호]={row["번호"].ToString().ToSQLString()}";
                stuEdited    = ServerDatabaseManager.DBUpdate(update);

                Console.WriteLine($"출석부에서 {attEdited}개, 학생 명단에서 {stuEdited}개 레코드 편집됨.\n");

                attEdited_Sum += attEdited;
                stuEdited_Sum += stuEdited;
            }

            Console.WriteLine($"최종적으로, 전체 출석부에서 {attEdited_Sum}개 레코드, 학생 명단에서 {stuEdited_Sum}개 레코드 편집됨.");

            ServerDatabaseManager.Close();
            DatabaseManager.Close();
        }
        private void Inquire_Click(object sender, RoutedEventArgs e)
        {
            string gradeStr = null, classStr = null;

            ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                gradeStr = ParentWindow.GradeCombo.Text;
                classStr = ParentWindow.ClassCombo.Text;
            })).Wait();

            //TODO : 계정 권한에 따라 접근을 거부하는 코드 필요.
            string accType = ParentWindow.Client.AccountType;

            if (!AuthorityChecker.CheckAuthority(accType, gradeStr, classStr, AccessType.Inquire, ObjectToAccess.StudentList))
            {
                MessageBox.Show("데이터에 접근할 권한이 없습니다.\n\n특정 학급의 학생 명단을 조회하려면 그 학급의 담임이거나, 전 학년 총괄 관리자여야 합니다.",
                                "권한 없음", MessageBoxButton.OK, MessageBoxImage.Error);

                return;
            }

            ToExcel.IsEnabled = false;

            mCurrentGrade = gradeStr;
            mCurrentClass = classStr;

            // 정해진 기간중 근태 불량 상태가 있는 출석부만 조회.
            ParentWindow.ChildManager.TryToShow <LoadingWindow>("서버와 통신 중...", (WaitCallback)((o) =>
            {
                ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
                {
                    TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "*" }, "[학생 명단]",
                                                                              $"[학년]={mCurrentGrade.ToSQLString()} AND [반]={mCurrentClass.ToSQLString()}", "Val([번호])");
                    ParentWindow.Client.RequestDataSet(dataReq);

                    RecentStuListReq = dataReq;
                })).Wait();
            }));

            this.IsEnabled = false;
        }
        public void Clear()
        {
            mTable?.Clear();
            mOriginal?.Clear();
            mEdited?.Clear();
            mCurrentClass            = null;
            mCurrentGrade            = null;
            RecentAttReq             = new TcpDataSetRequirement();
            RecentStuListReq         = new TcpDataSetRequirement();
            DateControl.SelectedDate = DateTime.Now;

            ToExcel.IsEnabled     = false;
            Set1.IsEnabled        = false;
            Set2.IsEnabled        = false;
            Set3.IsEnabled        = false;
            Set4.IsEnabled        = false;
            Set5.IsEnabled        = false;
            Set6.IsEnabled        = false;
            Save.IsEnabled        = false;
            Cancel.IsEnabled      = false;
            TopCheckBox.IsChecked = false;
        }
Beispiel #14
0
 public void Clear()
 {
     mTable?.Clear();
     TopCheckBox.IsChecked = false;
     RecentTeachersReq     = new TcpDataSetRequirement();
 }
 public void Clear()
 {
     mTable?.Clear();
     RecentTeachersReq = new TcpDataSetRequirement();
 }
        private void Client_ReceivedDataSetResult(object sender, ReceivedDataSetResultEventArgs e)
        {
            if (!e.Result.Success)
            {
                Debug.Error("서버로부터 데이터를 수신하는데 실패하였습니다.");
            }

            if (RecentAttReq.Equals(e.Result.Requirement))
            {
                this.Dispatcher.Invoke(() =>
                {
                    // 출석부가 이미 존재함. 준비 완료.
                    if (e.Result.Data.Tables[0].Rows.Count > 0)
                    {
                        ShowData(e.Result.Data.Tables[0]);

                        this.IsEnabled = true;

                        Set1.IsEnabled    = true;
                        Set2.IsEnabled    = true;
                        Set3.IsEnabled    = true;
                        Set4.IsEnabled    = true;
                        Set5.IsEnabled    = true;
                        Set6.IsEnabled    = true;
                        Save.IsEnabled    = false;
                        Cancel.IsEnabled  = false;
                        ToExcel.IsEnabled = true;

                        mEdited = new HashSet <int>();
                    }
                    // 출석부가 존재하지 않음. 학생 목록을 요청해서 새롭게 생성해야 함. (계정 권한에 관계없이 항상 추가)
                    else
                    {
                        TcpDataSetRequirement stuListReq = new TcpDataSetRequirement(new string[] { "*" }, "[학생 명단]", $"[학년]={mCurrentGrade.ToSQLString()} AND [반]={mCurrentClass.ToSQLString()}", null);
                        ParentWindow.Client.RequestDataSet(stuListReq);

                        RecentStuListReq = stuListReq;
                    }
                });

                return;
            }

            if (RecentStuListReq.Equals(e.Result.Requirement))
            {
                this.Dispatcher.Invoke(() =>
                {
                    // 학생 목록을 가져왔음. 이제 이를 이용하여 default 출석부 입력.
                    if (e.Result.Data.Tables[0].Rows.Count > 0)
                    {
                        ParentWindow.Client.InsertedData += Client_InsertedData;
                        InsertDefaultAttToServer(e.Result.Data.Tables[0]);
                    }
                    // 학생 목록 없음. 출석부 조회 불가.
                    else
                    {
                        ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("서버에 해당 학급 학생명단이 입력되지 않았습니다. 서버에 학생명단을 입력한 뒤 다시 시도하십시오.", "학생 명단 없음", MessageBoxButton.OK, MessageBoxImage.Warning));
                        this.IsEnabled = true;

                        Set1.IsEnabled    = false;
                        Set2.IsEnabled    = false;
                        Set3.IsEnabled    = false;
                        Set4.IsEnabled    = false;
                        Set5.IsEnabled    = false;
                        Set6.IsEnabled    = false;
                        Save.IsEnabled    = false;
                        Cancel.IsEnabled  = false;
                        ToExcel.IsEnabled = false;

                        mTable?.Clear();
                        mOriginal?.Clear();
                    }
                });

                return;
            }
        }
        private void Inquire_Click(object sender, RoutedEventArgs e)
        {
            if (FirstDateControl.SelectedDate == null || SecondDateControl.SelectedDate == null)
            {
                ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("기간을 설정해주십시오.", "기간 입력 없음", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            if (FirstDateControl.SelectedDate.Value > SecondDateControl.SelectedDate.Value)
            {
                ParentWindow.Dispatcher.Invoke(() => MessageBox.Show("기간이 올바르게 입력되지 않았습니다. 첫번째날이 두번째날보다 나중이여선 안됩니다.", "기간 입력 오류", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            if (MessageBox.Show("전교의 벌점을 조회하는 과정은 오래 걸릴 수 있습니다.\n계속하시겠습니까?", "전교 조회 전 경고", MessageBoxButton.YesNo, MessageBoxImage.Warning) != MessageBoxResult.Yes)
            {
                return;
            }

            //TODO : 계정 권한에 따라 접근을 거부하는 코드 필요.
            string accType = ParentWindow.Client.AccountType;

            if (!AuthorityChecker.CheckAuthority(accType, null, null, AccessType.Inquire, ObjectToAccess.Attendance))
            {
                MessageBox.Show("데이터에 접근할 권한이 없습니다.\n\n전교의 출석부를 조회하려면 전 학년 총괄 관리자여야 합니다.",
                                "권한 없음", MessageBoxButton.OK, MessageBoxImage.Error);

                return;
            }

            mCurrentFirst  = FirstDateControl.SelectedDate.Value;
            mCurrentSecond = SecondDateControl.SelectedDate.Value;

            InquiredText.Text = $"{mCurrentFirst.ToShortDateString()} ~ {mCurrentSecond.ToShortDateString()}";

            mLoading = new LoadingWindow("출석부를 가져오는 중...");
            double top = 0, left = 0;

            ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                top = ParentWindow.Top + ParentWindow.Height / 2 - mLoading.Height / 2;
                left = ParentWindow.Left + ParentWindow.Width / 2 - mLoading.Width / 2;
            })).Wait();

            mLoading.Top   = top;
            mLoading.Left  = left;
            mLoading.Owner = ParentWindow;

            mLoading.Show();

            // 해당 기간에 맞는 불량사항 있는 출석부 모두 요청
            ParentWindow.Dispatcher.BeginInvoke((Action)(() =>
            {
                TcpDataSetRequirement dataReq = new TcpDataSetRequirement(new string[] { "*" }, "[출석부]",
                                                                          $"[일자] BETWEEN {mCurrentFirst.ToSQLString()} AND {mCurrentSecond.ToSQLString()} AND ({ONLY_FAULTS_WHERE})", null);
                ParentWindow.Client.RequestDataSet(dataReq);

                RecentAttReq = dataReq;
            }));

            this.IsEnabled = false;
        }