Пример #1
0
        public int AddItem(FarPoint.Win.Spread.SheetView sv, int activeRow)
        {
            string inNO = sv.Cells[activeRow, 5].Text;

            Neusoft.HISFC.Models.Pharmacy.Input input = this.itemManager.GetInputInfoByID(inNO);
            if (input == null)
            {
                MessageBox.Show(Language.Msg(this.itemManager.Err));
                return(-1);
            }
            if (this.hsInData.ContainsKey(this.GetKey(input)))
            {
                MessageBox.Show(Language.Msg("该药品已添加"));
                return(-1);
            }

            if (this.AddDataToTable(input) == 1)
            {
                this.hsInData.Add(this.GetKey(input), input);
            }

            this.SetFormat();

            this.SetFocusSelect();

            return(1);
        }
Пример #2
0
        /// <summary>
        /// 根据入库信息设置界面显示
        /// </summary>
        /// <param name="input">入库信息</param>
        private void SetInInstance(Neusoft.HISFC.Models.Pharmacy.Input inInstance)
        {
            this.SetItem(inInstance.Item);

            //入库数量
            this.ntbInQty.Text = Math.Round(inInstance.Quantity / inInstance.Item.PackQty, 2).ToString("N");
            //入库金额
            this.ntbInCost.Text = inInstance.RetailCost.ToString();
            //零售金额
            this.ntbPurchaseCost.Text = inInstance.PurchaseCost.ToString();
            //批    号
            this.txtBatchNO.Text = inInstance.BatchNO;
            //有 效 期
            this.dtValidTime.Value = inInstance.ValidTime;
            if (inInstance.InvoiceNO != "" && inInstance.InvoiceNO != null)
            {
                //发 票 号
                this.txtInvoiceNO.Text = inInstance.InvoiceNO;
            }
            //发票分类
            this.cmbInvoiceType.Text = inInstance.InvoiceType;
            //购 入 价
            this.ntbPurchasePrice.Text = inInstance.Item.PriceCollection.PurchasePrice.ToString();
            //生产厂家
            this.cmbProduce.Text = inInstance.Item.Product.Producer.Name;
            this.cmbProduce.Tag  = inInstance.Item.Product.Producer.ID;
            //送货单号
            this.txtDeliveryNO.Text = inInstance.DeliveryNO;
            //货位号
            this.txtPlaceNO.Text = inInstance.PlaceNO;
            //备注
            this.txtMemo.Text = inInstance.Memo;
        }
Пример #3
0
        /// <summary>
        /// 获取输入的入库信息
        /// </summary>
        private void GetInInstance()
        {
            if (this.inInstance == null)
            {
                this.inInstance = new Neusoft.HISFC.Models.Pharmacy.Input();
            }

            if (this.item == null || this.item.ID == "")
            {
                return;
            }

            this.inInstance.Item        = this.item;                                                                         //药品信息
            this.inInstance.Quantity    = NConvert.ToDecimal(this.ntbInQty.NumericValue) * this.item.PackQty;                //入库数量
            this.inInstance.RetailCost  = NConvert.ToDecimal(this.ntbInCost.NumericValue);                                   //入库金额
            this.inInstance.BatchNO     = Neusoft.FrameWork.Public.String.TakeOffSpecialChar(this.txtBatchNO.Text.Trim());   //批    号
            this.inInstance.ValidTime   = this.dtValidTime.Value.Date;                                                       //有 效 期
            this.inInstance.InvoiceNO   = Neusoft.FrameWork.Public.String.TakeOffSpecialChar(this.txtInvoiceNO.Text.Trim()); //发 票 号
            this.inInstance.InvoiceType = this.cmbInvoiceType.Text.Trim();                                                   //发票分类
            this.inInstance.Item.PriceCollection.PurchasePrice = NConvert.ToDecimal(this.ntbPurchasePrice.NumericValue);     //购入价
            if (this.cmbProduce.Tag != null)                                                                                 //生产厂家
            {
                //{3F6FF86C-0C62-44de-B09B-595B297DD832}
                this.inInstance.Producer.ID   = this.cmbProduce.Tag.ToString();
                this.inInstance.Producer.Name = this.cmbProduce.Text.Trim();

                //{C03DD304-AE71-4b6a-BC63-F385DB162EB7}
                this.inInstance.Item.Product.Producer.ID   = this.cmbProduce.Tag.ToString();
                this.inInstance.Item.Product.Producer.Name = this.cmbProduce.Text.Trim();
            }
            this.inInstance.DeliveryNO = this.txtDeliveryNO.Text.Trim();                                                  //送货单号
            this.inInstance.PlaceNO    = Neusoft.FrameWork.Public.String.TakeOffSpecialChar(this.txtPlaceNO.Text.Trim()); //货位号
            this.inInstance.Memo       = Neusoft.FrameWork.Public.String.TakeOffSpecialChar(this.txtMemo.Text);           //备注
        }
Пример #4
0
        /// <summary>
        /// 将实体信息加入DataTable内
        /// </summary>
        /// <param name="input">入库信息</param>
        /// <returns></returns>
        protected virtual int AddDataToTable(Neusoft.HISFC.Models.Pharmacy.Input input)
        {
            if (this.dt == null)
            {
                this.InitDataTable();
            }

            try
            {
                input.RetailCost = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;

                this.dt.Rows.Add(new object[] {
                    input.Item.Name,                                                        //商品名称
                    input.Item.Specs,                                                       //规格
                    input.Item.PriceCollection.RetailPrice,                                 //零售价
                    input.BatchNO,                                                          //批号
                    input.Item.PackUnit,                                                    //包装单位
                    input.Quantity / input.Item.PackQty,                                    //入库数量
                    input.RetailCost,                                                       //入库金额
                    input.InvoiceNO,                                                        //发票号
                    input.InvoiceType,                                                      //发票类别
                    input.Item.PriceCollection.PurchasePrice,                               //购入价
                    input.PurchaseCost,                                                     //购入金额
                    input.Item.Product.Producer.Name,                                       //生产厂家
                    input.Operation.ApplyOper.ID,                                           //申请人
                    input.Operation.ApplyOper.OperTime,                                     //申请日期
                    input.Memo,                                                             //备注
                    input.Item.ID,                                                          //药品编码
                    input.Item.NameCollection.SpellCode,                                    //拼音码
                    input.Item.NameCollection.WBCode,                                       //五笔码
                    input.Item.NameCollection.UserCode,                                     //自定义码
                    input.GroupNO.ToString()
                }
                                 );
            }
            #region {CAD2CB10-14FE-472c-A7D7-9BAA5061730C}
            catch (System.Data.ConstraintException cex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("该药品已选择不能重复选择!"));

                return(-1);
            }
            #endregion
            catch (System.Data.DataException e)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + e.Message));

                return(-1);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + ex.Message));

                return(-1);
            }

            return(1);
        }
Пример #5
0
        /// <summary>
        /// 根据出库流水号获取待核准数据
        /// </summary>
        /// <param name="outNO">出库流水号</param>
        /// <returns></returns>
        private int AddOutDataByOutNO(string outNO)
        {
            ArrayList alDetail = this.itemManager.QueryOutputList(outNO);

            if (alDetail == null || alDetail.Count <= 0)
            {
                MessageBox.Show(Language.Msg("根据出库流水号获取出库数据发生错误"));
                return(-1);
            }

            foreach (Neusoft.HISFC.Models.Pharmacy.Output output in alDetail)
            {
                Neusoft.HISFC.Models.Pharmacy.Input input = this.InputConvert(output);

                if (this.hsInData.ContainsKey(this.GetKey(input)))
                {
                    MessageBox.Show(Language.Msg("该数据已加入选择!"));
                    return(0);
                }

                //是否已包含该单据
                if (!this.hsListNO.ContainsKey(input.OutListNO))
                {
                    if (this.hsListNO.Count > 0)
                    {
                        string       msg = Language.Msg(string.Format("该药品入库单据号与当前入库单据号不同 该药品入库单据{0} 确认加入吗?", input.OutListNO));
                        DialogResult rs  = MessageBox.Show(msg, "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (rs == DialogResult.No)
                        {
                            return(0);
                        }
                    }
                }

                if (this.AddDataToTable(input) == 1)
                {
                    this.hsInData.Add(this.GetKey(input), input);
                    //保存单据号
                    if (this.hsListNO.ContainsKey(input.OutListNO))
                    {
                        this.hsListNO[input.OutListNO] = ((int)this.hsListNO[input.OutListNO]) + 1;
                    }
                    else
                    {
                        this.AddListNO(input.OutListNO);
                    }
                }
            }

            this.SetFormat();

            return(1);
        }
Пример #6
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="sv">需执行删除的Fp</param>
        /// <param name="delRowIndex">需删除的行索引</param>
        /// <returns>成功返回1 失败返回-1</returns>
        public virtual int Delete(FarPoint.Win.Spread.SheetView sv, int delRowIndex)
        {
            try
            {
                if (sv != null && delRowIndex >= 0)
                {
                    string[] keys = new string[] {
                        sv.Cells[delRowIndex, (int)ColumnSet.ColDrugID].Text,
                        sv.Cells[delRowIndex, (int)ColumnSet.ColBatchNO].Text
                    };
                    DataRow dr = this.dt.Rows.Find(keys);
                    if (dr != null)
                    {
                        Neusoft.HISFC.Models.Pharmacy.Input input = this.hsInputData[dr["药品编码"].ToString() + dr["批号"].ToString()] as Neusoft.HISFC.Models.Pharmacy.Input;

                        //增加直接删除外部入库申请功能 by Sunjh 2010-8-23 {EB33BF6F-D122-4330-8D89-BB8695DD5A48}
                        if (MessageBox.Show("是否删除当前申请信息,是则直接提交保存", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            Neusoft.HISFC.BizLogic.Pharmacy.Item itemManager = new Neusoft.HISFC.BizLogic.Pharmacy.Item();
                            if (itemManager.DeleteApplyIn(input.ID) == -1)
                            {
                                MessageBox.Show("删除失败!");
                            }
                        }
                        else
                        {
                            return(-1);
                        }

                        this.hsInputData.Remove(dr["药品编码"].ToString() + dr["批号"].ToString());

                        this.dt.Rows.Remove(dr);
                        //合计计算
                        this.CompuateSum();
                    }
                }
            }
            catch (System.Data.DataException e)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("对数据表执行删除操作发生错误" + e.Message));
                return(-1);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("对数据表执行删除操作发生错误" + ex.Message));
                return(-1);
            }

            return(1);
        }
Пример #7
0
        private void Fp_CellDoubleClick(object sender, FarPoint.Win.Spread.CellClickEventArgs e)
        {
            string[] keys = new string[] {
                this.svTemp.Cells[e.Row, (int)ColumnSet.ColDrugID].Text,
                this.svTemp.Cells[e.Row, (int)ColumnSet.ColBatchNO].Text
            };
            DataRow dr = this.dt.Rows.Find(keys);

            if (dr != null)
            {
                this.privKey = dr["药品编码"].ToString() + dr["批号"].ToString();

                Neusoft.HISFC.Models.Pharmacy.Input input = this.hsInputData[dr["药品编码"].ToString() + dr["批号"].ToString()] as Neusoft.HISFC.Models.Pharmacy.Input;

                this.ucDetail.InInstance = input.Clone();
            }
        }
Пример #8
0
        /// <summary>
        /// 根据药品编码与批次号加入入库退库信息
        /// </summary>
        /// <param name="drugNO"></param>
        /// <param name="groupNO"></param>
        /// <returns></returns>
        protected virtual int AddInData(string drugNO, int groupNO)
        {
            if (this.hsInData.ContainsKey(drugNO + groupNO))
            {
                MessageBox.Show(Language.Msg("该药品已添加"));
                return(0);
            }
            ArrayList alDetail = this.itemManager.QueryStorageList(this.phaInManager.DeptInfo.ID, drugNO, groupNO);

            if (alDetail == null || alDetail.Count == 0)
            {
                MessageBox.Show(Language.Msg("未获取有效的库存明细信息" + this.itemManager.Err));
                return(-1);
            }

            Neusoft.HISFC.Models.Pharmacy.Storage storage = alDetail[0] as Neusoft.HISFC.Models.Pharmacy.Storage;

            Neusoft.HISFC.Models.Pharmacy.Input input = new Neusoft.HISFC.Models.Pharmacy.Input();

            input.StockDept  = storage.StockDept;               //库存科室
            input.TargetDept = this.phaInManager.TargetDept;    //目标科室
            input.Company    = this.phaInManager.TargetDept;
            input.Item       = storage.Item;
            input.GroupNO    = storage.GroupNO;
            input.Quantity   = storage.StoreQty;                //入库量 = 库存量
            input.BatchNO    = storage.BatchNO;
            input.ValidTime  = storage.ValidTime;
            input.PlaceNO    = storage.PlaceNO;
            input.InvoiceNO  = storage.InvoiceNO;
            input.Producer   = storage.Producer;
            input.Memo       = storage.Memo;
            input.PrivType   = this.phaInManager.PrivType.ID;           //入库类型
            input.SystemType = this.phaInManager.PrivType.Memo;         //系统类型

            if (this.AddDataToTable(input) == 1)
            {
                this.hsInData.Add(this.GetKey(input), input);
            }

            this.SetFormat();

            this.SetFocusSelect();

            return(1);
        }
Пример #9
0
        /// <summary>
        /// 转换
        /// </summary>
        /// <param name="item"></param>
        /// <param name="dataSource">数据来源 1 采购单 2 申请单 0 手工选择</param>
        /// <returns></returns>
        protected Neusoft.HISFC.Models.Pharmacy.Input ConvertToInput(Neusoft.HISFC.Models.Pharmacy.Item item, string dataSource)
        {
            Neusoft.HISFC.Models.Pharmacy.Input input = new Neusoft.HISFC.Models.Pharmacy.Input();

            input.Item = item;

            #region 实体赋值

            input.StockDept  = this.phaInManager.DeptInfo;                      //库存科室
            input.PrivType   = this.phaInManager.PrivType.ID;                   //用户类型
            input.SystemType = this.phaInManager.PrivType.Memo;                 //系统类型
            input.Company    = this.phaInManager.TargetDept;                    //供货单位
            input.TargetDept = this.phaInManager.TargetDept;                    //目标单位 = 供货单位

            input.User01 = dataSource;                                          //数据来源 1 采购单 2 申请单 0 手工选择

            #endregion

            return(input);
        }
Пример #10
0
        /// <summary>
        /// 入库实体赋值
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        private Neusoft.HISFC.Models.Pharmacy.Input InputConvert(Neusoft.HISFC.Models.Pharmacy.Output output)
        {
            Neusoft.HISFC.Models.Pharmacy.Input input = new Neusoft.HISFC.Models.Pharmacy.Input();

            #region Input 信息填充

            //补充目标单位信息
            if (this.phaInManager.TargetDept.ID == "")
            {
                this.FillTargetInfo(input.TargetDept.ID);
            }

            input.StockDept   = this.phaInManager.DeptInfo;                 //申请科室
            input.PrivType    = this.phaInManager.PrivType.ID;              //入库分类
            input.SystemType  = this.phaInManager.PrivType.Memo;            //系统类型
            input.State       = "2";                                        //状态 核准
            input.Company     = this.phaInManager.TargetDept;
            input.TargetDept  = this.phaInManager.TargetDept;               //目标单
            input.Item        = output.Item;                                //药品实体信息
            input.OutBillNO   = output.ID;                                  //出库流水号
            input.OutListNO   = output.OutListNO;                           //出库单据号
            input.OutSerialNO = output.SerialNO;                            //序号
            input.SerialNO    = output.SerialNO;
            input.BatchNO     = output.BatchNO;                             //批号
            input.ValidTime   = output.ValidTime;                           //有效期
            input.Quantity    = output.Quantity;                            //数量
            input.PlaceNO     = output.PlaceNO;                             //货位号
            input.GroupNO     = output.GroupNO;                             //批次
            input.Operation   = output.Operation;                           //操作信息

            #endregion

            //存储主键信息
            //出库审批数据 多批次出库时 同一药品不同批次 流水号相同 单据内序号不同
            input.User03 = output.ID + output.SerialNO;

            return(input);
        }
Пример #11
0
        public int Delete(FarPoint.Win.Spread.SheetView sv, int delRowIndex)
        {
            try
            {
                if (sv != null && delRowIndex >= 0)
                {
                    string[] keys = this.GetKey();

                    DataRow dr = this.dt.Rows.Find(keys);
                    if (dr != null)
                    {
                        this.phaInManager.Fp.StopCellEditing();

                        //移出单据号
                        Neusoft.HISFC.Models.Pharmacy.Input tempInput = this.hsInData[this.GetKey(dr)] as Neusoft.HISFC.Models.Pharmacy.Input;
                        this.RemoveListNO(tempInput.OutListNO);
                        //由入库实体集合内移出
                        this.hsInData.Remove(this.GetKey(dr));
                        this.dt.Rows.Remove(dr);

                        this.phaInManager.Fp.StartCellEditing(null, false);
                    }
                }
            }
            catch (System.Data.DataException e)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("对数据表执行删除操作发生错误" + e.Message));
                return(-1);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("对数据表执行删除操作发生错误" + ex.Message));
                return(-1);
            }

            return(1);
        }
Пример #12
0
        private void Save()
        {
            if (this.neuSpread1_Sheet1.Rows.Count <= 0)
            {
                return;
            }

            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();

            Neusoft.HISFC.BizLogic.Pharmacy.Item itemManager = new Neusoft.HISFC.BizLogic.Pharmacy.Item();
            //itemManager.SetTrans(t.Trans);

            for (int i = 0; i < this.neuSpread1_Sheet1.Rows.Count; i++)
            {
                if (Neusoft.FrameWork.Function.NConvert.ToBoolean(this.neuSpread1_Sheet1.Cells[i, 0].Value))
                {
                    Neusoft.HISFC.Models.Pharmacy.Input input = this.neuSpread1_Sheet1.Rows[i].Tag as Neusoft.HISFC.Models.Pharmacy.Input;

                    input.Company = this.newCompany;

                    if (itemManager.UpdateInput(input) != 1)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        MessageBox.Show("更新供货公司信息失败");
                        return;
                    }
                }
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            MessageBox.Show("保存成功");
        }
Пример #13
0
 /// <summary>
 /// 主键
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 private string GetKey(Neusoft.HISFC.Models.Pharmacy.Input input)
 {
     return(input.Item.ID + input.GroupNO.ToString() + input.BatchNO);
 }
Пример #14
0
 /// <summary>
 /// 获取主键值
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 private string GetKey(Neusoft.HISFC.Models.Pharmacy.Input input)
 {
     //return input.Item.ID + input.BatchNO + input.InvoiceNO;
     return(input.User03);
 }
Пример #15
0
        /// <summary>
        /// 保存
        /// </summary>
        public virtual void Save()
        {
            if (!this.Valid())
            {
                return;
            }

            Neusoft.FrameWork.WinForms.Classes.Function.ShowWaitForm("正在进行保存操作..请稍候");
            System.Windows.Forms.Application.DoEvents();

            #region 事务定义

            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            Neusoft.HISFC.BizProcess.Integrate.Pharmacy phaIntegrate = new Neusoft.HISFC.BizProcess.Integrate.Pharmacy();
            Neusoft.HISFC.BizLogic.Pharmacy.Item        itemManager  = new Neusoft.HISFC.BizLogic.Pharmacy.Item();

            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();
            //itemManager.SetTrans(t.Trans);
            //phaIntegrate.SetTrans(t.Trans);

            #endregion

            //当天操作日期
            DateTime sysTime = itemManager.GetDateTimeFromSysDateTime();
            //入库单据号
            string inListNO = null;

            Neusoft.HISFC.Models.Pharmacy.Input input = new Neusoft.HISFC.Models.Pharmacy.Input();
            foreach (DataRow dr in this.dt.Rows)
            {
                string key = dr["药品编码"].ToString() + dr["批号"].ToString();

                input = this.hsInputData[key] as Neusoft.HISFC.Models.Pharmacy.Input;

                if (inListNO == null)
                {
                    inListNO = input.InListNO;
                }

                #region 如果不存在入库单据号 则获取新入库单据号

                if (inListNO == "" || inListNO == null)
                {
                    // //{59C9BD46-05E6-43f6-82F3-C0E3B53155CB} 更改入库单号获取方式
                    inListNO = phaIntegrate.GetInOutListNO(this.phaInManager.DeptInfo.ID, true);
                    if (inListNO == null)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        this.ShowMsg("获取最新入库单号出错" + itemManager.Err);
                        return;
                    }
                }

                #endregion

                input.InListNO = inListNO;                                          //入库单据号

                #region 以下信息在每次添加数据生成入库信息实体时赋值

                input.StockDept  = this.phaInManager.DeptInfo;                      //库存科室
                input.PrivType   = this.phaInManager.PrivType.ID;                   //用户类型
                input.SystemType = this.phaInManager.PrivType.Memo;                 //系统类型
                input.Company    = this.phaInManager.TargetDept;                    //供货单位
                input.TargetDept = this.phaInManager.TargetDept;                    //目标单位 = 供货单位

                #endregion

                if (input.Operation.ApplyOper.ID == "")
                {
                    input.Operation.ApplyQty           = input.Quantity;                //入库申请量
                    input.Operation.ApplyOper.ID       = this.phaInManager.OperInfo.ID;
                    input.Operation.ApplyOper.OperTime = sysTime;
                }

                input.Operation.Oper.ID       = this.phaInManager.OperInfo.ID;
                input.Operation.Oper.OperTime = sysTime;
                input.Operation.ApplyQty      = input.Quantity;                     //入库申请量

                input.State = "0";

                if (itemManager.SetApplyIn(input) == -1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    this.ShowMsg("入库 保存失败" + itemManager.Err);
                    return;
                }
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            this.ShowMsg("外部入库申请保存成功");

            this.Clear();
        }
Пример #16
0
        /// <summary>
        /// 添加待核准的出库数据
        /// </summary>
        /// <param name="outListNO">出库单据号</param>
        private void AddOutDataByListNO(string outListNO)
        {
            ArrayList alDetail = this.itemManager.QueryOutputInfo(this.phaInManager.TargetDept.ID, outListNO, "1");

            if (alDetail == null)
            {
                MessageBox.Show(Language.Msg("获取入库待核准数据发生错误" + this.itemManager.Err));
                return;
            }
            if (alDetail.Count == 0)
            {
                MessageBox.Show(Language.Msg("该单据可能已被核准"));
                return;
            }

            //先设置Fp进行初始化 提高加载速度
            ((System.ComponentModel.ISupportInitialize)(this.phaInManager.Fp)).BeginInit();

            foreach (Neusoft.HISFC.Models.Pharmacy.Output output in alDetail)
            {
                //对为零的记录不进行处理
                if (output.Quantity == 0)
                {
                    continue;
                }
                //对退库数量等于出库数量的 不进行处理 该记录已全部出库
                if (output.Quantity == output.Operation.ReturnQty)
                {
                    continue;
                }

                Neusoft.HISFC.Models.Pharmacy.Input input = this.InputConvert(output);

                if (this.AddDataToTable(input) == 1)
                {
                    this.hsInData.Add(this.GetKey(input), input);
                }
                else
                {
                    ((System.ComponentModel.ISupportInitialize)(this.phaInManager.Fp)).EndInit();
                    MessageBox.Show(Language.Msg("加载出库实体信息时发生错误"));
                    return;
                }
            }

            if (this.phaInManager.FpSheetView.Rows.Count == 0)
            {
                ((System.ComponentModel.ISupportInitialize)(this.phaInManager.Fp)).EndInit();
                MessageBox.Show(Language.Msg("该单据内不存在有效的待核准记录 药品都已退库或核准完成"));
                return;
            }

            //保存当前单据信息
            this.hsListNO.Add(outListNO, alDetail.Count);

            this.SetFormat();

            ((System.ComponentModel.ISupportInitialize)(this.phaInManager.Fp)).EndInit();

            return;
        }
Пример #17
0
        private void ucDetail_InInstanceCompleteEvent(ref Neusoft.FrameWork.Models.NeuObject msg)
        {
            Neusoft.HISFC.Models.Pharmacy.Input tempInput = this.ucDetail.InInstance.Clone();

            if (tempInput != null)
            {
                if (tempInput.Item.ID == "")
                {
                    return;
                }

                #region 判断是否存在供货公司

                if (this.phaInManager.TargetDept.ID == "")
                {
                    MessageBox.Show(Language.Msg("请选择供货单位"));

                    //通知ucDetail内 不处理焦点
                    if (msg == null)
                    {
                        msg = new Neusoft.FrameWork.Models.NeuObject();
                    }
                    msg.User01 = "-1";      //标志是否处理焦点

                    this.phaInManager.SetDeptFocus();

                    return;
                }

                #endregion

                #region 是否判断此时选择的供货公司与药品基本信息维护的供货公司

                if (this.isJudgeDefaultCompany)
                {
                    if (tempInput.Item.Product.Company.ID != "" && this.phaInManager.TargetDept.ID != tempInput.Item.Product.Company.ID)
                    {
                        DialogResult rs = MessageBox.Show(Language.Msg("当前选择的供货单位与药品维护的默认供货单位不同 是否继续?"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                        if (rs == DialogResult.No)
                        {
                            return;
                        }
                    }
                }

                #endregion

                string key = tempInput.Item.ID + tempInput.BatchNO;

                #region 判断该药品信息是否存在 如果存在则删除原信息 重新赋值

                if (this.privKey != "" && this.privKey.Substring(0, 12) != key.Substring(0, 12))
                {
                    this.privKey = "";
                }

                if (!this.hsInputData.ContainsKey(this.privKey))
                {
                    tempInput.ID = "";//修改双击修改药品时重新选择药品后保存不上而直接覆盖的问题 by Sunjh 2010-8-23 {9EEBBBFA-AB66-41aa-A9DB-0E48FF995EFB}
                }

                //无批号 删除原信息 重新添加 避免重复添加两次
                if (this.privKey.Length == 12)
                {
                    if (this.hsInputData.ContainsKey(this.privKey))
                    {
                        this.hsInputData.Remove(this.privKey);
                        string[] keys   = new string[] { this.privKey.Substring(0, 12), "" };
                        DataRow  drFind = this.dt.Rows.Find(keys);
                        if (drFind != null)
                        {
                            this.dt.Rows.Remove(drFind);
                        }
                    }
                }
                //对相同药品/批号 删除原数据
                if (this.hsInputData.ContainsKey(key))
                {
                    this.hsInputData.Remove(key);
                    string[] keys   = new string[] { tempInput.Item.ID, tempInput.BatchNO };
                    DataRow  drFind = this.dt.Rows.Find(keys);
                    if (drFind != null)
                    {
                        this.dt.Rows.Remove(drFind);
                    }
                }

                #endregion

                #region 实体赋值

                tempInput.StockDept  = this.phaInManager.DeptInfo;                      //库存科室
                tempInput.PrivType   = this.phaInManager.PrivType.ID;                   //用户类型
                tempInput.SystemType = this.phaInManager.PrivType.Memo;                 //系统类型
                tempInput.Company    = this.phaInManager.TargetDept;                    //供货单位
                tempInput.TargetDept = this.phaInManager.TargetDept;                    //目标单位 = 供货单位

                #endregion

                if (this.AddDataToTable(tempInput) == 1)
                {
                    this.hsInputData.Add(key, tempInput);

                    this.SetFormat();

                    if (this.svTemp != null)
                    {
                        #region {D071715E-B5DB-4e7e-A060-069B08F62508}

                        this.svTemp.ActiveRowIndex = 0;

                        #endregion
                    }
                }

                this.CompuateSum();
            }
        }
Пример #18
0
        /// <summary>
        /// 向DataTable内增加入库数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private int AddDataToTable(Neusoft.HISFC.Models.Pharmacy.Input input)
        {
            if (this.dt == null)
            {
                this.InitDataTable();
            }

            try
            {
                input.RetailCost   = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;
                input.PurchaseCost = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.PurchasePrice;

                bool isApprove = false;

                if (this.isPIDept)
                {
                    isApprove = false;
                }
                else
                {
                    isApprove = true;
                }

                if (input.InvoiceNO == null)
                {
                    input.InvoiceNO = "";
                }

                this.dt.Rows.Add(new object[] {
                    isApprove,                                                              //核准
                    input.Item.Name,                                                        //商品名称
                    input.Item.Specs,                                                       //规格
                    input.BatchNO,                                                          //批号
                    input.Item.PriceCollection.RetailPrice,                                 //零售价
                    input.Item.PackUnit,                                                    //包装单位
                    input.Quantity / input.Item.PackQty,                                    //入库数量
                    input.RetailCost,                                                       //入库金额
                    input.InvoiceNO,                                                        //发票号
                    input.InvoiceType,                                                      //发票类别
                    input.Item.PriceCollection.PurchasePrice,                               //购入价
                    input.PurchaseCost,                                                     //购入金额
                    input.Item.Product.Producer.Name,                                       //生产厂家
                    input.Operation.ApplyQty / input.Item.PackQty,                          //申请数量
                    input.Memo,                                                             //备注
                    input.Item.ID,                                                          //药品编码                    //申请数量
                    input.Item.NameCollection.SpellCode,                                    //拼音码
                    input.Item.NameCollection.WBCode,                                       //五笔码
                    input.Item.NameCollection.UserCode,                                     //自定义码
                    input.User03
                }
                                 );
            }
            catch (System.Data.DataException e)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + e.Message));

                return(-1);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + ex.Message));

                return(-1);
            }

            return(1);
        }
Пример #19
0
        public void Save()
        {
            if (!this.Valid())
            {
                return;
            }

            this.dt.DefaultView.RowFilter = "1=1";
            for (int i = 0; i < this.dt.DefaultView.Count; i++)
            {
                this.dt.DefaultView[i].EndEdit();
            }

            #region 判断是否选择了核准数据

            bool isHaveCheck   = false;
            bool isHaveUnCheck = false;
            foreach (DataRow dr in this.dt.Rows)
            {
                if (NConvert.ToBoolean(dr["核准"]))
                {
                    isHaveCheck = true;
                }
                else
                {
                    isHaveUnCheck = true;
                }
            }

            if (!isHaveCheck)
            {
                MessageBox.Show(Language.Msg("请选择需核准数据"));
                return;
            }
            if (isHaveUnCheck)
            {
                DialogResult rs = MessageBox.Show(Language.Msg("存在未选择数据 确认对这些药品不进行核准吗?"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                if (rs == DialogResult.No)
                {
                    return;
                }
            }

            #endregion

            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            Neusoft.HISFC.BizProcess.Integrate.Pharmacy phaIntegrate = new Neusoft.HISFC.BizProcess.Integrate.Pharmacy();

            //Neusoft.FrameWork.Management.Transaction t = new Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();
            this.itemManager.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);
            //phaIntegrate.SetTrans(t.Trans);

            DateTime sysTime = this.itemManager.GetDateTimeFromSysDateTime();

            string inListNO = "";

            foreach (DataRow dr in this.dt.Rows)
            {
                if (!NConvert.ToBoolean(dr["核准"]))
                {
                    continue;
                }

                string key = this.GetKey(dr);

                //{7F9E7287-5803-4b42-9CFD-61A17FF1A5D4}  由Hash表获取数据时需调用Clone函数
                Neusoft.HISFC.Models.Pharmacy.Input input = (this.hsInData[key] as Neusoft.HISFC.Models.Pharmacy.Input).Clone();

                input.Operation.ApproveOper.OperTime = sysTime;                       //核准日期
                input.Operation.ApproveOper.ID       = this.phaInManager.OperInfo.ID; //核准人
                input.Operation.Oper = input.Operation.ApproveOper;

                if (input.ID == "" || input.InListNO == "" || input.GroupNO == 0)
                {
                    #region 药房入库核准时 无入库记录

                    if (inListNO == "" && (input.InListNO == "" || input.InListNO == null))
                    {
                        #region 获取新入库单号

                        if (input.OutListNO != "")
                        {
                            inListNO = input.OutListNO;
                        }
                        else
                        {
                            // //{59C9BD46-05E6-43f6-82F3-C0E3B53155CB} 更改入库单号获取方式
                            inListNO = phaIntegrate.GetInOutListNO(this.phaInManager.DeptInfo.ID, true);
                            if (inListNO == null)
                            {
                                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                                MessageBox.Show(Language.Msg("获取最新入库单号出错" + itemManager.Err));
                                return;
                            }
                        }

                        input.InListNO = inListNO;
                        #endregion
                    }
                    else
                    {
                        input.InListNO = inListNO;
                    }

                    decimal storageQty = 0;
                    if (this.itemManager.GetStorageNum(this.phaInManager.DeptInfo.ID, input.Item.ID, out storageQty) == -1)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        MessageBox.Show(Language.Msg("获取库存数量时出错" + this.itemManager.Err));
                        return;
                    }

                    input.StoreQty  = storageQty + input.Quantity;
                    input.StoreCost = input.StoreQty / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;

                    input.Operation.ApplyOper = input.Operation.ApproveOper.Clone();
                    #endregion
                }

                if (this.isApproveEdit)
                {
                    input.InvoiceNO = dr["发票号"].ToString().Trim();
                    input.Item.PriceCollection.PurchasePrice = NConvert.ToDecimal(dr["购入价"]);
                }

                input.StockDept.Memo = this.phaInManager.DeptInfo.Memo;         //保存科室类别 PI药库 P药房

                //更新库存标记 对药库不进行更新 对药房更新库存
                if (this.itemManager.ApproveInput(input, input.StockDept.Memo == "PI"?"0":"1") == -1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg("保存 " + dr["商品名称"].ToString() + " 时发生错误") + this.itemManager.Err);
                    return;
                }
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            MessageBox.Show(Language.Msg("保存成功"));

            this.Clear();

            this.ShowSelectData();
        }
Пример #20
0
 /// <summary>
 /// 检查入库药品有效性
 /// </summary>
 /// <param name="patient"></param>
 /// <param name="feeDetails"></param>
 /// <returns></returns>
 public int CheckPhaIn(Neusoft.HISFC.Models.Pharmacy.Input input)
 {
     return(1);
 }
Пример #21
0
        public void Save()
        {
            if (!this.Valid())
            {
                return;
            }

            this.dt.DefaultView.RowFilter = "1=1";
            for (int i = 0; i < this.dt.DefaultView.Count; i++)
            {
                this.dt.DefaultView[i].EndEdit();
            }

            DataTable dtAddMofity = this.dt.GetChanges(DataRowState.Added | DataRowState.Modified);

            if (dtAddMofity == null || dtAddMofity.Rows.Count <= 0)
            {
                return;
            }

            //定义事务
            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            //Neusoft.FrameWork.Management.Transaction t = new Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();

            this.itemManager.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            DateTime sysTime = this.itemManager.GetDateTimeFromSysDateTime();

            foreach (DataRow dr in dtAddMofity.Rows)
            {
                string key = this.GetKey(dr);

                Neusoft.HISFC.Models.Pharmacy.Input input = this.hsInData[key] as Neusoft.HISFC.Models.Pharmacy.Input;

                input.Operation.ExamOper.ID       = this.phaInManager.OperInfo.ID;          //审批人
                input.Operation.ExamOper.OperTime = sysTime;                                //审批时间
                input.InvoiceNO   = dr["发票号"].ToString().Trim();
                input.InvoiceType = dr["发票分类"].ToString().Trim();
                input.Item.PriceCollection.PurchasePrice = NConvert.ToDecimal(dr["购入价"]);
                input.PurchaseCost = NConvert.ToDecimal(dr["购入金额"]);

                int parm = this.itemManager.ExamInput(input);
                if (parm == -1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg(this.itemManager.Err));
                    return;
                }
                if (parm == 0)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg("数据可能已被审核,请刷新重试"));
                    return;
                }
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            MessageBox.Show(Language.Msg("审批确认成功"));

            //清屏显示
            this.Clear();
            this.ShowSelectData();
        }
Пример #22
0
        public void Save()
        {
            this.phaOutManager.Fp.StopCellEditing();

            if (!this.Valid())
            {
                return;
            }

            DialogResult rs = MessageBox.Show(Language.Msg("确认向" + this.phaOutManager.TargetDept.Name + "进行出库操作吗?"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

            if (rs == DialogResult.No)
            {
                return;
            }

            this.dt.DefaultView.RowFilter = "1=1";
            for (int i = 0; i < this.dt.DefaultView.Count; i++)
            {
                this.dt.DefaultView[i].EndEdit();
            }

            DataTable dtAddMofity = this.dt.GetChanges(DataRowState.Added | DataRowState.Modified);

            if (dtAddMofity == null || dtAddMofity.Rows.Count <= 0)
            {
                return;
            }

            this.phaOutManager.Fp.StopCellEditing();

            Neusoft.FrameWork.WinForms.Classes.Function.ShowWaitForm("正在进行保存操作..请稍候");
            System.Windows.Forms.Application.DoEvents();

            #region 事务定义

            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            Neusoft.HISFC.BizLogic.Pharmacy.Constant    phaCons      = new Neusoft.HISFC.BizLogic.Pharmacy.Constant();
            Neusoft.HISFC.BizProcess.Integrate.Pharmacy phaIntegrate = new Neusoft.HISFC.BizProcess.Integrate.Pharmacy();

            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();
            this.itemManager.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);
            //phaIntegrate.SetTrans(t.Trans);
            //phaCons.SetTrans(t.Trans);

            #endregion

            DateTime sysTime   = this.itemManager.GetDateTimeFromSysDateTime();
            string   outListNO = "";
            string   inListNO  = "";
            //判断领用科室是否管理库存
            bool isManagerStore = phaCons.IsManageStore(this.phaOutManager.TargetDept.ID);
            //如管理库存 则提示是否确认保存出库
            if (isManagerStore)
            {
                Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();

                DialogResult rsResult = MessageBox.Show(Language.Msg(this.phaOutManager.TargetDept.Name + "管理库存。确认进行出库操作吗?\n出库时将直接更新对方库存"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (rsResult == DialogResult.No)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    return;
                }

                Neusoft.FrameWork.WinForms.Classes.Function.ShowWaitForm("正在进行保存操作..请稍候");
                System.Windows.Forms.Application.DoEvents();
            }

            //一般出库对应的入库记录
            Neusoft.HISFC.Models.Pharmacy.Input input = null;

            //-------原程序处理方式
            //    //如领用科室管理库存 则只处理出库记录、更新本科室库存 不处理入库记录和领药科室库存 待领药科室入库核准后才处理库存
            //    //如领药科室不管理库存 则处理出库记录、更新本科室库存,试用期间处理入库记录、更新领药科室库存
            //    //						正式使用后不处理入库记录和领药科室库存
            //    //只需对isManagerStore赋值改变 对下边入库记录处理的判断做下修改即可
            //    //更新领药科室库存的操作封装于入库函数内 和入库记录一同处理 可通过传入参数判断是否处理库存
            //-------新程序处理方式
            //      一般出库时,不管目标科室是不是管理库存,都直接设置出库记录状态为已核准。
            //                  目标科室管理库存时,对目标科室产生入库记录,状态为已核准
            //                  目标科室不管理库存时,对目标科室不产生入库记录

            this.alPrintData = new ArrayList();

            foreach (DataRow dr in dtAddMofity.Rows)
            {
                string key = dr["药品编码"].ToString() + dr["批号"].ToString();
                Neusoft.HISFC.Models.Pharmacy.Output output = this.hsOutData[key] as Neusoft.HISFC.Models.Pharmacy.Output;

                output.Operation.ExamOper.ID       = this.phaOutManager.OperInfo.ID; //审核人
                output.Operation.ExamOper.OperTime = sysTime;                        //审核日期
                output.Operation.Oper = output.Operation.ExamOper;                   //操作信息

                #region 对数据来源为申请的数据进行处理

                if (dr["数据来源"].ToString() == "1")
                {
                    Neusoft.HISFC.Models.Pharmacy.ApplyOut applyOut = this.hsApplyData[output.User02] as Neusoft.HISFC.Models.Pharmacy.ApplyOut;

                    applyOut.State     = "1";                   //状态 审批
                    applyOut.Operation = output.Operation;      //操作信息

                    if (this.itemManager.UpdateApplyOut(applyOut) == -1)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        Function.ShowMsg("更新" + output.Item.Name + "出库申请信息时出错");
                        return;
                    }

                    if (outListNO == "")
                    {
                        outListNO = applyOut.BillNO;
                    }
                }

                #endregion

                #region 获取单据号

                if (outListNO == "")
                {
                    // //{59C9BD46-05E6-43f6-82F3-C0E3B53155CB} 更改入库单号获取方式
                    outListNO = phaIntegrate.GetInOutListNO(this.phaOutManager.DeptInfo.ID, false);
                    if (outListNO == null)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        Function.ShowMsg("获取新出库单号出错" + phaIntegrate.Err);
                        return;
                    }
                }

                output.OutListNO = outListNO;

                #endregion

                #region Output实体必要信息赋值

                if (this.isUseMinUnit)                                                      //使用最小单位
                {
                    output.Quantity = NConvert.ToDecimal(dr["出库数量"]);                       //出库数量
                }
                else                                                                        //使用包装单位
                {
                    output.Quantity = NConvert.ToDecimal(dr["出库数量"]) * output.Item.PackQty; //出库数量
                }
                output.StoreQty  = output.StoreQty - output.Quantity;
                output.StoreCost = output.StoreQty * output.Item.PriceCollection.RetailPrice / output.Item.PackQty;

                output.Operation.ExamQty = output.Quantity;                     //审核数量
                output.Memo         = dr["备注"].ToString();
                output.DrugedBillNO = "0";                                      //摆药单号 不能为空

                output.GetPerson = this.phaOutManager.TargetPerson.ID;          //领药人

                //----原数据处理方式
                //if (isManagerStore)             //目标(领用)科室管理库存
                //    output.State = "1";         //审核
                //else
                //    output.State = "2";         //核准
                //----现处理方式 对于一般出库 直接设置出库状态为2
                output.State = "2";

                if (this.isSpecialOut)          //特殊出库 直接更新状态为核准
                {
                    output.SpecialFlag = "1";
                    output.State       = "2";
                }

                if (output.State == "2")
                {
                    output.Operation.ApproveOper = output.Operation.Oper;
                }

                #endregion

                #region 以下信息在每次添加新数据时自动生成

                output.PrivType   = this.phaOutManager.PrivType.ID;             //出库类型
                output.SystemType = this.phaOutManager.PrivType.Memo;           //系统类型
                output.StockDept  = this.phaOutManager.DeptInfo;                //当前科室
                output.TargetDept = this.phaOutManager.TargetDept;              //目标科室

                #endregion

                #region 形成目标科室的入库记录

                #region 根据领药科室是否管理库存   在不管理库存的情况下才处理入库记录
                if (!this.isSpecialOut)
                {
                    input = new Neusoft.HISFC.Models.Pharmacy.Input();
                    //设置入库单号
                    if (inListNO == "")
                    {
                        // //{59C9BD46-05E6-43f6-82F3-C0E3B53155CB} 更改入库单号获取方式
                        inListNO = phaIntegrate.GetInOutListNO(this.phaOutManager.TargetDept.ID, false);
                        if (inListNO == null)
                        {
                            Neusoft.FrameWork.Management.PublicTrans.RollBack();
                            MessageBox.Show(Language.Msg("对目标库存科室插入入库记录时获取入库单号出错") + this.itemManager.Err);
                            return;
                        }
                    }

                    //获取关联权限类型 关联权限类型不存在时 设置为默认值
                    if (this.privJoinClass3 != null)
                    {
                        input.PrivType   = this.privJoinClass3.Class3Code;
                        input.SystemType = this.privJoinClass3.Class3MeaningCode;
                    }
                    else
                    {
                        input.PrivType   = "01";                                                                                //一般入库对应的用户类型
                        input.SystemType = "11";                                                                                //一般入库
                    }

                    input.State     = "2";                                              //已审批
                    input.StockDept = this.phaOutManager.TargetDept;                    //库存部门

                    input.TargetDept = this.phaOutManager.DeptInfo;                     //目标科室 供货单位

                    input.InListNO                    = inListNO;                       //入库单据号
                    input.OutListNO                   = outListNO;                      //出库单据号
                    input.Operation.ExamOper.ID       = this.phaOutManager.OperInfo.ID; //审批人
                    input.Operation.ExamOper.OperTime = sysTime;                        //审批日期

                    input.Operation.ApproveOper = input.Operation.ExamOper;
                    input.Operation.ApplyOper   = input.Operation.ExamOper;

                    decimal storeQty = 0;
                    if (this.itemManager.GetStorageNum(this.phaOutManager.TargetDept.ID, output.Item.ID, out storeQty) == -1)
                    {
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        MessageBox.Show(Language.Msg("获取" + output.Item.Name + "库存数量时发生错误" + this.itemManager.Err));
                        return;
                    }
                    input.StoreQty = storeQty + output.Quantity;

                    //设置出库记录中对应的入库单据号
                    output.InListNO = inListNO;
                }
                else
                {
                    input = null;
                }
                #endregion

                #endregion


                //原处理方式 第三个参数始终传入False
                if (this.itemManager.Output(output, input, isManagerStore) == -1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    Function.ShowMsg("出库保存发生错误" + this.itemManager.Err);
                    return;
                }

                this.alPrintData.Add(output);
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            //for (int i = 0; i < this.dt.DefaultView.Count; i++)
            //{
            //    this.dt.DefaultView[i].BeginEdit();
            //}

            Function.ShowMsg("保存成功");

            DialogResult rsPrint = MessageBox.Show(Language.Msg("是否打印出库单?"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (rsPrint == DialogResult.Yes)
            {
                this.Print();
            }


            this.Clear();
        }
Пример #23
0
        protected override int OnSave(object sender, object neuObject)
        {
            if (this.Valid() == false)
            {
                return(-1);
            }

            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            Neusoft.HISFC.BizProcess.Integrate.Pharmacy phaProcess = new Neusoft.HISFC.BizProcess.Integrate.Pharmacy();
            this.itemManager.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            DateTime sysTime = this.itemManager.GetDateTimeFromSysDateTime();

            //操作环境信息
            Neusoft.HISFC.Models.Base.OperEnvironment operEnvironment = new Neusoft.HISFC.Models.Base.OperEnvironment();
            operEnvironment.OperTime = sysTime;
            operEnvironment.ID       = this.itemManager.Operator.ID;
            operEnvironment.Name     = this.itemManager.Operator.Name;
            //当前库存科室
            Neusoft.FrameWork.Models.NeuObject stockDept = ((Neusoft.HISFC.Models.Base.Employee) this.itemManager.Operator).Dept;
            //出库单号
            string outListNO = phaProcess.GetInOutListNO(stockDept.ID, false);
            //入库批次号
            string groupNO = this.itemManager.GetNewGroupNO();

            if (groupNO == null)
            {
                Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                MessageBox.Show("获取新协定处方批次号发生错误 " + this.itemManager.Err);
                return(-1);
            }

            Neusoft.FrameWork.WinForms.Classes.Function.ShowWaitForm("协定处方包装库存处理...");
            Application.DoEvents();

            for (int i = 0; i < this.fpPackageList_Sheet1.Rows.Count; i++)
            {
                //1. 获取当前进行包装处理的协定处方
                Neusoft.HISFC.Models.Pharmacy.Item selectNostrum = this.fpPackageList_Sheet1.Rows[i].Tag as Neusoft.HISFC.Models.Pharmacy.Item;
                //计划数量
                decimal planQty = Neusoft.FrameWork.Function.NConvert.ToDecimal(this.fpPackageList_Sheet1.Cells[i, (int)ColPackageList.ColPlanQty].Text);

                Neusoft.FrameWork.WinForms.Classes.Function.ShowWaitForm("正在对 " + selectNostrum.Name + "  进行库存处理");
                Application.DoEvents();
                //2. 获取协定处方构成明细
                List <Neusoft.HISFC.Models.Pharmacy.Nostrum> detailNostrumList = this.fpPackageList_Sheet1.Cells[i, (int)ColPackageList.ColDetail].Tag as List <Neusoft.HISFC.Models.Pharmacy.Nostrum>;
                if (detailNostrumList == null)
                {
                    detailNostrumList = this.itemManager.QueryNostrumDetail(selectNostrum.ID);
                }
                //3. 根据协定处方构成明细,对明细药品进行出库处理
                foreach (Neusoft.HISFC.Models.Pharmacy.Nostrum info in detailNostrumList)
                {
                    #region 处方明细出库

                    //3.1 对明细药品逐条进行出库处理
                    Neusoft.HISFC.Models.Pharmacy.Item detailItem = this.itemManager.GetItem(info.Item.ID);
                    if (detailItem == null)
                    {
                        Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        MessageBox.Show("处理处方明细出库,根据药品编码获取药品名称发生错误 " + this.itemManager.Err);
                        return(-1);
                    }

                    //info.Qty 即协定处方维护内的数量即为生产1单位成品所需的数量,此处直接相乘即所需明细的最小单位库存量
                    decimal outQty = planQty * info.Qty;

                    if (this.itemManager.NostrumPackageOutput(detailItem, outQty, stockDept, operEnvironment, outListNO) == -1)
                    {
                        Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();
                        Neusoft.FrameWork.Management.PublicTrans.RollBack();
                        MessageBox.Show("处理处方明细出库,进行出库操作发生错误 " + this.itemManager.Err);
                        return(-1);
                    }

                    #endregion
                }
                //4. 对协定处方进行入库处理

                #region 处方入库处理

                Neusoft.HISFC.Models.Pharmacy.Input input = new Neusoft.HISFC.Models.Pharmacy.Input();

                decimal inQty = planQty * selectNostrum.PackQty;

                #region 实体赋值

                input.Class2Type = "0310";
                input.SystemType = Neusoft.HISFC.Models.Base.EnumIMAInTypeService.GetNameFromEnum(Neusoft.HISFC.Models.Base.EnumIMAInType.ProduceInput); //系统类型=出库申请类型;				//"R1" 制剂管理类型
                input.PrivType   = input.SystemType;                                                                                                     //制剂管理类型
                input.InListNO   = outListNO;

                input.Item = selectNostrum;

                input.StockDept = stockDept;
                input.Company   = stockDept;
                input.Producer  = stockDept;

                input.TargetDept = stockDept;
                input.GroupNO    = Neusoft.FrameWork.Function.NConvert.ToDecimal(groupNO);

                input.BatchNO = this.fpPackageList_Sheet1.Cells[i, (int)ColPackageList.ColBatchNO].Text;
                if (string.IsNullOrEmpty(input.BatchNO) == true)
                {
                    input.BatchNO = "1";
                }
                input.ValidTime = Neusoft.FrameWork.Function.NConvert.ToDateTime(this.fpPackageList_Sheet1.Cells[i, (int)ColPackageList.ColValidDate].Text);
                if (input.ValidTime < sysTime)
                {
                    input.ValidTime = sysTime.AddYears(10);
                }

                input.Quantity           = inQty;
                input.Operation.ApplyQty = inQty;
                input.Operation.ExamQty  = inQty;

                input.Operation.ApplyOper = operEnvironment;

                input.State = "2";
                input.Operation.ExamOper    = operEnvironment;
                input.Operation.ApproveOper = operEnvironment;

                #endregion

                #region 购入价计算

                ArrayList alOutputList = this.itemManager.QueryOutputInfo(stockDept.ID, outListNO, "A");
                if (alOutputList != null)
                {
                    input.PurchaseCost = 0;
                    foreach (Neusoft.HISFC.Models.Pharmacy.Output outputTemp in alOutputList)
                    {
                        input.PurchaseCost += outputTemp.PurchaseCost;
                    }

                    input.PriceCollection.PurchasePrice = Math.Round(input.PurchaseCost / (input.Quantity / input.Item.PackQty), 4);
                }

                #endregion

                if (this.itemManager.Input(input, "1") == -1)
                {
                    Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show("处理处方成品入库,进行入库操作发生错误 " + this.itemManager.Err);
                    return(-1);
                }

                #endregion
            }

            Neusoft.FrameWork.WinForms.Classes.Function.HideWaitForm();

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            MessageBox.Show("保存成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            this.Clear();

            return(1);
        }
Пример #24
0
        /// <summary>
        /// 将实体信息加入DataTable内
        /// </summary>
        /// <param name="input">入库信息 Input.User01存储数据来源</param>
        /// <returns></returns>
        protected virtual int AddDataToTable(Neusoft.HISFC.Models.Pharmacy.Input input)
        {
            if (this.dt == null)
            {
                this.InitDataTable();
            }

            //中草药自动设置批号为"1"
            if (input.Item.Type.ID == "C" && (input.BatchNO == "" || input.BatchNO == null))
            {
                input.BatchNO = "1";
            }

            try
            {
                input.RetailCost   = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;
                input.PurchaseCost = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.PurchasePrice;

                #region {D071715E-B5DB-4e7e-A060-069B08F62508}
                //this.dt.Rows.Add(new object[] {
                //                                 true,
                //                                 input.DeliveryNO,                           //送货单号
                //                                 input.Item.Name,                            //商品名称
                //                                 input.Item.Specs,                           //规格
                //                                 input.Item.PriceCollection.RetailPrice,     //零售价
                //                                 input.Item.PackUnit,                        //包装单位
                //                                 input.Item.PackQty,                         //包装数量
                //                                 input.Quantity / input.Item.PackQty,        //入库数量
                //                                 input.RetailCost,                           //入库金额
                //                                 input.BatchNO,                              //批号
                //                                 input.ValidTime,                            //有效期
                //                                 input.InvoiceNO,                            //发票号
                //                                 input.InvoiceType,                          //发票类别
                //                                 input.Item.PriceCollection.PurchasePrice,   //购入价
                //                                 input.PurchaseCost,                         //购入金额
                //                                 input.Item.Product.Producer.Name,           //生产厂家
                //                                 input.Item.ID,                              //药品编码
                //                                 input.ID,                                   //流水号
                //                                 input.Item.NameCollection.SpellCode,        //拼音码
                //                                 input.Item.NameCollection.WBCode,           //五笔码
                //                                 input.Item.NameCollection.UserCode          //自定义码

                //                            }
                //                 );

                DataRow row = this.dt.NewRow();
                row[0]  = true;
                row[1]  = input.DeliveryNO;                         //送货单号
                row[2]  = input.Item.Name;                          //商品名称
                row[3]  = input.Item.Specs;                         //规格
                row[4]  = input.Item.PriceCollection.RetailPrice;   //零售价
                row[5]  = input.Item.PackUnit;                      //包装单位
                row[6]  = input.Item.PackQty;                       //包装数量
                row[7]  = input.Quantity / input.Item.PackQty;      //入库数量
                row[8]  = input.RetailCost;                         //入库金额
                row[9]  = input.BatchNO;                            //批号
                row[10] = input.ValidTime;                          //有效期
                row[11] = input.InvoiceNO;                          //发票号
                row[12] = input.InvoiceType;                        //发票类别
                row[13] = input.Item.PriceCollection.PurchasePrice; //购入价
                row[14] = input.PurchaseCost;                       //购入金额
                row[15] = input.Item.Product.Producer.Name;         //生产厂家
                row[16] = input.Item.ID;                            //药品编码
                row[17] = input.ID;                                 //流水号
                row[18] = input.Item.NameCollection.SpellCode;      //拼音码
                row[19] = input.Item.NameCollection.WBCode;         //五笔码
                row[20] = input.Item.NameCollection.UserCode;       //自定义码
                this.dt.Rows.InsertAt(row, 0);

                #endregion
            }
            catch (System.Data.DataException e)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + e.Message));

                return(-1);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("DataTable内赋值发生错误" + ex.Message));

                return(-1);
            }

            return(1);
        }
Пример #25
0
        public void Save()
        {
            if (!this.Valid())
            {
                return;
            }

            this.dt.DefaultView.RowFilter = "1=1";
            for (int i = 0; i < this.dt.DefaultView.Count; i++)
            {
                this.dt.DefaultView[i].EndEdit();
            }

            DataTable dtAddMofity = this.dt.GetChanges(DataRowState.Added | DataRowState.Modified);

            if (dtAddMofity == null || dtAddMofity.Rows.Count <= 0)
            {
                return;
            }

            //定义事务
            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            Neusoft.HISFC.BizProcess.Integrate.Pharmacy phaIntegrate = new Neusoft.HISFC.BizProcess.Integrate.Pharmacy();

            this.itemManager.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            DateTime sysTime = this.itemManager.GetDateTimeFromSysDateTime();

            //获取退库单号
            // //{59C9BD46-05E6-43f6-82F3-C0E3B53155CB} 更改入库单号获取方式
            string inListNO = phaIntegrate.GetInOutListNO(this.phaInManager.DeptInfo.ID, true);

            if (inListNO == null)
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                MessageBox.Show(Language.Msg("获取最新入库单号出错" + itemManager.Err));
                return;
            }

            //标志是否存在保存操作
            bool isSaveOperation = false;

            this.alPrintData = new ArrayList();
            foreach (DataRow dr in dtAddMofity.Rows)
            {
                decimal backQty = NConvert.ToDecimal(dr["退库数量"]);
                if (backQty == 0)
                {
                    continue;
                }

                string key = this.GetKey(dr);
                //{DCE152D1-295C-4cc6-9EAA-39321A234569}
                Neusoft.HISFC.Models.Pharmacy.Input input = (this.hsInData[key] as Neusoft.HISFC.Models.Pharmacy.Input).Clone();

                backQty = backQty * input.Item.PackQty;

                #region 获取本批次当前库存 判断是否允许退库

                decimal storeQty = 0;
                this.itemManager.GetStorageNum(this.phaInManager.DeptInfo.ID, input.Item.ID, input.GroupNO, out storeQty);
                if (storeQty < backQty)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg(input.Item.Name + " 库存数量不足 退库数量过大"), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                #endregion

                #region 退库信息赋值

                input.InListNO   = inListNO;                                    //退库单号
                input.Quantity   = -backQty;                                    //入库数量(负数)
                input.RetailCost = input.Quantity / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;
                input.StoreQty   = storeQty + input.Quantity;                   //入库后库存数量
                input.StoreCost  = input.StoreQty / input.Item.PackQty * input.Item.PriceCollection.RetailPrice;

                input.Operation.ApplyOper.ID       = this.phaInManager.OperInfo.ID;
                input.Operation.ApplyOper.OperTime = sysTime;
                input.Operation.Oper = input.Operation.ApplyOper;
                //根据不同发票输入情况及控制参数设置状态
                input.State     = "0";
                input.InvoiceNO = dr["发票号"].ToString();
                if (input.InvoiceNO != "")
                {
                    input.Operation.ExamQty  = input.Quantity;
                    input.Operation.ExamOper = input.Operation.Oper;
                    input.State = "1";                                      //直接更新状态为 审核(发票入库)状态
                }
                if (!this.IsNeedApprove)                                    //不需核准 直接设置状态"2"
                {
                    input.State                 = "2";
                    input.Operation.ExamQty     = input.Quantity;
                    input.Operation.ExamOper    = input.Operation.Oper;
                    input.Operation.ApproveOper = input.Operation.Oper;
                }

                #endregion

                #region 退库保存

                int parm = this.itemManager.Input(input, "1", this.IsNeedApprove ? "0" : "1");
                if (parm == -1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg("保存 [" + input.Item.Name + "] 发生错误 " + this.itemManager.Err));
                    return;
                }
                else if (parm == 0)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(Language.Msg("数据可能已被审核,请刷新重试!"));
                    return;
                }

                #endregion

                isSaveOperation = true;

                this.alPrintData.Add(input);
            }

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            if (isSaveOperation)
            {
                MessageBox.Show(Language.Msg("入库退库操作成功"));

                DialogResult rs = MessageBox.Show(Language.Msg("是否打印退库单?"), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rs == DialogResult.Yes)
                {
                    this.Print();
                }
            }

            this.Clear();
        }