Пример #1
0
        internal ResultModel Create(NFMT.Common.UserModel user, NFMT.Contract.Model.ContractSub sub, NFMT.Contract.Model.SubDetail detail, NFMT.Contract.Model.SubPrice price, List<Model.SubCorporationDetail> outCorps, List<Model.SubCorporationDetail> inCorps, List<Model.SubTypeDetail> subTypes = null)
        {
            ResultModel result = new ResultModel();

            try
            {
                DAL.ContractDAL contractDAL = new ContractDAL();
                DAL.SubDetailDAL detailDAL = new SubDetailDAL();
                DAL.SubPriceDAL priceDAL = new SubPriceDAL();

                DAL.ContractCorporationDetailDAL conCropDAL = new ContractCorporationDetailDAL();
                DAL.SubCorporationDetailDAL subCorpDAL = new SubCorporationDetailDAL();

                result = contractDAL.Get(user, sub.ContractId);
                if (result.ResultStatus != 0)
                    return result;

                NFMT.Contract.Model.Contract contract = result.ReturnValue as NFMT.Contract.Model.Contract;
                if (contract == null || contract.ContractId <= 0)
                {
                    result.ResultStatus = -1;
                    result.Message = "主合约不存在,不能新增子合约";
                    return result;
                }

                //验证子合约签订数量是否在主合约范围内
                if (sub.SignAmount > contract.SignAmount)
                {
                    result.ResultStatus = -1;
                    result.Message = "子合约签订数量不能大于主合约签订数量";
                    return result;
                }

                result = contractsubDAL.Load(user, contract.ContractId, NFMT.Common.StatusEnum.已录入);
                if (result.ResultStatus != 0)
                    return result;

                List<Model.ContractSub> subs = result.ReturnValue as List<Model.ContractSub>;
                if (subs == null)
                {
                    result.ResultStatus = -1;
                    result.Message = "获取合约失败";
                    return result;
                }

                decimal sumSignAmount = subs.Sum(temp => temp.SignAmount);
                if (sub.SignAmount > contract.SignAmount - sumSignAmount)
                {
                    result.ResultStatus = -1;
                    result.Message = "子合约签订数量不能超过主合约下可签数量";
                    return result;
                }

                sub.SubStatus = StatusEnum.已录入;
                result = contractsubDAL.Insert(user, sub);
                if (result.ResultStatus != 0)
                    return result;

                //获取合约序号
                int subId = (int)result.ReturnValue;
                if (subId <= 0)
                {
                    result.ResultStatus = -1;
                    result.Message = "子合约新增失败";
                    return result;
                }

                detail.SubId = subId;
                detail.MoreOrLess = detail.MoreOrLess / 100;
                detail.DiscountRate = detail.DiscountRate / 100;

                result = detailDAL.Insert(user, detail);
                if (result.ResultStatus != 0)
                    return result;

                price.SubId = subId;
                result = priceDAL.Insert(user, price);
                if (result.ResultStatus != 0)
                    return result;

                if (result.ResultStatus == 0)
                {
                    sub.SubId = subId;
                    result.ReturnValue = sub;
                }

                #region 子合约抬头
                //校验抬头是否存在主合约中
                //新增抬头到子合约抬头明细表

                //获取主合约抬头
                result = conCropDAL.LoadCorpListByContractId(user, contract.ContractId, false);
                if (result.ResultStatus != 0)
                    return result;

                List<Model.ContractCorporationDetail> conOutCorps = result.ReturnValue as List<Model.ContractCorporationDetail>;
                if (conOutCorps == null)
                {
                    result.ResultStatus = -1;
                    result.Message = "主合约对方抬头获取失败";
                    return result;
                }

                result = conCropDAL.LoadCorpListByContractId(user, contract.ContractId, true);
                if (result.ResultStatus != 0)
                    return result;

                List<Model.ContractCorporationDetail> conInCorps = result.ReturnValue as List<Model.ContractCorporationDetail>;
                if (conInCorps == null)
                {
                    result.ResultStatus = -1;
                    result.Message = "主合约我方抬头获取失败";
                    return result;
                }

                foreach (Model.SubCorporationDetail outCorp in outCorps)
                {
                    //验证抬头是否在主合约中
                    if (!conOutCorps.Exists(temp => temp.CorpId == outCorp.CorpId))
                    {
                        result.ResultStatus = -1;
                        result.Message = "主合约对方抬头不存在选中公司,新增失败";
                        return result;
                    }

                    NFMT.User.Model.Corporation corp = NFMT.User.UserProvider.Corporations.FirstOrDefault(temp => temp.CorpId == outCorp.CorpId);
                    if (corp == null || corp.CorpId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "子合约对方抬头不存在";
                        return result;
                    }

                    outCorp.ContractId = contract.ContractId;
                    outCorp.CorpName = corp.CorpName;
                    outCorp.SubId = subId;
                    outCorp.IsInnerCorp = false;
                    if (outCorps.IndexOf(outCorp) == 0)
                        outCorp.IsDefaultCorp = true;
                    else
                        outCorp.IsDefaultCorp = false;
                    outCorp.DetailStatus = StatusEnum.已生效;

                    result = subCorpDAL.Insert(user, outCorp);
                    if (result.ResultStatus != 0)
                        return result;
                }

                foreach (Model.SubCorporationDetail inCorp in inCorps)
                {
                    //验证抬头是否在主合约中
                    if (!conInCorps.Exists(temp => temp.CorpId == inCorp.CorpId))
                    {
                        result.ResultStatus = -1;
                        result.Message = "主合约我方抬头不存在选中公司,新增失败";
                        return result;
                    }

                    NFMT.User.Model.Corporation corp = NFMT.User.UserProvider.Corporations.FirstOrDefault(temp => temp.CorpId == inCorp.CorpId);
                    if (corp == null || corp.CorpId <= 0)
                    {
                        result.ResultStatus = -1;
                        result.Message = "子合约我方抬头不存在";
                        return result;
                    }

                    inCorp.ContractId = contract.ContractId;
                    inCorp.SubId = subId;
                    inCorp.CorpName = corp.CorpName;
                    inCorp.IsInnerCorp = true;
                    if (inCorps.IndexOf(inCorp) == 0)
                        inCorp.IsDefaultCorp = true;
                    else
                        inCorp.IsDefaultCorp = false;
                    inCorp.DetailStatus = StatusEnum.已生效;

                    result = subCorpDAL.Insert(user, inCorp);
                    if (result.ResultStatus != 0)
                        return result;
                }

                #endregion

                //子合约类型明细
                DAL.SubTypeDetailDAL subTypeDAL = new SubTypeDetailDAL();
                if (subTypes != null)
                {
                    foreach (Model.SubTypeDetail subType in subTypes)
                    {
                        subType.ContractId = sub.ContractId;
                        subType.DetailStatus = StatusEnum.已生效;
                        subType.SubId = subId;
                        result = subTypeDAL.Insert(user, subType);
                        if (result.ResultStatus != 0)
                            return result;
                    }
                }

                if (result.ResultStatus == 0)
                {
                    sub.SubId = subId;
                    result.ReturnValue = sub;
                }
            }
            catch (Exception ex)
            {
                result.ResultStatus = -1;
                result.Message = ex.Message;
            }

            return result;
        }