void CheckUniqueIdentifierCode(DepotManagementDataContext ctx, Out_ManeuverBill maneuverBill)
        {
            var varDetail = from a in ctx.Out_ManeuverList
                            where a.Bill_ID == maneuverBill.Bill_ID
                            select a;

            foreach (Out_ManeuverList detail in varDetail)
            {
                object cvt = UniversalFunction.GetGoodsAttributeInfo(ctx, detail.GoodsID, CE_GoodsAttributeName.CVT);
                object tcu = UniversalFunction.GetGoodsAttributeInfo(ctx, detail.GoodsID, CE_GoodsAttributeName.TCU);

                if ((cvt != null && Convert.ToBoolean(cvt)) || (tcu != null && Convert.ToBoolean(tcu)))
                {
                    var varUnique = from a in ctx.Out_UniqueIdentifierData
                                    where a.Bill_ID == maneuverBill.Bill_ID &&
                                    a.GoodsID == detail.GoodsID
                                    select a;

                    if (varUnique.Count() != detail.ShipperCount)
                    {
                        throw new Exception(UniversalFunction.GetGoodsMessage(ctx, detail.GoodsID) + "请录入对应【出库数量】的唯一标识码");
                    }
                }
            }
        }
        /// <summary>
        /// 创建调运单
        /// </summary>
        /// <param name="dataContext">数据上下文</param>
        /// <param name="afterService">数据集</param>
        /// <param name="listInfo">明细信息</param>
        /// <param name="error">错误信息</param>
        /// <returns>成功返回True,失败返回False</returns>
        bool CreateManeuver(DepotManagementDataContext dataContext, Out_AfterServicePartsApplyBill afterService, DataTable listInfo, out string error)
        {
            error = null;

            try
            {
                Out_ManeuverBill lnqBill = new Out_ManeuverBill();

                lnqBill.AssociatedBillNo = afterService.Bill_ID;
                lnqBill.Bill_ID          = "由系统自动生成";
                lnqBill.BillStatus       = "等待出库";
                lnqBill.InStorageID      = afterService.InStorageID;
                lnqBill.OutStorageID     = afterService.OutStorageID;
                lnqBill.Proposer         = afterService.Proposer;
                lnqBill.ProposerTime     = afterService.ProposerTime;
                lnqBill.Remark           = afterService.Remark;

                listInfo.Columns.Add("收货数量");
                listInfo.Columns.Add("发货数量");

                for (int i = 0; i < listInfo.Rows.Count; i++)
                {
                    listInfo.Rows[i]["申请数量"] = Convert.ToDecimal(listInfo.Rows[i]["审核数量"]);
                }

                if (!m_serverManeuver.InsertBill(lnqBill, listInfo, out error))
                {
                    return(false);
                }

                if (!m_serverManeuver.OperationInfo(lnqBill, listInfo, out error))
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                error = ex.Message;
                return(false);
            }
        }
Example #3
0
        public 调运单明细(string billID, AuthorityFlag authFlag)
        {
            InitializeComponent();


            FaceAuthoritySetting.SetEnable(this.Controls, authFlag);
            FaceAuthoritySetting.SetVisibly(this.toolStrip, authFlag);
            this.toolStrip.Visible = true;

            if (billID == "")
            {
                txtBill_ID.Text   = "系统自动生成";
                lbBillStatus.Text = "新建单据";
            }
            else
            {
                m_lnqManeuverBill = m_serverManeuver.GetBillInfo(billID);

                txtBill_ID.Text         = m_lnqManeuverBill.Bill_ID;
                lbBillStatus.Text       = m_lnqManeuverBill.BillStatus;
                txtReceiving.Tag        = m_lnqManeuverBill.InStorageID;
                txtShipments.Tag        = m_lnqManeuverBill.OutStorageID;
                txtReceiving.Text       = UniversalFunction.GetStorageName(m_lnqManeuverBill.InStorageID);
                txtShipments.Text       = UniversalFunction.GetStorageName(m_lnqManeuverBill.OutStorageID);
                txtBillRemark.Text      = m_lnqManeuverBill.Remark;
                txtLogisticsBillNo.Text = m_lnqManeuverBill.LogisticsBillNo;
                txtLogisticsName.Text   = m_lnqManeuverBill.LogisticsName;
                txtPhone.Text           = m_lnqManeuverBill.Phone;
                txtScrapBillNo.Text     = m_lnqManeuverBill.ScrapBillNo;

                btnReceiving.Visible =
                    IntegrativeQuery.IsStockPrincipal(txtReceiving.Tag.ToString(), BasicInfo.LoginName);
                btnShipments.Visible =
                    IntegrativeQuery.IsStockPrincipal(txtShipments.Tag.ToString(), BasicInfo.LoginName);

                if (IntegrativeQuery.IsSalesStorage(m_lnqManeuverBill.InStorageID))
                {
                    btnReceiving.Visible = false;
                }
            }

            switch (lbBillStatus.Text)
            {
            case "新建单据":

                numProposerCount.ReadOnly = false;
                btnAdd.Visible            = true;
                btnModify.Visible         = true;
                btnDelete.Visible         = true;
                break;

            case "等待主管审核":

                numProposerCount.ReadOnly = false;

                break;

            case "等待出库":

                numShipperCount.ReadOnly = false;
                btnModify.Visible        = true;
                txtGoodsCode.Enabled     = false;

                break;

            case "等待入库":

                numConfirmorCount.ReadOnly = false;
                btnModify.Visible          = true;
                txtGoodsCode.Enabled       = false;

                break;

            default:
                break;
            }

            dataGridView1.DataSource = m_serverManeuver.GetListInfo(billID);
            dataGridView1.Columns["物品ID"].Visible    = false;
            dataGridView1.Columns["Bill_ID"].Visible = false;
        }
        /// <summary>
        /// 删除单据
        /// </summary>
        /// <param name="billNo">单据号</param>
        /// <param name="error">错误信息</param>
        /// <returns>成功返回True,失败返回False</returns>
        public bool DeleteBill(string billNo, out string error)
        {
            error = null;


            DepotManagementDataContext dataContext = CommentParameter.DepotDataContext;

            dataContext.Connection.Open();
            dataContext.Transaction = dataContext.Connection.BeginTransaction();

            try
            {
                var varData = from a in dataContext.Out_ManeuverBill
                              where a.Bill_ID == billNo
                              select a;

                if (varData.Count() != 1)
                {
                    error = "数据为空或者不唯一";
                    return(false);
                }
                else
                {
                    Out_ManeuverBill billInfo = varData.Single();

                    foreach (var item in varData)
                    {
                        Out_UniqueIdentifierData lnqIdentifier = new Out_UniqueIdentifierData();

                        lnqIdentifier.Bill_ID = item.Bill_ID;

                        if (!m_serverIdentifier.DeleteIdentifier(dataContext, lnqIdentifier, out error))
                        {
                            return(false);
                        }
                    }

                    if (billInfo.AssociatedBillNo != null && billInfo.AssociatedBillNo.Contains("YXTK"))
                    {
                        var varMarketing = from a in dataContext.S_MarketingBill
                                           where a.DJH == varData.Single().AssociatedBillNo
                                           select a;


                        dataContext.S_MarketingBill.DeleteAllOnSubmit(varMarketing);

                        m_billMessageServer.DestroyMessage(billInfo.AssociatedBillNo);
                    }


                    var varAfterService = from a in dataContext.Out_AfterServicePartsApplyBill
                                          where a.Bill_ID == billInfo.AssociatedBillNo
                                          select a;

                    foreach (var item in varAfterService)
                    {
                        item.BillStatus = "新建单据";
                    }

                    var varDetail = from a in dataContext.Out_ManeuverList
                                    where a.Bill_ID == billInfo.Bill_ID
                                    select a;

                    List <Out_ManeuverList> lstList = varDetail.ToList();

                    dataContext.Out_ManeuverBill.DeleteAllOnSubmit(varData);
                    dataContext.SubmitChanges();

                    foreach (Out_ManeuverList detail in lstList)
                    {
                        var varAccount = from a in dataContext.Out_DetailAccount
                                         where a.Bill_ID == billInfo.Bill_ID &&
                                         a.GoodsID == detail.GoodsID &&
                                         a.SecStorageID == billInfo.OutStorageID &&
                                         a.StorageID == detail.StorageID
                                         select a;

                        if (varAccount.Count() == 1)
                        {
                            Out_DetailAccount lnqAccount = varAccount.Single();
                            lnqAccount.OperationCount = -lnqAccount.OperationCount;

                            if (!m_serverBusiness.OperationStock(dataContext, lnqAccount, out error))
                            {
                                throw new Exception(error);
                            }
                        }

                        dataContext.Out_DetailAccount.DeleteAllOnSubmit(varAccount);
                        dataContext.SubmitChanges();
                    }
                }

                dataContext.Transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                dataContext.Transaction.Rollback();
                error = ex.Message;
                return(false);
            }
        }
        /// <summary>
        /// 操作业务
        /// </summary>
        /// <param name="maneuverBill">单据信息数据集</param>
        /// <param name="listInfo">单据明细信息</param>
        /// <param name="error">错误信息</param>
        /// <returns>成功返回True,失败返回False</returns>
        public bool OperationInfo(Out_ManeuverBill maneuverBill, DataTable listInfo, out string error)
        {
            error = null;

            DepotManagementDataContext dataContext = CommentParameter.DepotDataContext;

            dataContext.Connection.Open();
            dataContext.Transaction = dataContext.Connection.BeginTransaction();

            try
            {
                var varData = from a in dataContext.Out_ManeuverBill
                              where a.Bill_ID == maneuverBill.Bill_ID
                              select a;

                if (varData.Count() == 1)
                {
                    Out_ManeuverBill lnqBill = varData.Single();

                    switch (lnqBill.BillStatus)
                    {
                    case "等待主管审核":

                        lnqBill.BillStatus = "等待出库";
                        lnqBill.Verify     = BasicInfo.LoginName;
                        lnqBill.VerifyTime = ServerTime.Time;

                        break;

                    case "等待出库":

                        lnqBill.BillStatus  = "等待发货";
                        lnqBill.Shipper     = BasicInfo.LoginName;
                        lnqBill.ShipperTime = ServerTime.Time;

                        for (int i = 0; i < listInfo.Rows.Count; i++)
                        {
                            if (listInfo.Rows[i]["发货数量"] == null ||
                                listInfo.Rows[i]["发货数量"].ToString() == "" ||
                                Convert.ToDecimal(listInfo.Rows[i]["发货数量"]) == 0)
                            {
                                listInfo.Rows[i]["发货数量"] = listInfo.Rows[i]["申请数量"];
                            }
                        }

                        if (!DeleteList(dataContext, maneuverBill.Bill_ID, out error))
                        {
                            throw new Exception(error);
                        }

                        if (!InsertList(dataContext, maneuverBill.Bill_ID, listInfo, out error))
                        {
                            throw new Exception(error);
                        }

                        dataContext.SubmitChanges();

                        CheckUniqueIdentifierCode(dataContext, maneuverBill);

                        for (int i = 0; i < listInfo.Rows.Count; i++)
                        {
                            Out_DetailAccount lnqDetail = new Out_DetailAccount();

                            lnqDetail.Bill_ID        = lnqBill.Bill_ID;
                            lnqDetail.BillFinishTime = ServerTime.Time;
                            lnqDetail.Confirmor      = BasicInfo.LoginName;
                            lnqDetail.GoodsID        = Convert.ToInt32(listInfo.Rows[i]["物品ID"]);
                            lnqDetail.OperationCount = -Convert.ToDecimal(listInfo.Rows[i]["发货数量"]);
                            lnqDetail.Proposer       = lnqBill.Proposer;
                            lnqDetail.Remark         = listInfo.Rows[i]["备注"].ToString();
                            lnqDetail.SecStorageID   = lnqBill.OutStorageID;
                            lnqDetail.StorageID      = listInfo.Rows[i]["账务库房ID"].ToString();

                            if (!m_serverBusiness.OperationDetailAndStock(dataContext, lnqDetail, out error))
                            {
                                throw new Exception(error);
                            }
                        }

                        break;

                    case "等待发货":

                        lnqBill.BillStatus      = "等待收货";
                        lnqBill.LogisticsBillNo = maneuverBill.LogisticsBillNo;
                        lnqBill.LogisticsName   = maneuverBill.LogisticsName;
                        lnqBill.Phone           = maneuverBill.Phone;
                        lnqBill.ExcShipper      = BasicInfo.LoginName;
                        lnqBill.ExcShipperTime  = ServerTime.Time;

                        break;

                    case "等待收货":

                        lnqBill.BillStatus       = "等待入库";
                        lnqBill.ExcConfirmor     = BasicInfo.LoginName;
                        lnqBill.ExcConfirmorTime = ServerTime.Time;

                        break;

                    case "等待入库":
                        lnqBill.BillStatus    = "已完成";
                        lnqBill.Confirmor     = BasicInfo.LoginName;
                        lnqBill.ConfirmorTime = ServerTime.Time;

                        for (int i = 0; i < listInfo.Rows.Count; i++)
                        {
                            if (listInfo.Rows[i]["收货数量"] == null ||
                                listInfo.Rows[i]["收货数量"].ToString() == "" ||
                                Convert.ToDecimal(listInfo.Rows[i]["收货数量"]) == 0)
                            {
                                listInfo.Rows[i]["收货数量"] = listInfo.Rows[i]["发货数量"];
                            }
                        }

                        //删除明细
                        if (!DeleteList(dataContext, maneuverBill.Bill_ID, out error))
                        {
                            throw new Exception(error);
                        }

                        //添加明细
                        if (!InsertList(dataContext, maneuverBill.Bill_ID, listInfo, out error))
                        {
                            throw new Exception(error);
                        }

                        dataContext.SubmitChanges();

                        for (int i = 0; i < listInfo.Rows.Count; i++)
                        {
                            Out_DetailAccount lnqDetail = new Out_DetailAccount();

                            lnqDetail.Bill_ID        = lnqBill.Bill_ID;
                            lnqDetail.BillFinishTime = ServerTime.Time;
                            lnqDetail.Confirmor      = lnqBill.Confirmor;
                            lnqDetail.GoodsID        = Convert.ToInt32(listInfo.Rows[i]["物品ID"]);
                            lnqDetail.OperationCount = Convert.ToDecimal(listInfo.Rows[i]["收货数量"]);
                            lnqDetail.Proposer       = lnqBill.Proposer;
                            lnqDetail.Remark         = listInfo.Rows[i]["备注"].ToString();
                            lnqDetail.SecStorageID   = lnqBill.InStorageID;
                            lnqDetail.StorageID      = listInfo.Rows[i]["账务库房ID"].ToString();

                            //操作外部业务明细与库存
                            if (!m_serverBusiness.OperationDetailAndStock(dataContext, lnqDetail, out error))
                            {
                                throw new Exception(error);
                            }
                        }

                        dataContext.SubmitChanges();

                        if (!InsertProductStock(dataContext, lnqBill.Bill_ID, out error))
                        {
                            throw new Exception(error);
                        }

                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    error = "数据重复或者为空";
                    throw new Exception(error);
                }

                dataContext.SubmitChanges();
                dataContext.Transaction.Commit();

                return(true);
            }
            catch (Exception ex)
            {
                dataContext.Transaction.Rollback();
                error = ex.Message;
                return(false);
            }
        }
        /// <summary>
        /// 提交申请
        /// </summary>
        /// <param name="maneuverBill">单据信息数据集</param>
        /// <param name="listInfo">明细信息</param>
        /// <param name="error">错误信息</param>
        /// <returns>成功返回True,失败返回False</returns>
        public bool InsertBill(Out_ManeuverBill maneuverBill, DataTable listInfo, out string error)
        {
            error = null;


            DepotManagementDataContext dataContext = CommentParameter.DepotDataContext;

            try
            {
                dataContext.Connection.Open();
                dataContext.Transaction = dataContext.Connection.BeginTransaction();

                var varData = from a in dataContext.Out_ManeuverBill
                              where a.Bill_ID == maneuverBill.Bill_ID
                              select a;

                if (varData.Count() == 0)
                {
                    maneuverBill.Bill_ID    = m_serverBillNo.AssignNewNo(this, "调运单");
                    maneuverBill.BillStatus = "等待主管审核";

                    if (!InsertList(dataContext, maneuverBill.Bill_ID, listInfo, out error))
                    {
                        throw new Exception(error);
                    }

                    dataContext.Out_ManeuverBill.InsertOnSubmit(maneuverBill);

                    m_billMessageServer.DestroyMessage(maneuverBill.Bill_ID);
                    m_billMessageServer.SendNewFlowMessage(maneuverBill.Bill_ID,
                                                           string.Format("{0}号调运单已提交,请营销主管审核", maneuverBill.Bill_ID), CE_RoleEnum.营销主管);
                }
                else if (varData.Count() == 1)
                {
                    Out_ManeuverBill lnqBill = varData.Single();

                    lnqBill.BillStatus   = "等待主管审核";
                    lnqBill.Remark       = maneuverBill.Remark;
                    lnqBill.InStorageID  = maneuverBill.InStorageID;
                    lnqBill.OutStorageID = maneuverBill.OutStorageID;
                    lnqBill.ScrapBillNo  = maneuverBill.ScrapBillNo;

                    if (!DeleteList(dataContext, maneuverBill.Bill_ID, out error))
                    {
                        throw new Exception(error);
                    }

                    if (!InsertList(dataContext, maneuverBill.Bill_ID, listInfo, out error))
                    {
                        throw new Exception(error);
                    }

                    m_billMessageServer.DestroyMessage(maneuverBill.Bill_ID);
                    m_billMessageServer.SendNewFlowMessage(maneuverBill.Bill_ID,
                                                           string.Format("{0}号调运单已提交,请营销主管审核", maneuverBill.Bill_ID), CE_RoleEnum.营销主管);
                }
                else
                {
                    error = "数据重复";
                    throw new Exception(error);
                }

                dataContext.SubmitChanges();

                dataContext.Transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                dataContext.Transaction.Rollback();
                error = ex.Message;
                return(false);
            }
        }