private static void UngeneratePzYsyf(IRepository rep, 凭证 pz) { IList <应收应付款> ysyfk = (rep as Feng.NH.INHibernateRepository).List <应收应付款>(NHibernate.Criterion.DetachedCriteria.For <应收应付款>() .Add(NHibernate.Criterion.Expression.Eq("应收应付源", pz))); foreach (应收应付款 i in ysyfk) { rep.Delete(i); } rep.Initialize(pz.凭证费用明细, pz); foreach (凭证费用明细 pzfymx in pz.凭证费用明细) { 费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(pzfymx.费用项编号); rep.Initialize(pzfymx.费用, pzfymx); if (pzfymx.费用.Count > 0 && fyx.应收应付类型 != 应收应付类型.管理费用类型) { continue; } if (fyx.应收应付类型 == 应收应付类型.业务) { } else if (fyx.应收应付类型 == 应收应付类型.借款类型) { } else if (fyx.应收应付类型 == 应收应付类型.管理费用类型) { if (string.IsNullOrEmpty(s_非业务默认费用实体)) { throw new ArgumentException("必须指定一个非业务默认费用实体!"); } IList <费用> fys = new List <费用>(); foreach (费用 fy in pzfymx.费用) { if (fy.费用实体.ID == new Guid(s_非业务默认费用实体)) { fys.Add(fy); } } foreach (费用 fy in fys) { pzfymx.费用.Remove(fy); rep.Delete(fy); } } else if (fyx.应收应付类型 == 应收应付类型.其他) { } } }
private static void 批量生成费用(IRepository rep, 普通票 票, IEnumerable 箱s, 收付标志 收付标志, 合同费用项 htfyx, IList <业务费用理论值> llzs, bool mustGenerateFy) { 费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(htfyx.费用项编号); if (fyx.箱) { foreach (普通箱 箱 in 箱s) { GenerateFy(rep, 票, 箱, 收付标志, htfyx, llzs, mustGenerateFy); } } else if (fyx.票) { GenerateFy(rep, 票, null, 收付标志, htfyx, llzs, mustGenerateFy); } }
private static void 批量生成费用(IRepository rep, 车辆产值 产值, IEnumerable 任务s, 车队合同费用项 htfyx, IList <业务费用理论值> llzs, bool mustGenerateFy) { 费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(htfyx.费用项编号); if (fyx.箱) { foreach (任务 箱 in 任务s) { GenerateFy(rep, 产值, 箱, htfyx, llzs, mustGenerateFy); } } else if (fyx.票) { GenerateFy(rep, 产值, null, htfyx, llzs, mustGenerateFy); } }
private static void GenerateFy(IRepository rep, 普通票 票, 普通箱 箱, 收付标志 收付标志, 合同费用项 htfyx, IList <业务费用理论值> llzs, bool mustGenerateFy) { string 相关人 = Get相关人(rep, 票, 箱, htfyx); decimal?金额 = Get理论值(rep, 票, 箱, htfyx); if (金额.HasValue && 金额.Value == decimal.MinValue) { return; } bool llrHaveGenerated = false; foreach (业务费用理论值 i in llzs) { bool b = i.费用项编号 == htfyx.费用项编号 && i.收付标志 == 收付标志;; if (htfyx.是否判断相关人) { b &= i.相关人编号 == 相关人; } if (b && 箱 != null) { b &= i.箱Id == 箱.ID; } if (b) { llrHaveGenerated = true; break; } } 业务费用理论值 ywfylrz = null; if (!llrHaveGenerated) { if (金额.HasValue) { ywfylrz = new 业务费用理论值(); ywfylrz.费用实体 = 票; // new 普通票 { Id = 票.ID, Version = 票.Version, 费用实体类型编号 = 票.费用实体类型编号 }; ywfylrz.费用项编号 = htfyx.费用项编号; ywfylrz.金额 = 金额.Value; ywfylrz.票 = 票; ywfylrz.收付标志 = 收付标志; ywfylrz.相关人编号 = Get相关人(rep, 票, 箱, htfyx); if (箱 != null) { ywfylrz.箱 = 箱; ywfylrz.箱Id = 箱.ID; } (new HdBaseDao <业务费用理论值>()).Save(rep, ywfylrz); llzs.Add(ywfylrz); } } if (htfyx.是否生成实际费用) { bool generateFy = false; // 在外层,判断理论值是否生成过 if (!mustGenerateFy) { if (htfyx.是否空值全部生成) { // 金额为Null的时候判断时候生成过,没生成过也要生成 if (!金额.HasValue) { bool fyHaveGenerated = false; foreach (业务费用 i in 票.费用) { bool b = i.费用项编号 == htfyx.费用项编号 && i.收付标志 == 收付标志; if (htfyx.是否判断相关人) { b &= i.相关人编号 == 相关人; } if (b && 箱 != null) { b &= i.箱Id == 箱.ID; } if (b) { fyHaveGenerated = true; break; } } generateFy = !fyHaveGenerated; } } if (!generateFy) { // 只有理论值未生成过,且有理论值的情况下,准备生成费用 if (!llrHaveGenerated && ywfylrz != null) { // 如果理论值未生成过,要检查是否要生成费用 bool fyHaveGenerated = false; foreach (业务费用 i in 票.费用) { bool b = i.费用项编号 == htfyx.费用项编号 && i.收付标志 == 收付标志; if (htfyx.是否判断相关人) { b &= i.相关人编号 == 相关人; } if (b && 箱 != null) { b &= i.箱Id == 箱.ID; } if (b) { fyHaveGenerated = true; break; } } generateFy = !fyHaveGenerated; } else { generateFy = false; } } } else { generateFy = true; } if (generateFy) { bool fylbSubmitted = false; 费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(htfyx.费用项编号); //int fylbbh = fyx.收入类别.Value; //费用类别 fylb = EntityBufferCollection.Instance["费用类别"].Get(fylbbh) as 费用类别; //System.Diagnostics.Debug.Assert(fylb.大类 == "业务额外" || fylb.大类 == "业务常规" || fylb.大类 == "业务其他"); IList <费用信息> list = (rep as Feng.NH.INHibernateRepository).List <费用信息>(NHibernate.Criterion.DetachedCriteria.For <费用信息>() .Add(NHibernate.Criterion.Expression.Eq("费用项编号", htfyx.费用项编号)) .Add(NHibernate.Criterion.Expression.Eq("票.ID", 票.ID))); System.Diagnostics.Debug.Assert(list.Count <= 1); if (list.Count == 1) { if (收付标志 == 收付标志.收) { fylbSubmitted = list[0].Submitted; } else { fylbSubmitted = list[0].完全标志付; } } // 完全标志还未打 if (!fylbSubmitted) { // 不生成理论值为0的 if (!金额.HasValue || (金额.HasValue && 金额.Value != 0)) { 业务费用 item = new 业务费用(); item.费用实体 = 票; // new 普通票 { Id = 票.ID, Version = 票.Version, 费用实体类型编号 = 票.费用实体类型编号 }; item.费用项编号 = htfyx.费用项编号; item.金额 = 金额; item.票 = 票; item.收付标志 = 收付标志; item.相关人编号 = 相关人; if (箱 != null) { item.箱 = 箱; item.箱Id = 箱.ID; } (new 业务费用Dao()).Save(rep, item); 票.费用.Add(item); } } } } }
private static void GeneratePzYsyf(IRepository rep, 凭证 pz) { rep.Initialize(pz.凭证费用明细, pz); foreach (凭证费用明细 pzfymx in pz.凭证费用明细) { rep.Initialize(pzfymx.费用, pzfymx); 费用项 fyx = EntityBufferCollection.Instance.Get <费用项>(pzfymx.费用项编号); if (pzfymx.费用.Count > 0) { // 通过对账单包进来的 if (fyx.应收应付类型 == 应收应付类型.业务) { 应收应付款 ysyfk = new 应收应付款(); ysyfk.IsActive = true; ysyfk.费用项编号 = pzfymx.费用项编号; ysyfk.结算期限 = pz.日期; ysyfk.金额 = -pzfymx.金额; // 取反 ysyfk.日期 = pz.日期; ysyfk.收付标志 = pzfymx.收付标志; ysyfk.相关人编号 = pzfymx.相关人编号; ysyfk.业务类型编号 = pzfymx.业务类型编号.Value; ysyfk.应收应付源 = pz; ysyfk.备注 = pzfymx.备注; (new HdBaseDao <应收应付款>()).Save(rep, ysyfk); } continue; } if (fyx.应收应付类型 == 应收应付类型.业务) { 应收应付款 ysyfk = new 应收应付款(); ysyfk.IsActive = true; ysyfk.费用项编号 = pzfymx.费用项编号; ysyfk.结算期限 = pz.日期; ysyfk.金额 = -pzfymx.金额; // 取反 ysyfk.日期 = pz.日期; ysyfk.收付标志 = pzfymx.收付标志; ysyfk.相关人编号 = pzfymx.相关人编号; ysyfk.业务类型编号 = pzfymx.业务类型编号.Value; ysyfk.应收应付源 = pz; ysyfk.备注 = pzfymx.备注; (new HdBaseDao <应收应付款>()).Save(rep, ysyfk); } else if (fyx.应收应付类型 == 应收应付类型.借款类型) { 应收应付款 ysyfk = new 应收应付款(); ysyfk.IsActive = true; ysyfk.费用项编号 = "002"; // 其他 //IList<GridColumnInfo> infos = new List<GridColumnInfo> { // new GridColumnInfo { Caption = "结算期限", DataControlVisible = "True", DataControlType = "MyDatePicker", PropertyName = "结算期限", NotNull = "True"} , // }; //ArchiveDataControlForm form = new ArchiveDataControlForm(new ControlManager(null), infos); //if (form.ShowDialog() == DialogResult.OK) //{ // ysyfk.结算期限 = (DateTime)form.DataControls["结算期限"].SelectedDataValue; //} //else //{ // throw new InvalidUserOperationException("借款必须填写结算期限!"); //} ysyfk.结算期限 = pzfymx.结算期限.HasValue ? pzfymx.结算期限.Value : pz.日期; ysyfk.金额 = pzfymx.金额; ysyfk.日期 = pz.日期; ysyfk.收付标志 = pzfymx.收付标志 == 收付标志.付 ? 收付标志.收 : 收付标志.付; ysyfk.相关人编号 = pzfymx.相关人编号; ysyfk.业务类型编号 = pzfymx.业务类型编号.Value; ysyfk.应收应付源 = pz; ysyfk.备注 = pzfymx.备注; (new HdBaseDao <应收应付款>()).Save(rep, ysyfk); } else if (fyx.应收应付类型 == 应收应付类型.管理费用类型) { 非业务费用 fy = new 非业务费用(); fy.IsActive = true; fy.费用项编号 = pzfymx.费用项编号; fy.金额 = pzfymx.金额; fy.收付标志 = pzfymx.收付标志; fy.相关人编号 = pzfymx.相关人编号; fy.备注 = pzfymx.备注; if (string.IsNullOrEmpty(s_非业务默认费用实体)) { throw new ArgumentException("必须指定一个非业务默认费用实体!"); } fy.费用实体 = rep.Get <费用实体>(new Guid(s_非业务默认费用实体)); if (fy.费用实体 == null) { throw new ArgumentException("指定的非业务默认费用实体不存在!"); } fy.凭证费用明细 = pzfymx; (new 非业务费用Dao()).Save(rep, fy); } else if (fyx.应收应付类型 == 应收应付类型.待分摊类型) { 应收应付款 ysyfk = new 应收应付款(); ysyfk.IsActive = true; ysyfk.费用项编号 = "004"; // 其他 ysyfk.结算期限 = pzfymx.结算期限.HasValue ? pzfymx.结算期限.Value : pz.日期; ysyfk.金额 = pzfymx.金额; ysyfk.日期 = pz.日期; ysyfk.收付标志 = pzfymx.收付标志 == 收付标志.付 ? 收付标志.收 : 收付标志.付; ysyfk.相关人编号 = "900031"; ysyfk.业务类型编号 = pzfymx.业务类型编号.Value; ysyfk.应收应付源 = pz; ysyfk.备注 = pzfymx.备注; (new HdBaseDao <应收应付款>()).Save(rep, ysyfk); } else if (fyx.应收应付类型 == 应收应付类型.其他) { } } }