/// <summary> /// 添加 部门项目actived 改变时,触发事件 /// </summary> /// <param name="departmentEntity"></param> private void AttachEventToSubjectDepartment(OrderEntity departmentEntity) { ObservableCollection <FBEntity> listOfSubjectDepartmentFB = departmentEntity.GetRelationFBEntities(typeof(T_FB_SUBJECTDEPTMENT).Name); listOfSubjectDepartmentFB.ToList().ForEach(item => { item.Entity.PropertyChanged += new PropertyChangedEventHandler(SubjectDepartment_PropertyChanged); }); }
/// <summary> /// 添加 部门项目actived 改变时,触发事件 /// </summary> /// <param name="departmentEntity"></param> private void AttachEventToSubjectDepartment(OrderEntity departmentEntity) { ObservableCollection<FBEntity> listOfSubjectDepartmentFB = departmentEntity.GetRelationFBEntities(typeof(T_FB_SUBJECTDEPTMENT).Name); listOfSubjectDepartmentFB.ToList().ForEach(item => { item.Entity.PropertyChanged += new PropertyChangedEventHandler(SubjectDepartment_PropertyChanged); }); }
/// <summary> /// 处理 部门项目actived 改变时,相应的增减对应的岗位项目 /// /// </summary> /// <remarks> /// 1. 去除 SubjectPost的所有关联,如有跟其他实体有关联,再提交服务端时,可能会出错 /// 2. 从 RelationCollection中去掉 SubjectPost /// 3. 根据 SubjectDepartment 是否启用,对SubjectPost进行相应处理 /// Y.新增SubjectPost 到集合中 /// N.从集合中去除SubjectPost /// </remarks> /// <param name="sender"></param> /// <param name="e"></param> void SubjectDepartment_PropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == "ACTIVED" || e.PropertyName == "ISPERSON") { T_FB_SUBJECTDEPTMENT subjectDepartment = sender as T_FB_SUBJECTDEPTMENT; VirtualDepartment vd = this.currentOrderEntity.Entity as VirtualDepartment; OrderEntity curOrderEntity = this.dictDepartment[vd]; // 3.如果是不启用的部门科目,则从各个岗位项目对象中去除 SubjectPost, 否则,添加相应的subjectPost foreach (TreeViewItem item in this.currentTreeViewItem.Items) { OrderEntity oe = item.DataContext as OrderEntity; if (oe != null) { VirtualPost virtualPost = oe.Entity as VirtualPost; // 启用科目,添加新subjectpost. if (subjectDepartment.ACTIVED == 1) { if (e.PropertyName == "ACTIVED")//启用科目 { //FBEntity fbEntityPostNew = CreateSubjectPost(subjectDepartment, virtualPost, "ACTIVED"); //oe.FBEntity.AddFBEntities<T_FB_SUBJECTPOST>(new List<FBEntity> { fbEntityPostNew }); CreatePostEntity(virtualPost, item, "ACTIVED"); } else if (e.PropertyName == "ISPERSON")//修改科目 { oe = IsPersonChanged(oe, subjectDepartment); } } else // 从集合中去除相应的subjectPost { if (subjectDepartment.T_FB_SUBJECTPOST != null) { foreach (var postEnt in subjectDepartment.T_FB_SUBJECTPOST) { CreateNonActionSubjectPost(subjectDepartment, postEnt, virtualPost); } } ObservableCollection <FBEntity> fbEntities = oe.GetRelationFBEntities(typeof(T_FB_SUBJECTPOST).Name); fbEntities.RemoveAll(entity => { return((entity.Entity as T_FB_SUBJECTPOST).T_FB_SUBJECTDEPTMENT.SUBJECTDEPTMENTID == subjectDepartment.SUBJECTDEPTMENTID); }); } } else //处理修改部门数据后,默认处理岗位数据 { VirtualPost virtualPost = item.DataContext as VirtualPost; if (virtualPost == null) { continue; } // 启用科目,添加新subjectpost. if (subjectDepartment.ACTIVED == 1) { if (e.PropertyName == "ACTIVED")//启用科目 { // FBEntity fbEntityPostNew = CreateSubjectPost(subjectDepartment, virtualPost, "ACTIVED"); // curOrderEntity.FBEntity.AddFBEntities<T_FB_SUBJECTPOST>(new List<FBEntity> { fbEntityPostNew }); CreatePostEntity(virtualPost, item, "ACTIVED"); } else if (e.PropertyName == "ISPERSON")//修改科目 { curOrderEntity = IsPersonChanged(curOrderEntity, subjectDepartment); } } else // 从集合中去除相应的subjectPost { if (subjectDepartment.T_FB_SUBJECTPOST != null) { foreach (var postEnt in subjectDepartment.T_FB_SUBJECTPOST) { CreateNonActionSubjectPost(subjectDepartment, postEnt, virtualPost); } } ObservableCollection <FBEntity> fbEntities = curOrderEntity.GetRelationFBEntities(typeof(T_FB_SUBJECTPOST).Name); fbEntities.RemoveAll(entity => { return((entity.Entity as T_FB_SUBJECTPOST).T_FB_SUBJECTDEPTMENT.SUBJECTDEPTMENTID == subjectDepartment.SUBJECTDEPTMENTID); }); } } } } }
/// <summary> /// 创建或获取相应岗位科目 /// </summary> /// <param name="virtualPost"></param> /// <returns></returns> private OrderEntity CreatePostEntity(VirtualPost virtualPost, TreeViewItem treeViewItem, string strFlag) { ObservableCollection <FBEntity> listFBEntities = new ObservableCollection <FBEntity>(); OrderEntity oeDepartment = dictDepartment[virtualPost.VirtualDepartment]; // 已存在的岗位科目 ObservableCollection <FBEntity> listOfSubjectDepartmentFB = oeDepartment.GetRelationFBEntities(typeof(T_FB_SUBJECTDEPTMENT).Name); // 1. 获取所有已启用的部门科目 var itemsDepartmentActived = listOfSubjectDepartmentFB.Where(item => { return((item.Entity as T_FB_SUBJECTDEPTMENT).ACTIVED == 1); }); // 2. 遍历所有已启用的部门科目, 添加相应的岗位科目,已有科目的,则加上原有的,没有的,则新增 foreach (FBEntity entityDepartment in itemsDepartmentActived) { T_FB_SUBJECTDEPTMENT sd = entityDepartment.Entity as T_FB_SUBJECTDEPTMENT; // 是否已有岗位科目的记录 List <FBEntity> listPost = entityDepartment.GetRelationFBEntities(typeof(T_FB_SUBJECTPOST).Name, item => { return((item.Entity as T_FB_SUBJECTPOST).OWNERPOSTID == virtualPost.ID); }); // 已有岗位科目,添加。没有,就新增 if (listPost.Count > 0) { T_FB_SUBJECTPOST post = listPost[0].Entity as T_FB_SUBJECTPOST; if (post.ACTIVED != sd.ACTIVED) { listPost[0].FBEntityState = FBEntityState.Modified; } //岗位默认处理 if (post != null) { post = SubjectPostChanged(sd, post, strFlag); } listPost[0].Entity = post; listFBEntities.Add(listPost[0]); } else { //临时添加防止重复数据 var a = staticobpost.FirstOrDefault(item => (item.Entity as T_FB_SUBJECTPOST).OWNERPOSTID == virtualPost.ID && (item.Entity as T_FB_SUBJECTPOST).T_FB_SUBJECT != null && (item.Entity as T_FB_SUBJECTPOST).T_FB_SUBJECT.SUBJECTID == sd.T_FB_SUBJECT.SUBJECTID); if (a == null && sd.ACTIVED == 1) { FBEntity fbEntityPostNew = this.CreateSubjectPost(sd, virtualPost, strFlag); listFBEntities.Add(fbEntityPostNew); staticobpost.Add(fbEntityPostNew); } else { listFBEntities.Add(a); } } } FBEntity postFBEntity = virtualPost.ToFBEntity(); postFBEntity.AddFBEntities <T_FB_SUBJECTPOST>(listFBEntities); OrderEntity entityPost = new OrderEntity(postFBEntity); Binding binding = new Binding(); binding.Path = new PropertyPath("Entity.Name"); treeViewItem.SetBinding(TreeViewItem.HeaderProperty, binding); treeViewItem.DataContext = entityPost; EntityList.Add(entityPost); return(entityPost); }
/// <summary> /// 导入借款单 /// Creator:安凯航 /// 日期:2011年5月30日 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void btnImportBorrowData_Click(object sender, RoutedEventArgs e) { //导入时间 DateTime createTime = DateTime.Now; OpenFileDialog dialog = new OpenFileDialog() { Multiselect = false, Filter = "Excel 2007-2010 File(*.xlsx)|*.xlsx" }; bool? userClickedOK = dialog.ShowDialog(); // Process input if the user clicked OK. if (userClickedOK != true) { return; } try { //待保存数据列表 List<OrderEntity> orders = new List<OrderEntity>(); #region 读取Excel文件 XLSXReader reader = new XLSXReader(dialog.File); List<string> subItems = reader.GetListSubItems(); var maseters = reader.GetData(subItems[0]); var listm = maseters.ToDataSource(); var details = reader.GetData(subItems[1]); var listd = details.ToDataSource(); List<dynamic> masterList = new List<dynamic>(); foreach (var item in listm) { dynamic d = item; masterList.Add(d); } //排除第一行信息 masterList.Remove(masterList.First()); List<dynamic> detailList = new List<dynamic>(); foreach (var item in listd) { dynamic d = item; detailList.Add(d); } //排除第一行信息 detailList.Remove(detailList.First()); #endregion #region 添加主表 List<T_FB_BORROWAPPLYMASTER> import = new List<T_FB_BORROWAPPLYMASTER>(); foreach (var item in masterList) { //构造OrderEntity数据 OrderEntity oe = new OrderEntity(typeof(T_FB_BORROWAPPLYMASTER)); orders.Add(oe); T_FB_BORROWAPPLYMASTER t = oe.FBEntity.Entity as T_FB_BORROWAPPLYMASTER; t.BORROWAPPLYMASTERID = Guid.NewGuid().ToString(); t.BORROWAPPLYMASTERCODE = item.单据号; if (item.借款类型 == "普通借款") { t.REPAYTYPE = 1; } else if (item.借款类型 == "备用金借款") { t.REPAYTYPE = 2; } else if (item.借款类型 == "专项借款") { t.REPAYTYPE = 3; } else { continue; } t.REMARK = item.备注; import.Add(t); } #endregion #region 添加子表 foreach (var item in detailList) { OrderEntity oe = orders.FirstOrDefault(oen => { T_FB_BORROWAPPLYMASTER bm = oen.FBEntity.Entity as T_FB_BORROWAPPLYMASTER; if (bm.BORROWAPPLYMASTERCODE == item.单据号) { return true; } else { return false; } }); if (oe == null) { string message = "导入的借款单明细借款单号为\"" + item.单据号 + "\"的明细,没有相应的借款单对应.请检查借款Excel中是否有此借款单的数据"; throw new InvalidOperationException(message); } FBEntity fbdetail = oe.CreateFBEntity<T_FB_BORROWAPPLYDETAIL>(); T_FB_BORROWAPPLYDETAIL d = fbdetail.Entity as T_FB_BORROWAPPLYDETAIL; d.BORROWAPPLYDETAILID = Guid.NewGuid().ToString(); d.REMARK = item.摘要; d.BORROWMONEY = Convert.ToDecimal(item.借款金额); d.UNREPAYMONEY = Convert.ToDecimal(item.未还款金额); d.T_FB_SUBJECT = d.T_FB_SUBJECT ?? new T_FB_SUBJECT(); d.T_FB_SUBJECT.SUBJECTID = item.借款科目; d.CREATEDATE = createTime; d.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; d.UPDATEDATE = createTime; d.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; } #endregion //服务 OrderEntityService service = new OrderEntityService(); #region 得到科目信息 QueryExpression reExp = QueryExpressionHelper.Equal("OWNERID", SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID); QueryExpression exp = QueryExpressionHelper.Equal("OWNERPOSTID", SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID); exp.QueryType = "T_FB_BORROWAPPLYDETAIL"; exp.RelatedExpression = reExp; exp.IsUnCheckRight = true; #endregion #region 获取申请人信息 ObservableCollection<string> numbers = new ObservableCollection<string>(); masterList.ForEach(item => numbers.Add(item.申请人身份证号));//拿到所有身份证号 SMT.Saas.Tools.PersonnelWS.PersonnelServiceClient client = new Saas.Tools.PersonnelWS.PersonnelServiceClient(); client.GetEmployeesByIdnumberAsync(numbers); #endregion #region 先获取申请人信息,待申请人信息填充完毕之后进行下一步操作 client.GetEmployeesByIdnumberCompleted += new EventHandler<Saas.Tools.PersonnelWS.GetEmployeesByIdnumberCompletedEventArgs>((oo, ee) => { if (ee.Error == null) { string message = null; try { masterList.ForEach(m => { //添加owner和creator SMT.Saas.Tools.PersonnelWS.V_EMPLOYEEVIEW userview = null; try { userview = ee.Result.First(t => t.IDNUMBER == m.申请人身份证号); } catch (InvalidOperationException ex) { message = ex.Message + "\n" + "在系统中找不到身份证号为\"" + m.申请人身份证号 + "\"的,员工信息.也可能是您没有相应的权限."; throw new InvalidOperationException(message); } T_FB_BORROWAPPLYMASTER master = null; try { master = import.First(t => t.BORROWAPPLYMASTERCODE == m.单据号); } catch (InvalidOperationException ex) { message = ex.Message + "\n" + "导入的借款单明细借款单号为\"" + m.单据号 + "\"的明细,没有相应的借款单对应.请检查借款Excel中是否有此借款单的数据"; throw new InvalidOperationException(message); } master.OWNERCOMPANYID = userview.OWNERCOMPANYID; master.OWNERCOMPANYNAME = userview.OWNERCOMPANYID; master.OWNERDEPARTMENTID = userview.OWNERDEPARTMENTID; master.OWNERID = userview.EMPLOYEEID; master.OWNERPOSTID = userview.OWNERPOSTID; master.CREATECOMPANYID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyID; master.CREATECOMPANYNAME = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].CompanyName; master.CREATEDEPARTMENTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentID; master.CREATEDEPARTMENTNAME = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].DepartmentName; master.CREATEPOSTID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostID; master.CREATEPOSTNAME = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.UserPosts[0].PostName; master.CREATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; master.CREATEUSERNAME = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeName; master.CREATEDATE = createTime; master.UPDATEUSERID = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeID; master.UPDATEUSERNAME = SMT.SAAS.Main.CurrentContext.Common.CurrentLoginUserInfo.EmployeeName; master.UPDATEDATE = createTime; }); //填充完申请人信息之后开始填充科目信息 service.QueryFBEntities(exp); } catch (Exception ex) { SMT.SaaS.FrameworkUI.ChildWidow.ComfirmWindow.ConfirmationBoxs("导入出错", ex.Message, "确定", MessageIcon.Exclamation); } } }); #endregion #region 填充完申请人信息之后开始填充科目信息 service.QueryFBEntitiesCompleted += new EventHandler<QueryFBEntitiesCompletedEventArgs>((o, args) => { if (args.Error == null) { //构造明细科目及账务信息 string message = null; try { import.ForEach(m => { OrderEntity oe = orders.FirstOrDefault(oen => { T_FB_BORROWAPPLYMASTER bm = oen.FBEntity.Entity as T_FB_BORROWAPPLYMASTER; if (bm.BORROWAPPLYMASTERCODE == m.BORROWAPPLYMASTERCODE) { return true; } else { return false; } }); var dlist = oe.GetRelationFBEntities("T_FB_BORROWAPPLYDETAIL"); List<T_FB_BORROWAPPLYDETAIL> detailslist = new List<T_FB_BORROWAPPLYDETAIL>(); dlist.ForEach(ddd => { detailslist.Add(ddd.Entity as T_FB_BORROWAPPLYDETAIL); }); detailslist.ForEach(d => { FBEntity en = null; try { en = args.Result.First(a => ((T_FB_BORROWAPPLYDETAIL)a.Entity).T_FB_SUBJECT.SUBJECTCODE == d.T_FB_SUBJECT.SUBJECTID); } catch (InvalidOperationException ex) { message = ex.Message + "\n" + "导入的借款单明细中,在系统中找不到ID为\"" + d.T_FB_SUBJECT.SUBJECTID + "\"的科目,也可能是您没有相应的权限"; throw new InvalidOperationException(message); } T_FB_BORROWAPPLYDETAIL t = en.Entity as T_FB_BORROWAPPLYDETAIL; if (t != null) { t.T_FB_SUBJECT.T_FB_BORROWAPPLYDETAIL.Clear(); d.T_FB_SUBJECT = t.T_FB_SUBJECT; d.CHARGETYPE = t.CHARGETYPE; d.USABLEMONEY = t.USABLEMONEY; #region 清理科目信息中的无用数据 t.T_FB_SUBJECT.T_FB_BORROWAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_BUDGETACCOUNT.Clear(); t.T_FB_SUBJECT.T_FB_BUDGETCHECK.Clear(); t.T_FB_SUBJECT.T_FB_CHARGEAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_COMPANYBUDGETAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_COMPANYBUDGETMODDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_COMPANYBUDGETMODDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_COMPANYTRANSFERDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_DEPTBUDGETADDDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_DEPTBUDGETAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_DEPTTRANSFERDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_EXTENSIONORDERDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_PERSONBUDGETADDDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_PERSONBUDGETAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_PERSONMONEYASSIGNDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_REPAYAPPLYDETAIL.Clear(); t.T_FB_SUBJECT.T_FB_SUBJECTCOMPANY.Clear(); t.T_FB_SUBJECT.T_FB_SUBJECTDEPTMENT.Clear(); t.T_FB_SUBJECT.T_FB_SUBJECTPOST.Clear(); t.T_FB_SUBJECT.T_FB_TRAVELEXPAPPLYDETAIL.Clear(); #endregion } }); }); //保存 service.SaveList(orders); } catch (Exception ex) { SMT.SaaS.FrameworkUI.ChildWidow.ComfirmWindow.ConfirmationBoxs("导入出错", ex.Message, "确定", MessageIcon.Exclamation); } } }); #endregion #region 所有信息构造完成之后保存数据 service.SaveListCompleted += new EventHandler<ActionCompletedEventArgs<bool>>((s, evgs) => { if (evgs.Result) { SMT.SaaS.FrameworkUI.ChildWidow.ComfirmWindow.ConfirmationBox("导入成功", "导入成功", "确定"); } else { SMT.SaaS.FrameworkUI.ChildWidow.ComfirmWindow.ConfirmationBox("导入失败", "导入失败", "确定"); } }); #endregion } catch (Exception ex) { SMT.SaaS.FrameworkUI.ChildWidow.ComfirmWindow.ConfirmationBoxs("导入出错", ex.Message, "确定", MessageIcon.Exclamation); } }