/// <summary> /// Добавление нового отдела /// </summary> /// <param name="managerDepartment">Руководящий отдел</param> /// <param name="departmentType">Тип отдела</param> /// <returns></returns> public Dep CreateNewDepartment(Dep managerDepartment, DepartmentType departmentType) { Dep result = new Dep(); result.ManagerDepartment = managerDepartment; result.DepartmentType = departmentType; result.DepartmentName = "Не указано"; result.DepartmentSmallName = "Не указано"; Deps.InsertOnSubmit(result); return result; }
/// <summary> /// При создании модели перезаписывает отдел /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Model_Created(object sender, EventArgs e) { if (department != null) if (KadrController.Instance.Model.Deps.Where(dep => dep.id == department.id).Count()>0) department = KadrController.Instance.Model.Deps.Where(dep => dep.id == department.id).First() as Dep; }
/// <summary> /// Находит самый верхний узловой объект /// </summary> /// <param name="department"></param> /// <returns></returns> private static Dep FindMainDep(Dep department) { //находим узловой-отдел (самого верхнего уровня) Dep rootDep; rootDep = department; while (rootDep.ManagerDepartment != null) { rootDep = rootDep.ManagerDepartment; } return rootDep; }
public DepartmentDecorator(Dep department) { this.department = department; }
/// <summary> /// Создает (пересоздает) записи табелей для определенного отдела /// </summary> /// <param name="dep">Отдел</param> public void CreateTimeSheetRecords(Dep dep) { //получаем список сотрyдников отдела за период IEnumerable<GetFactStaffForTimeSheetResult> DepStaff = GetStaffByPeriod(dep); IEnumerable<TimeSheetFSWorkingDay> InsertedTSRecords = null; DeleteDepsTShRecords(dep); InsertedTSRecords = DepStaff.Select(depSt => new TimeSheetFSWorkingDay() { TimeSheet = this, idFactStaff = Convert.ToInt32(depSt.idFactStaff), StaffCount = Convert.ToDecimal(depSt.StaffCount), WorkingDaysCount = this.TimeSheetWorkingDayCount }).Distinct(); KadrController.Instance.Model.TimeSheetFSWorkingDays.InsertAllOnSubmit(InsertedTSRecords); KadrController.Instance.SubmitChanges(); }
/// <summary> /// Обновляет записи табеля для определенного отдела /// </summary> /// <param name="dep">Отдел</param> public void UpdateDepartmentsTimeSheet(Dep dep) { //получаем список сотрyдников отдела за период IEnumerable<GetFactStaffForTimeSheetResult> DepStaff = GetStaffByPeriod(dep).ToArray(); //удаляем записи, сотрудники которых не работали в периоде IEnumerable<TimeSheetFSWorkingDay> RecordsForDelete = GetStaffRecordsForDelete(DepStaff, dep); if (RecordsForDelete.Count() > 0) { KadrController.Instance.Model.TimeSheetFSWorkingDays.DeleteAllOnSubmit(RecordsForDelete); } KadrController.Instance.Model.SubmitChanges(); IEnumerable<TimeSheetFSWorkingDay> RecordsForInsert = GetStaffRecordsForInsert(DepStaff); KadrController.Instance.Model.TimeSheetFSWorkingDays.InsertAllOnSubmit(RecordsForInsert); KadrController.Instance.SubmitChanges(); }
/// <summary> /// Возвращает список записей табеля для удаления (строки не соответствуют штатке) /// </summary> /// <param name="staff">Общий список штатных единиц</param> /// <returns></returns> public IEnumerable<TimeSheetFSWorkingDay> GetStaffRecordsForDelete(IEnumerable<GetFactStaffForTimeSheetResult> staff, Dep dep) { IEnumerable<TimeSheetFSWorkingDay> StaffTShRecords = DepsTShRecords.Invoke(KadrController.Instance.Model, dep.id, id).ToArray(); IEnumerable<TimeSheetFSWorkingDay> RecordsForDelete = StaffTShRecords.Where(tsRec => !tsRec.IsClosed).ToArray(); return RecordsForDelete; }
/// <summary> /// Возвращает список сотрудников отдела для табеля /// </summary> /// <param name="dep">Отдел</param> /// <returns></returns> public IEnumerable<GetFactStaffForTimeSheetResult> GetStaffByPeriod(Dep dep) { if ((dep==null) || (dep.IsNull())) return GetStaffByPeriod().Where(st => st.idTypeWork != ExceptWorkType).ToArray(); else return GetStaffByPeriod().Where(st => st.idTypeWork!=ExceptWorkType).Where(staff => (staff.idDepartment == dep.id)).ToArray(); }
/// <summary> /// Возвращает список записей табеля, относящихся к отделy /// </summary> /// <param name="deps">Oтдел</param> public IEnumerable<TimeSheetFSWorkingDay> GetDepsTShRecords(Dep dep) { if (dep == null) return TimeSheetFSWorkingDays; else return KadrController.Instance.Model.TimeSheetFSWorkingDays.Where(tswd => (tswd.TimeSheet == this) && (tswd.FactStaff.PlanStaff.Dep == dep)); }
/// <summary> /// Удаляет записи табеля, относящиеся к отделe /// </summary> /// <param name="dep">Oтдел</param> public void DeleteDepsTShRecords(Dep dep) { IEnumerable<TimeSheetFSWorkingDay> DepTimeSheetRecords = GetDepsTShRecords(dep); if (DepTimeSheetRecords.Count() > 0) { KadrController.Instance.Model.TimeSheetFSWorkingDays.DeleteAllOnSubmit(DepTimeSheetRecords); } }
/*private void tsbCreateTimeSheet_Click(object sender, EventArgs e) { if (cbTimeSheet.SelectedItem == null) { MessageBox.Show("Выберите табель!"); return; } if ((cbTimeSheet.SelectedItem as TimeSheet).TimeSheetFSWorkingDays.Where(tsRecord => tsRecord.FactStaff.PlanStaff.Department == Department).Count() > 0) { if (MessageBox.Show("При пересоздании табеля все ваши изменения будут потеряны. Вы хотите продолжить?", "АИС Штатное расписание", MessageBoxButtons.OKCancel) == DialogResult.Cancel) { return; } } (cbTimeSheet.SelectedItem as TimeSheet).AddDepartmentsTShRecords(Department); LoadTimeSheetRecords(); }*/ public IEnumerable<Dep> GetDepList(Dep department) { return KadrController.Instance.Model.Deps.Where(dep => dep == department); }
/// <summary> /// Возвращает список записей табеля для удаления (строки не соответствуют штатке) /// </summary> /// <param name="staff">Общий список штатных единиц</param> /// <returns></returns> public IEnumerable<TimeSheetFSWorkingDay> GetStaffRecordsForDelete(IEnumerable<GetFactStaffForTimeSheetResult> staff, Dep dep) { IEnumerable<TimeSheetFSWorkingDay> StaffTShRecords = DepsTShRecords.Invoke(KadrController.Instance.Model, dep.id, id).ToArray(); IEnumerable<TimeSheetFSWorkingDay> RecordsForDelete = StaffTShRecords.Except( (from st in GetInsertedStaff(staff) join tsRec in TimeSheetFSWorkingDays on new { id = (int?)st.idFactStaff, StaffCount = (double?)st.StaffCount } equals new { id = (int?)tsRec.idFactStaff, StaffCount = (double?)tsRec.StaffCount } select new { TSRecord = tsRec }).Select(st => st.TSRecord)).ToArray(); return RecordsForDelete; }