private static void ProcessFywithSl(业务费用理论值 ywfylrz, decimal d) { IDefinition def = ServiceProvider.GetService<IDefinition>(); if (ywfylrz.费用项编号 == "203") // 轮胎补贴 { decimal? dd = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("轮胎补贴率")); if (dd.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * dd; } else { throw new ArgumentException("数据库中必须配置轮胎补贴率!"); } } else if (ywfylrz.费用项编号 == "204" || ywfylrz.费用项编号 == "205") // 油费 { decimal? czyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("车主油价")); decimal? jsyyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("驾驶员油价")); decimal? cbyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("成本油价")); if (ywfylrz.车辆 != null) { switch (ywfylrz.车辆.车辆类别) { case 车辆类别.自有车: case 车辆类别.代管车: if (ywfylrz.费用归属 == 费用归属.对外) { if (cbyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * cbyj; } else { throw new ArgumentException("数据库中必须配置成本油价!"); } } else { if (jsyyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * jsyyj; } else { throw new ArgumentException("数据库中必须配置驾驶员油价!"); } } break; case 车辆类别.挂靠车: if (ywfylrz.费用归属 == 费用归属.对外) { if (cbyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * cbyj; } else { throw new ArgumentException("数据库中必须配置成本油价!"); } } else if (ywfylrz.费用归属 == 费用归属.车主) { if (ywfylrz.费用项编号 == "204") //油费 { if (czyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * czyj; } else { throw new ArgumentException("数据库中必须配置车主油价!"); } } else if (ywfylrz.费用项编号 == "205") //定耗油 { if (czyj.HasValue && jsyyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * (czyj - jsyyj); } else { throw new ArgumentException("数据库中必须配置车主油价、驾驶员油价!"); } } } else { throw new ArgumentException("费用归属不规范!"); } break; case 车辆类别.外协车: break; default: throw new ArgumentException("车辆类别不规范!"); } } } else { ywfylrz.金额 = d; } }
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 (b && 任务 != null) { b &= i.任务ID == 任务.ID; } if (b) { llrHaveGenerated = true; break; } } 业务费用理论值 ywfylrz = null; if (!llrHaveGenerated) { if (金额.HasValue) { ywfylrz = new 业务费用理论值(); ywfylrz.费用实体 = 产值; ywfylrz.费用项编号 = htfyx.费用项编号; ywfylrz.票 = 产值; ywfylrz.收付标志 = htfyx.收付标志; ywfylrz.相关人编号 = Get相关人(rep, 产值, 任务, htfyx); ywfylrz.车辆编号 = 产值.车辆编号; ywfylrz.费用归属 = (htfyx as 车队合同费用项).费用归属; //ywfylrz.金额 = 金额.Value; ProcessFywithSl(ywfylrz, 金额.Value); 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.费用归属 == htfyx.费用归属; 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.费用归属 == htfyx.费用归属; 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; 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 (htfyx.收付标志 == 收付标志.收) { fylbSubmitted = list[0].Submitted; } else { fylbSubmitted = list[0].完全标志付; } } // 完全标志还未打 if (!fylbSubmitted) { // 不生成理论值为0的 if (!金额.HasValue || (金额.HasValue && 金额.Value != 0)) { 业务费用 item = new 业务费用(); item.费用实体 = 产值; item.车辆产值 = 产值; item.费用项编号 = htfyx.费用项编号; item.收付标志 = htfyx.收付标志; item.相关人编号 = 相关人; item.车辆编号 = 产值.车辆编号; item.费用归属 = (htfyx as 车队合同费用项).费用归属; //item.金额 = 金额; if (金额 != null) { ProcessFywithSl(item, 金额.Value); } else { item.金额 = 金额; } if (任务 != null) { item.任务 = 任务; } (new 业务费用Dao()).Save(rep, item); 产值.费用.Add(item); } } } } }
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 (b && 任务 != null) { b &= i.任务ID == 任务.ID; } if (b) { llrHaveGenerated = true; break; } } 业务费用理论值 ywfylrz = null; if (!llrHaveGenerated) { if (金额.HasValue) { ywfylrz = new 业务费用理论值(); ywfylrz.费用实体 = 产值; ywfylrz.费用项编号 = htfyx.费用项编号; ywfylrz.票 = 产值; ywfylrz.收付标志 = htfyx.收付标志; ywfylrz.相关人编号 = Get相关人(rep, 产值, 任务, htfyx); ywfylrz.车辆编号 = 产值.车辆编号; ywfylrz.费用归属 = (htfyx as 车队合同费用项).费用归属; //ywfylrz.金额 = 金额.Value; ProcessFywithSl(ywfylrz, 金额.Value); 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.费用归属 == htfyx.费用归属; 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.费用归属 == htfyx.费用归属; 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; 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 (htfyx.收付标志 == 收付标志.收) { fylbSubmitted = list[0].Submitted; } else { fylbSubmitted = list[0].完全标志付; } } // 完全标志还未打 if (!fylbSubmitted) { // 不生成理论值为0的 if (!金额.HasValue || (金额.HasValue && 金额.Value != 0)) { 业务费用 item = new 业务费用(); item.费用实体 = 产值; item.车辆产值 = 产值; item.费用项编号 = htfyx.费用项编号; item.收付标志 = htfyx.收付标志; item.相关人编号 = 相关人; item.车辆编号 = 产值.车辆编号; item.费用归属 = (htfyx as 车队合同费用项).费用归属; //item.金额 = 金额; if (金额 != null) { ProcessFywithSl(item, 金额.Value); } else { item.金额 = 金额; } if (任务 != null) { item.任务 = 任务; } (new 业务费用Dao()).Save(rep, item); 产值.费用.Add(item); } } } } }
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 ProcessFywithSl(业务费用理论值 ywfylrz, decimal d) { IDefinition def = ServiceProvider.GetService <IDefinition>(); if (ywfylrz.费用项编号 == "203") // 轮胎补贴 { decimal?dd = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("轮胎补贴率")); if (dd.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * dd; } else { throw new ArgumentException("数据库中必须配置轮胎补贴率!"); } } else if (ywfylrz.费用项编号 == "204" || ywfylrz.费用项编号 == "205") // 油费 { decimal?czyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("车主油价")); decimal?jsyyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("驾驶员油价")); decimal?cbyj = Feng.Utils.ConvertHelper.ToDecimal(def.TryGetValue("成本油价")); if (ywfylrz.车辆 != null) { switch (ywfylrz.车辆.车辆类别) { case 车辆类别.自有车: case 车辆类别.代管车: if (ywfylrz.费用归属 == 费用归属.对外) { if (cbyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * cbyj; } else { throw new ArgumentException("数据库中必须配置成本油价!"); } } else { if (jsyyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * jsyyj; } else { throw new ArgumentException("数据库中必须配置驾驶员油价!"); } } break; case 车辆类别.挂靠车: if (ywfylrz.费用归属 == 费用归属.对外) { if (cbyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * cbyj; } else { throw new ArgumentException("数据库中必须配置成本油价!"); } } else if (ywfylrz.费用归属 == 费用归属.车主) { if (ywfylrz.费用项编号 == "204") //油费 { if (czyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * czyj; } else { throw new ArgumentException("数据库中必须配置车主油价!"); } } else if (ywfylrz.费用项编号 == "205") //定耗油 { if (czyj.HasValue && jsyyj.HasValue) { ywfylrz.数量 = d; ywfylrz.金额 = d * (czyj - jsyyj); } else { throw new ArgumentException("数据库中必须配置车主油价、驾驶员油价!"); } } } else { throw new ArgumentException("费用归属不规范!"); } break; case 车辆类别.外协车: break; default: throw new ArgumentException("车辆类别不规范!"); } } } else { ywfylrz.金额 = d; } }