public static void 批量生成费用付款(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱s, string 费用项编号, 收付标志?收付标志, IList <业务费用理论值> llzs, bool service)
        {
            if (!收付标志.HasValue || 收付标志.Value == Hd.Model.收付标志.付)
            {
                // 生成付款费用
                付款合同 fkht = HdDataBuffer.Instance.Get付款合同(rep, 费用实体类型);
                if (fkht != null)
                {
                    foreach (付款合同费用项 htfyx in fkht.合同费用项)
                    {
                        // 如果指定费用项,则只生成此费用项下的费用
                        if (!string.IsNullOrEmpty(费用项编号) &&
                            htfyx.费用项编号 != 费用项编号)
                        {
                            continue;
                        }

                        // 不是服务运行时(即界面上点按钮),付款合同费用项.是否生成实际费用 = false 不生产费用
                        if (!service && !htfyx.是否生成实际费用)
                        {
                            continue;
                        }

                        批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.付, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                    }
                }
                if (费用实体类型 == 11)
                {
                    bool?cybz = ConvertHelper.ToBoolean(EntityScript.GetPropertyValue(票, "承运标志"));
                    if (cybz.HasValue && cybz.Value)
                    {
                        // 受托人合同
                        string str = ConvertHelper.ToString(EntityScript.GetPropertyValue(票, "承运人编号"));
                        if (!string.IsNullOrEmpty(str))
                        {
                            // 生成付款费用
                            受托人合同 strht = HdDataBuffer.Instance.Get受托人合同(rep, 费用实体类型, str);
                            if (strht != null)
                            {
                                foreach (受托人合同费用项 htfyx in strht.合同费用项)
                                {
                                    // 如果指定费用项,则只生成此费用项下的费用
                                    if (!string.IsNullOrEmpty(费用项编号) &&
                                        htfyx.费用项编号 != 费用项编号)
                                    {
                                        continue;
                                    }

                                    批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.付, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                                }
                            }
                        }
                    }
                }
            }
        }
        public static string Get相关人(IRepository rep, 普通票 票, 普通箱 箱, 合同费用项 htfyx)
        {
            object entity;

            if (箱 != null)
            {
                entity = 箱;
            }
            else
            {
                entity = 票;
            }
            string ret = null;

            if (htfyx is 委托人合同费用项)
            {
                return(票.委托人编号);
            }
            else if (htfyx is 付款合同费用项)
            {
                string mrxgr = (htfyx as 付款合同费用项).默认相关人;
                object r     = EntityScript.CalculateExpression(mrxgr, entity);
                ret = string.IsNullOrEmpty(mrxgr) || r == null ? null : r.ToString().Replace("\"", "");
                if (string.IsNullOrEmpty(ret))
                {
                    ret = null;
                }
            }
            else if (htfyx is 受托人合同费用项)
            {
                object cyr = EntityScript.GetPropertyValue(票, "承运人编号");
                if (cyr != null)
                {
                    return(cyr.ToString());
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                throw new ArgumentException("Invalid htfyx Type!");
            }


            return(ret);
        }
        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);
            }
        }
        public static string Get相关人(IRepository rep, 普通票 票, 普通箱 箱, 合同费用项 htfyx)
        {
            object entity;
            if (箱 != null)
            {
                entity = 箱;
            }
            else
            {
                entity = 票;
            }
            string ret = null;
            if (htfyx is 委托人合同费用项)
            {
                return 票.委托人编号;
            }
            else if (htfyx is 付款合同费用项)
            {
                string mrxgr = (htfyx as 付款合同费用项).默认相关人;
                object r = EntityScript.CalculateExpression(mrxgr, entity);
                ret = string.IsNullOrEmpty(mrxgr) || r == null ? null : r.ToString().Replace("\"", "");
                if (string.IsNullOrEmpty(ret))
                {
                    ret = null;
                }
            }
            else if (htfyx is 受托人合同费用项)
            {
                object cyr = EntityScript.GetPropertyValue(票, "承运人编号");
                if (cyr != null)
                {
                    return cyr.ToString();
                }
                else
                {
                    return null;
                }
            }
            else
            {
                throw new ArgumentException("Invalid htfyx Type!");
            }

            return ret;
        }
        private static decimal?Get委托人理论值(IRepository rep, 普通票 票, 普通箱 箱, 委托人合同费用项 htfyx)
        {
            decimal?d = null;

            switch (htfyx.委托人合同费用项类型)
            {
            case 委托人合同费用项类型.理论值计算:
                d = (箱 != null) ? Get理论值金额(rep, htfyx, 箱) : Get理论值金额(rep, htfyx, 票);
                break;

            case 委托人合同费用项类型.代垫:
                decimal?sum = null;
                foreach (业务费用 i in 票.费用)
                {
                    bool b = i.费用项编号 == htfyx.费用项编号 && i.收付标志 == 收付标志.付 &&
                             i.金额.HasValue;
                    if (b && 箱 != null)
                    {
                        b &= i.箱Id == 箱.ID;
                    }
                    if (b)
                    {
                        if (!sum.HasValue)
                        {
                            sum = 0;
                        }
                        sum += i.金额.Value;
                    }
                }
                if (sum.HasValue)
                {
                    d = sum;
                }
                else
                {
                    d = decimal.MinValue;
                }
                break;

            default:
                throw new ArgumentException("Invalid " + htfyx.委托人合同费用项类型);
            }
            return(d);
        }
        public static void 批量生成空费用项(ArchiveOperationForm masterForm)
        {
            普通票 piao = (masterForm.ParentForm as GeneratedArchiveOperationForm).DisplayManager.CurrentItem as 普通票;

            if (piao == null)
            {
                return;
            }

            if (masterForm.DisplayManager.Items.Count > 0)
            {
                if (!MessageForm.ShowYesNo("是否确定生成空费用项", "提示"))
                {
                    return;
                }
            }

            using (IRepository rep = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <普通票>())
            {
                IList <费用项> fyxList = (rep as Feng.NH.INHibernateRepository).Session.CreateSQLQuery(
                    "select * from 参数备案_费用项 where 现有费用实体类型 like '%" + piao.费用实体类型编号 + ",%' and 票 = 1")
                                      .AddEntity(typeof(费用项)).List <费用项>();

                if (fyxList == null || fyxList.Count == 0)
                {
                    return;
                }

                foreach (费用项 fyx in fyxList)
                {
                    业务费用 fy = new 业务费用
                    {
                        费用项编号 = fyx.编号,
                        收付标志  = 收付标志.付,
                        票     = piao
                    };

                    masterForm.ControlManager.AddNew();
                    masterForm.ControlManager.DisplayManager.Items[masterForm.DisplayManager.Position] = fy;
                    masterForm.ControlManager.EndEdit();
                }
            }
        }
 private static decimal?Get理论值(IRepository rep, 普通票 票, 普通箱 箱, 合同费用项 htfyx)
 {
     if (htfyx is 受托人合同费用项)
     {
         return(Get受托人理论值(rep, 票, 箱, htfyx as 受托人合同费用项));
     }
     else if (htfyx is 付款合同费用项)
     {
         return(Get付款理论值(rep, 票, 箱, htfyx as 付款合同费用项));
     }
     else if (htfyx is 委托人合同费用项)
     {
         return(Get委托人理论值(rep, 票, 箱, htfyx as 委托人合同费用项));
     }
     else
     {
         throw new ArgumentException("Invalid htfyx Type!");
     }
 }
Exemple #8
0
        public static int 批量生成费用(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱, string 费用项编号, 收付标志?收付标志, bool service)
        {
            int cnt = 0;

            // 需按照委托人合同和付款合同生成相应费用和费用理论值
            // 如果总体来生成,则按照:
            // 如果费用已经打了完全标志,则不生成。如果相应理论值已经生成过,也不生成。
            // 如果单个费用项来生成,则不管理论值是否已经生成过
            // Todo: 理论值可能显示生成票的,后来信息完全了再生成箱的,此时要删除票的
            //using (IRepository rep = ServiceProvider.GetService<IRepositoryFactory>().GenerateRepository(票.GetType()))
            {
                try
                {
                    rep.BeginTransaction();

                    IList <业务费用理论值> llzs = (rep as Feng.NH.INHibernateRepository).List <业务费用理论值>(NHibernate.Criterion.DetachedCriteria.For <业务费用理论值>()
                                                                                                 .Add(NHibernate.Criterion.Expression.Eq("费用实体.ID", 票.ID)));

                    rep.Initialize(票.费用, 票);

                    process_fy_generate.批量生成费用付款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs, service);

                    process_fy_generate.批量生成费用收款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs);

                    ////  有几项(发票税,贴息费)要看收款费用
                    // 不行,会多生成
                    //批量生成费用付款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs);

                    // 不知道哪里更改了,会update
                    (rep as Feng.NH.INHibernateRepository).Session.Evict(票);

                    rep.CommitTransaction();
                }
                catch (Exception ex)
                {
                    rep.RollbackTransaction();
                    ServiceProvider.GetService <IExceptionProcess>().ProcessWithNotify(ex);
                }
            }
            return(cnt);
        }
        public static void 批量生成费用收款(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱s, string 费用项编号, 收付标志?收付标志, IList <业务费用理论值> llzs)
        {
            if (!收付标志.HasValue || 收付标志.Value == Hd.Model.收付标志.收)
            {
                // 生成委托人合同费用
                委托人合同 wtrht = HdDataBuffer.Instance.Get委托人合同(rep, 费用实体类型, 票.委托人编号);
                if (wtrht != null)
                {
                    foreach (委托人合同费用项 htfyx in wtrht.合同费用项)
                    {
                        // 如果指定费用项,则只生成此费用项下的费用
                        if (!string.IsNullOrEmpty(费用项编号) &&
                            htfyx.费用项编号 != 费用项编号)
                        {
                            continue;
                        }

                        批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.收, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                    }
                }
            }
        }
Exemple #10
0
        public override bool DoSave()
        {
            //if (!this.ControlManager.CheckControlValue())
            //{
            //    return false;
            //}
            this.ValidateChildren();

            if (!this.ControlManager.SaveCurrent())
            {
                return(false);
            }

            凭证 pz = this.ControlManager.DisplayManager.CurrentItem as 凭证;

            pz.操作人 = "会计";
            using (var rep = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <Hd.Model.凭证>() as Feng.NH.INHibernateRepository)
            {
                try
                {
                    rep.BeginTransaction();

                    decimal sum = 0;

                    pz.凭证费用明细 = new List <凭证费用明细>();
                    foreach (Xceed.Grid.DataRow row in grdFymx.DataRows)
                    {
                        decimal je = Feng.Utils.ConvertHelper.ToDecimal(row.Cells["金额"].Value).Value;
                        sum += je;

                        凭证费用明细 pzfymx = new 凭证费用明细();
                        pzfymx.备注       = (string)row.Cells["备注"].Value;
                        pzfymx.金额       = je;
                        pzfymx.凭证       = pz;
                        pzfymx.凭证费用类别编号 = (int?)row.Cells["凭证费用类别"].Value;
                        pzfymx.收付标志     = Hd.Model.收付标志.付;
                        pzfymx.相关人编号    = (string)付款对象.SelectedDataValue;
                        pzfymx.业务类型编号   = (int?)row.Cells["业务分类"].Value;
                        pzfymx.费用项编号    = (string)row.Cells["费用项"].Value;
                        pzfymx.费用       = new List <费用>();
                        pzfymx.结算期限     = (DateTime?)row.Cells["结算期限"].Value;

                        凭证用途分类 ytfl = (凭证用途分类)用途分类.SelectedDataValue;

                        if (ytfl == 凭证用途分类.业务应付)          // 业务应付
                        {
                            pzfymx.业务类型编号 = (int?)业务分类.SelectedDataValue;
                        }
                        else if (ytfl == 凭证用途分类.其他应付)
                        {
                            pzfymx.业务类型编号 = 111;
                            pzfymx.费用项编号  = "002";
                        }
                        else if (ytfl == 凭证用途分类.其他报销)
                        {
                            pzfymx.费用项编号 = (string)row.Cells["费用项"].Value;
                        }
                        else if (ytfl == 凭证用途分类.业务报销)
                        {
                            普通票 piao  = null;
                            普通箱 xiang = null;

                            piao = rep.UniqueResult <Hd.Model.普通票>(NHibernate.Criterion.DetachedCriteria.For <Hd.Model.普通票>()
                                                                   .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value)));

                            if (piao == null)
                            {
                                throw new InvalidUserOperationException("自编号" + (string)row.Cells["自编号"].Value + "输入有误,请重新输入!");
                            }
                            switch (业务分类.SelectedDataValue.ToString())
                            {
                            case "11":
                                using (var rep2 = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <Hd.Model.Jk.进口箱>() as Feng.NH.INHibernateRepository)
                                {
                                    if (row.Cells["箱号"].Value != null)
                                    {
                                        xiang = rep2.UniqueResult <Hd.Model.Jk.进口箱>(NHibernate.Criterion.DetachedCriteria.For <Hd.Model.Jk.进口箱>()
                                                                                    .Add(NHibernate.Criterion.Expression.Eq("箱号", row.Cells["箱号"].Value))
                                                                                    .CreateCriteria("票")
                                                                                    .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value)));

                                        if (xiang == null)
                                        {
                                            throw new InvalidUserOperationException("箱号" + (string)row.Cells["箱号"].Value + "输入有误,请重新输入!");
                                        }
                                    }
                                }
                                break;

                            case "15":
                                using (var rep2 = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <Hd.Model.Jk.进口箱>() as Feng.NH.INHibernateRepository)
                                {
                                    //piao = rep2.Session.CreateCriteria<Hd.Model.普通票>()
                                    //        .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value))
                                    //        .UniqueResult<Hd.Model.普通票>();
                                    //if (piao == null)
                                    //{
                                    //    throw new InvalidUserOperationException("自编号" + (string)row.Cells["自编号"].Value + "输入有误,请重新输入!");
                                    //}
                                    if (row.Cells["箱号"].Value != null)
                                    {
                                        xiang = rep2.UniqueResult <Hd.Model.Nmcg.内贸出港箱>(NHibernate.Criterion.DetachedCriteria.For <Hd.Model.Nmcg.内贸出港箱>()
                                                                                        .Add(NHibernate.Criterion.Expression.Eq("箱号", row.Cells["箱号"].Value))
                                                                                        .CreateCriteria("票")
                                                                                        .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value)));

                                        if (xiang == null)
                                        {
                                            throw new InvalidUserOperationException("箱号" + (string)row.Cells["箱号"].Value + "输入有误,请重新输入!");
                                        }
                                    }
                                }
                                break;

                            case "45":
                                using (var rep2 = ServiceProvider.GetService <IRepositoryFactory>().GenerateRepository <Hd.Model.Jk.进口票>() as Feng.NH.INHibernateRepository)
                                {
                                    //piao = rep2.Session.CreateCriteria<Hd.Model.普通票>()
                                    //        .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value))
                                    //        .UniqueResult<Hd.Model.普通票>();
                                    //if (piao == null)
                                    //{
                                    //    throw new InvalidUserOperationException("自编号" + (string)row.Cells["自编号"].Value + "输入有误,请重新输入!");
                                    //}
                                    if (row.Cells["箱号"].Value != null)
                                    {
                                        xiang = rep2.UniqueResult <Hd.Model.Jk2.进口其他业务箱>(NHibernate.Criterion.DetachedCriteria.For <Hd.Model.Jk2.进口其他业务箱>()
                                                                                         .Add(NHibernate.Criterion.Expression.Eq("箱号", row.Cells["箱号"].Value))
                                                                                         .CreateCriteria("票")
                                                                                         .Add(NHibernate.Criterion.Expression.Eq("货代自编号", row.Cells["自编号"].Value)));

                                        if (xiang == null)
                                        {
                                            throw new InvalidUserOperationException("箱号" + (string)row.Cells["箱号"].Value + "输入有误,请重新输入!");
                                        }
                                    }
                                }
                                break;

                            default:
                                throw new ArgumentException("不合理的业务类型分类!");
                            }

                            NHibernate.Criterion.DetachedCriteria cri = NHibernate.Criterion.DetachedCriteria.For <业务费用>()
                                                                        .Add(NHibernate.Criterion.Expression.Eq("票.ID", piao.ID))
                                                                        .Add(NHibernate.Criterion.Expression.Eq("费用项编号", row.Cells["费用项"].Value))
                                                                        .Add(NHibernate.Criterion.Expression.Eq("收付标志", Hd.Model.收付标志.付));
                            if (xiang != null)
                            {
                                cri = cri.Add(NHibernate.Criterion.Expression.Eq("箱.ID", xiang.ID));
                            }
                            else
                            {
                                cri = cri.Add(NHibernate.Criterion.Expression.IsNull("箱"));
                            }

                            IList <业务费用> list = rep.List <业务费用>(cri);


                            cri = NHibernate.Criterion.DetachedCriteria.For <费用信息>()
                                  .Add(NHibernate.Criterion.Expression.Eq("票.ID", piao.ID))
                                  .Add(NHibernate.Criterion.Expression.Eq("费用项编号", row.Cells["费用项"].Value));
                            IList <费用信息> fyxxs = rep.List <费用信息>(cri);
                            if (fyxxs.Count > 0)
                            {
                                if (!fyxxs[0].完全标志付)
                                {
                                    fyxxs[0].完全标志付 = true;
                                    (new HdBaseDao <费用信息>()).Update(rep, fyxxs[0]);
                                }
                                else
                                {
                                    throw new InvalidUserOperationException("货代自编号" + piao.货代自编号 + "费用项" + row.Cells["费用项"].Value.ToString()
                                                                            + "已打完全标志,不能修改费用!");
                                }
                            }
                            bool exist = false;
                            if (list.Count > 0)
                            {
                                foreach (业务费用 i in list)
                                {
                                    if (i.金额 == je && i.相关人编号 == pzfymx.相关人编号 && i.凭证费用明细 == null)
                                    {
                                        i.凭证费用明细 = pzfymx;
                                        (new 业务费用Dao()).Update(rep, i);
                                        pzfymx.费用.Add(i);

                                        exist = true;
                                        break;
                                    }
                                }
                            }
                            if (!exist)
                            {
                                if (list.Count > 1)
                                {
                                    throw new InvalidUserOperationException("货代自编号" + piao.货代自编号 + "费用项" + row.Cells["费用项"].Value.ToString()
                                                                            + "已存在多条费用,且无费用金额一致,请先修改一致!");
                                }
                                else if (list.Count == 0)
                                {
                                    业务费用 fy = new 业务费用();
                                    fy.备注     = (string)row.Cells["备注"].Value;
                                    fy.费用实体   = piao;
                                    fy.费用项编号  = (string)row.Cells["费用项"].Value;
                                    fy.金额     = Feng.Utils.ConvertHelper.ToDecimal(row.Cells["金额"].Value).Value;
                                    fy.票      = piao;
                                    fy.凭证费用明细 = pzfymx;
                                    fy.收付标志   = Hd.Model.收付标志.付;
                                    fy.相关人编号  = (string)付款对象.SelectedDataValue;
                                    if (xiang != null)
                                    {
                                        fy.箱   = xiang;
                                        fy.箱Id = xiang.ID;
                                    }
                                    (new 业务费用Dao()).Save(rep, fy);
                                    pzfymx.费用.Add(fy);
                                }
                                else// if (list.Count == 1)
                                {
                                    if (list[0].相关人编号 == pzfymx.相关人编号 && list[0].凭证费用明细 == null)
                                    {
                                        if (MessageForm.ShowYesNo("货代自编号" + piao.货代自编号 + "费用项" + row.Cells["费用项"].Value.ToString()
                                                                  + "已存在费用,且费用金额不符,是否添加调节款?", "确认"))
                                        {
                                            调节业务款 tjk = new 调节业务款();
                                            tjk.备注     = (string)row.Cells["备注"].Value;
                                            tjk.费用实体   = piao;
                                            tjk.费用项编号  = (string)row.Cells["费用项"].Value;
                                            tjk.金额     = Feng.Utils.ConvertHelper.ToDecimal(row.Cells["金额"].Value).Value;
                                            tjk.票      = piao;
                                            tjk.凭证费用明细 = pzfymx;
                                            tjk.收付标志   = Hd.Model.收付标志.付;
                                            tjk.相关人编号  = (string)付款对象.SelectedDataValue;
                                            if (xiang != null)
                                            {
                                                tjk.箱   = xiang;
                                                tjk.箱Id = xiang.ID;
                                            }
                                            (new 费用Dao()).Save(rep, tjk);
                                            pzfymx.费用.Add(tjk);
                                        }
                                        else
                                        {
                                            throw new InvalidUserOperationException("请重新填写货代自编号!");
                                        }
                                    }
                                    else
                                    {
                                        throw new InvalidUserOperationException("货代自编号" + piao.货代自编号 + "费用项" + row.Cells["费用项"].Value.ToString()
                                                                                + "已存在的一条费用相关人不符或已经出国凭证,请先修改一致!");
                                    }
                                }
                            }
                        }
                        else
                        {
                            throw new ArgumentException("不合理的凭证用途分类!");
                        }
                        pz.凭证费用明细.Add(pzfymx);
                    }

                    pz.会计编号    = SystemConfiguration.UserName;
                    pz.会计金额    = sum;
                    pz.金额.币制编号 = "CNY";
                    pz.金额.数额   = pz.会计金额;
                    pz.凭证类别    = 凭证类别.付款凭证;
                    pz.相关人编号   = (string)付款对象.SelectedDataValue;
                    pz.自动手工标志  = 自动手工标志.手工;

                    (new 凭证Dao()).Save(rep, pz);

                    foreach (凭证费用明细 pzfymx in pz.凭证费用明细)
                    {
                        (new HdBaseDao <凭证费用明细>()).Save(rep, pzfymx);
                    }

                    (new 凭证Dao()).Submit(rep, pz);

                    rep.CommitTransaction();

                    if (this.ControlManager.ControlCheckExceptionProcess != null)
                    {
                        this.ControlManager.ControlCheckExceptionProcess.ClearAllError();
                    }
                    this.ControlManager.State = StateType.View;
                    this.ControlManager.OnCurrentItemChanged();

                    // don't save to database
                    this.ControlManager.EndEdit(false);

                    return(true);
                }
                catch (Exception ex)
                {
                    rep.RollbackTransaction();
                    ServiceProvider.GetService <IExceptionProcess>().ProcessWithNotify(ex);
                    return(false);
                }
            }
        }
Exemple #11
0
 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);
     }
 }
Exemple #12
0
 private static decimal? Get理论值(IRepository rep, 普通票 票, 普通箱 箱, 合同费用项 htfyx)
 {
     if (htfyx is 受托人合同费用项)
     {
         return Get受托人理论值(rep, 票, 箱, htfyx as 受托人合同费用项);
     }
     else if (htfyx is 付款合同费用项)
     {
         return Get付款理论值(rep, 票, 箱, htfyx as 付款合同费用项);
     }
     else if (htfyx is 委托人合同费用项)
     {
         return Get委托人理论值(rep, 票, 箱, htfyx as 委托人合同费用项);
     }
     else
     {
         throw new ArgumentException("Invalid htfyx Type!");
     }
 }
Exemple #13
0
 private static decimal? Get委托人理论值(IRepository rep, 普通票 票, 普通箱 箱, 委托人合同费用项 htfyx)
 {
     decimal? d = null;
     switch (htfyx.委托人合同费用项类型)
     {
         case 委托人合同费用项类型.理论值计算:
             d = (箱 != null) ? Get理论值金额(rep, htfyx, 箱) : Get理论值金额(rep, htfyx, 票);
             break;
         case 委托人合同费用项类型.代垫:
             decimal? sum = null;
             foreach (业务费用 i in 票.费用)
             {
                 bool b = i.费用项编号 == htfyx.费用项编号 && i.收付标志 == 收付标志.付
                     && i.金额.HasValue;
                 if (b && 箱 != null)
                 {
                     b &= i.箱Id == 箱.ID;
                 }
                 if (b)
                 {
                     if (!sum.HasValue)
                     {
                         sum = 0;
                     }
                     sum += i.金额.Value;
                 }
             }
             if (sum.HasValue)
             {
                 d = sum;
             }
             else
             {
                 d = decimal.MinValue;
             }
             break;
         default:
             throw new ArgumentException("Invalid " + htfyx.委托人合同费用项类型);
     }
     return d;
 }
Exemple #14
0
 public static int 批量生成费用(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱, string 费用项编号, 收付标志? 收付标志)
 {
     return 批量生成费用(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, false);
 }
Exemple #15
0
        public static void 批量生成费用付款(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱s, string 费用项编号, 收付标志? 收付标志, IList<业务费用理论值> llzs, bool service)
        {
            if (!收付标志.HasValue || 收付标志.Value == Hd.Model.收付标志.付)
            {
                // 生成付款费用
                付款合同 fkht = HdDataBuffer.Instance.Get付款合同(rep, 费用实体类型);
                if (fkht != null)
                {
                    foreach (付款合同费用项 htfyx in fkht.合同费用项)
                    {
                        // 如果指定费用项,则只生成此费用项下的费用
                        if (!string.IsNullOrEmpty(费用项编号)
                            && htfyx.费用项编号 != 费用项编号)
                        {
                            continue;
                        }

                        // 不是服务运行时(即界面上点按钮),付款合同费用项.是否生成实际费用 = false 不生产费用
                        if (!service && !htfyx.是否生成实际费用)
                        {
                            continue;
                        }

                        批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.付, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                    }
                }
                if (费用实体类型 == 11)
                {
                    bool? cybz = ConvertHelper.ToBoolean(EntityScript.GetPropertyValue(票, "承运标志"));
                    if (cybz.HasValue && cybz.Value)
                    {
                        // 受托人合同
                        string str = ConvertHelper.ToString(EntityScript.GetPropertyValue(票, "承运人编号"));
                        if (!string.IsNullOrEmpty(str))
                        {
                            // 生成付款费用
                            受托人合同 strht = HdDataBuffer.Instance.Get受托人合同(rep, 费用实体类型, str);
                            if (strht != null)
                            {
                                foreach (受托人合同费用项 htfyx in strht.合同费用项)
                                {
                                    // 如果指定费用项,则只生成此费用项下的费用
                                    if (!string.IsNullOrEmpty(费用项编号)
                                        && htfyx.费用项编号 != 费用项编号)
                                    {
                                        continue;
                                    }

                                    批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.付, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                                }
                            }
                        }
                    }
                }
            }
        }
Exemple #16
0
 public static int 批量生成费用(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱, string 费用项编号, 收付标志?收付标志)
 {
     return(批量生成费用(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, false));
 }
Exemple #17
0
        public static void 批量生成费用收款(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱s, string 费用项编号, 收付标志? 收付标志, IList<业务费用理论值> llzs)
        {
            if (!收付标志.HasValue || 收付标志.Value == Hd.Model.收付标志.收)
            {
                // 生成委托人合同费用
                委托人合同 wtrht = HdDataBuffer.Instance.Get委托人合同(rep, 费用实体类型, 票.委托人编号);
                if (wtrht != null)
                {
                    foreach (委托人合同费用项 htfyx in wtrht.合同费用项)
                    {
                        // 如果指定费用项,则只生成此费用项下的费用
                        if (!string.IsNullOrEmpty(费用项编号)
                            && htfyx.费用项编号 != 费用项编号)
                        {
                            continue;
                        }

                        批量生成费用(rep, 票, 箱s, Hd.Model.收付标志.收, htfyx, llzs, !string.IsNullOrEmpty(费用项编号));
                    }
                }
            }
        }
Exemple #18
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);
                        }
                    }
                }
            }
        }
Exemple #19
0
        public static int 批量生成费用(IRepository rep, int 费用实体类型, 普通票 票, IEnumerable 箱, string 费用项编号, 收付标志? 收付标志, bool service)
        {
            int cnt = 0;

            // 需按照委托人合同和付款合同生成相应费用和费用理论值
            // 如果总体来生成,则按照:
            // 如果费用已经打了完全标志,则不生成。如果相应理论值已经生成过,也不生成。
            // 如果单个费用项来生成,则不管理论值是否已经生成过
            // Todo: 理论值可能显示生成票的,后来信息完全了再生成箱的,此时要删除票的
            //using (IRepository rep = ServiceProvider.GetService<IRepositoryFactory>().GenerateRepository(票.GetType()))
            {
                try
                {
                    rep.BeginTransaction();

                    IList<业务费用理论值> llzs = (rep as Feng.NH.INHibernateRepository).List<业务费用理论值>(NHibernate.Criterion.DetachedCriteria.For<业务费用理论值>()
                                            .Add(NHibernate.Criterion.Expression.Eq("费用实体.ID", 票.ID)));

                    rep.Initialize(票.费用, 票);

                    process_fy_generate.批量生成费用付款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs, service);

                    process_fy_generate.批量生成费用收款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs);

                    ////  有几项(发票税,贴息费)要看收款费用
                    // 不行,会多生成
                    //批量生成费用付款(rep, 费用实体类型, 票, 箱, 费用项编号, 收付标志, llzs);

                    // 不知道哪里更改了,会update
                    (rep as Feng.NH.INHibernateRepository).Session.Evict(票);

                    rep.CommitTransaction();
                }
                catch (Exception ex)
                {
                    rep.RollbackTransaction();
                    ServiceProvider.GetService<IExceptionProcess>().ProcessWithNotify(ex);
                }
            }
            return cnt;
        }
Exemple #20
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);
                        }
                    }
                }
            }
        }