/// <summary>
        /// //打开详细流程记录, 审批流程表(上表)里的一条被选中后,把详细审批过程写入审批流程详细表(下表)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvApprovalList_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex < 0)
                {
                    return;
                }

                string msg = string.Empty;
                Models.ApprovalFlow flow = _approveFlowList[e.RowIndex];

                if (this.dgvApprovalNodeList.Tag == null ||
                    flow.Id != (Guid)this.dgvApprovalNodeList.Tag)
                {
                    List <ApprovalDetailsModel> approveList = new List <ApprovalDetailsModel>();
                    approveList = PharmacyDatabaseService.GetApprovalDetails(out msg, flow.FlowId, flow.SubFlowId, new object[] {}).ToList();
                    this.dgvApprovalNodeList.AutoGenerateColumns = false;
                    this.dgvApprovalNodeList.DataSource          = approveList;
                    this.dgvApprovalNodeList.Tag = flow.Id;
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
 /// <summary>
 /// 审批通过
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnAccept_Click(object sender, EventArgs e)
 {
     if (this.dgvApprovalList.Rows.Count <= 0)
     {
         return;
     }
     try
     {
         btnAccept.Enabled = false;
         if (dgvApprovalList.CurrentRow != null)
         {
             int currRowIndex = dgvApprovalList.CurrentRow.Cells[0].RowIndex;
             Models.ApprovalFlow approveFlow = _approveFlowList[currRowIndex];
             string msg = string.Empty;
             msg = PharmacyDatabaseService.SetApproveAction(approveFlow, "APPROVE", AppClientContext.CurrentUser.Id, string.IsNullOrWhiteSpace(this.txtOperatorReason.Text) ? "无" : this.txtOperatorReason.Text);
             if (msg.Length > 0)
             {
                 MessageBox.Show(msg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             else
             {
                 BindApprovalList();
                 BindApprovalNodeList(approveFlow);
                 this.txtOperatorReason.Text = string.Empty;
                 this.PharmacyDatabaseService.WriteLog(AppClientContext.CurrentUser.Id, "执行审批记录通过操作成功:(" + approveFlow.ChangeNote + ")");
             }
         }
     }
     catch (Exception ex)
     {
         Log.Error(ex);
         MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
     btnAccept.Enabled = true;
 }
        private void BindApprovalNodeList(Models.ApprovalFlow approveFlow)
        {
            string msg = string.Empty;
            List <ApprovalDetailsModel> approveList = new List <ApprovalDetailsModel>();

            approveList = PharmacyDatabaseService.GetApprovalDetails(out msg, approveFlow.FlowId, approveFlow.SubFlowId, new object[] { }).ToList();
            this.dgvApprovalNodeList.AutoGenerateColumns = false;
            this.dgvApprovalNodeList.DataSource          = approveList;
            this.dgvApprovalNodeList.Tag = approveFlow.Id;
        }
        /// <summary>
        /// 打开详细的审批对象信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvApprovalList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }

            //加入详细画面
            //this.plDetailView.Container.Add(UserControl);
            if (dgvApprovalList.Columns[e.ColumnIndex].Name == "查看详细")
            {
                Models.ApprovalFlow flow = dgvApprovalList.Rows[e.RowIndex].DataBoundItem as Models.ApprovalFlow;
                if (flow != null)
                {
                    string           msg      = string.Empty;
                    ApprovalFlowType flowType = PharmacyDatabaseService.GetApprovalFlowType(out msg, flow.ApprovalFlowTypeId);
                    switch (flowType.ApprovalTypeValue)
                    {
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitEditApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitLockApproval:
                        ucSupplyUnit uc = new ucSupplyUnit(flow.FlowId);
                        uc.Name = "DetailView";
                        this.plDetailView.Controls.Add(uc);
                        break;

                    case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoEditApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoLockApproval:
                        ucGoodsInfo ucdi = new ucGoodsInfo();
                        ucdi.Name = "DetailView";
                        this.plDetailView.Controls.Add(ucdi);
                        break;

                    case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitEditApproval:
                    case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitLockApproval:
                        ucPurchaseUnit ucpu = new ucPurchaseUnit(flow.FlowId);
                        ucpu.Name = "DetailView";
                        this.plDetailView.Controls.Add(ucpu);
                        break;
                    }
                }

                //显示详细
                this.plDetailView.BringToFront();
                this.plDetailView.Visible = true;
            }
            else //打开详细流程记录, 审批流程表(上表)里的一条被选中后,把详细审批过程写入审批流程详细表(下表)
            {
                dgvApprovalList_RowEnter(sender, e);
            }
        }
        /// <summary>
        /// 打开详细流程记录, 审批流程表(上表)里的一条被选中后,把详细审批过程写入审批流程详细表(下表)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvApprovalList_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex > -1)
            {
                string msg = string.Empty;
                Models.ApprovalFlow flow = _approveFlowList[e.RowIndex];

                if (this.dgvApprovalNodeList.Tag == null ||
                    flow.Id != (Guid)this.dgvApprovalNodeList.Tag)
                {
                    List <ApprovalFlowRecord> approveList = new List <ApprovalFlowRecord>();
                    approveList = PharmacyDatabaseService.GetFinishApproveFlowsRecord(out msg, flow.FlowId, flow.SubFlowId).OrderBy(p => p.CreateTime).ToList();
                    this.dgvApprovalNodeList.AutoGenerateColumns = false;
                    this.dgvApprovalNodeList.DataSource          = approveList;
                    this.dgvApprovalNodeList.Tag = flow.Id;
                }
            }
        }
 /// <summary>
 /// 拒绝审批
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnReject_Click(object sender, EventArgs e)
 {
     if (this.dgvApprovalList.Rows.Count <= 0)
     {
         return;
     }
     if (MessageBox.Show("确定要拒绝该审批吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != System.Windows.Forms.DialogResult.OK)
     {
         return;
     }
     try
     {
         if (dgvApprovalList.CurrentRow != null)
         {
             int currRowIndex = dgvApprovalList.CurrentRow.Cells[0].RowIndex;
             Models.ApprovalFlow approveFlow = _approveFlowList[currRowIndex];
             string msg = string.Empty;
             msg = PharmacyDatabaseService.SetApproveAction(approveFlow, "REJECT", AppClientContext.CurrentUser.Id, string.IsNullOrWhiteSpace(this.txtOperatorReason.Text) ? "无" : this.txtOperatorReason.Text);
             if (msg.Length > 0)
             {
                 MessageBox.Show(msg, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
             else
             {
                 BindApprovalList();
                 BindApprovalNodeList(approveFlow);
                 this.txtOperatorReason.Text = string.Empty;
                 this.PharmacyDatabaseService.WriteLog(AppClientContext.CurrentUser.Id, "执行审批记录拒绝操作成功");
             }
         }
     }
     catch (Exception ex)
     {
         Log.Error(ex);
         MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
        /// <summary>
        /// 打开详细的审批对象信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvApprovalList_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex < 0)
                {
                    return;
                }

                //加入详细画面
                if (dgvApprovalList.Columns[e.ColumnIndex].Name == "查看详细")
                {
                    if (dgvApprovalList.Rows[e.RowIndex].Cells[4].Value != null)
                    {
                        string msg = string.Empty;
                        Models.ApprovalFlow flow     = _approveFlowList[e.RowIndex];
                        ApprovalFlowType    flowType = PharmacyDatabaseService.GetApprovalFlowType(out msg, flow.ApprovalFlowTypeId);
                        switch (flowType.ApprovalTypeValue)
                        {
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitEditApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.SupplyUnitLockApproval:
                            ucSupplyUnit uc = new ucSupplyUnit(flow.FlowId);
                            uc.Name = "DetailView";
                            this.plDetailView.Controls.Add(uc);
                            break;

                        case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoEditApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.DrugInfoLockApproval:
                            DrugInfo di = this.PharmacyDatabaseService.GetDrugInfoByFlowID(out msg, flow.FlowId);
                            if (di.BusinessScopeCode.Contains("医疗器械"))
                            {
                                BaseDataManage.FormInstrument frmInstrument = new BaseDataManage.FormInstrument
                                {
                                    entity = di,
                                };
                                Common.SetControls.SetControlReadonly(frmInstrument, true);
                                frmInstrument.FSE = FormStatusEnum.Read;
                                frmInstrument.ShowDialog();
                                return;
                            }
                            else
                            {
                                ucGoodsInfo ucdi = new ucGoodsInfo(di);
                                Common.SetControls.SetControlReadonly(ucdi, true);
                                ucdi.Name = "DetailView";
                                this.plDetailView.Controls.Add(ucdi);
                            }
                            break;

                        case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitEditApproval:
                        case (int)BugsBox.Pharmacy.Models.ApprovalType.PurchaseUnitLockApproval:
                            ucPurchaseUnit ucpu = new ucPurchaseUnit(flow.FlowId);
                            ucpu.Name = "DetailView";
                            this.plDetailView.Controls.Add(ucpu);
                            break;

                        case (int)BugsBox.Pharmacy.Models.ApprovalType.drugsUnqualityApproval:
                            Business.Models.drugsUnqualificationQuery dq = PharmacyDatabaseService.getDrugsUnqualificationQueryByFlowID(flow.FlowId, out msg);
                            ucDrugsUnqualification ucdu = new ucDrugsUnqualification(dq);
                            ucdu.initApprovalDetail(flow.FlowId);
                            ucdu.Name = "DetailView";
                            this.plDetailView.Controls.Add(ucdu);
                            break;

                        case (int)ApprovalType.drugsBreakageApproval:
                            DrugsBreakage  db   = PharmacyDatabaseService.GetDrugsBreakageByFlowID(flow.FlowId, out msg);
                            UcDrugBreakage ucdb = new UcDrugBreakage(db, flow);
                            ucdb.Name = "DetailView";
                            this.plDetailView.Controls.Add(ucdb);
                            break;

                        case (int)ApprovalType.VehicleApproval:
                            Vehicle v = this.PharmacyDatabaseService.GetVehicleByFlowID(flow.FlowId, out msg);
                            if (v == null)
                            {
                                return;
                            }
                            DataDictionary.FormVehicleEdit frm = new DataDictionary.FormVehicleEdit(v, true);
                            frm.ShowDialog();
                            return;

                        case (int)ApprovalType.DirectSalesApproval:
                            DirectSalesOrder dso  = this.PharmacyDatabaseService.GetDirectSalesOrderByFlowId(flow.FlowId, out msg);
                            UCDirectSales    UCDS = new UCDirectSales(dso);
                            UCDS.Name = "DetailView";
                            this.plDetailView.Controls.Add(UCDS);
                            break;
                        }
                    }

                    //显示详细
                    this.plDetailView.BringToFront();
                    this.plDetailView.Visible = true;
                }
                else //打开详细流程记录, 审批流程表(上表)里的一条被选中后,把详细审批过程写入审批流程详细表(下表)
                {
                    dgvApprovalList_RowEnter(sender, e);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }