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);
                        }
                    }
                }
            }
        }
Beispiel #3
0
        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);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        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);
                        }
                    }
                }
            }
        }
Beispiel #5
0
        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;
            }
        }