예제 #1
0
        /// <summary>
        /// 取消冲账
        /// </summary>
        /// <param name="strikeABalanceDt">取消冲账的数据</param>
        /// <param name="msgList">错误消息</param>
        /// <returns>true:取消冲账成功</returns>
        public bool CancelStrikeABalance(DataTable strikeABalanceDt, List <string> msgList)
        {
            // 项目已做不能冲账提示消息。
            StringBuilder strMsg           = new StringBuilder();
            bool          isStrikeABalance = true;

            if (strikeABalanceDt != null && strikeABalanceDt.Rows.Count > 0)
            {
                for (int i = 0; i < strikeABalanceDt.Rows.Count; i++)
                {
                    int              feeRecordID     = Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeRecordID"].ToString());
                    DataTable        feeItemRecordDt = NewDao <IIPManageDao>().GetIPFeeItemRecordInfo(feeRecordID);
                    IP_FeeItemRecord feeItemRecord   = ConvertExtend.ToObject <IP_FeeItemRecord>(feeItemRecordDt, 0);
                    // 检查药品是否已发药、检查项目是否已做检查
                    bool result = NewDao <IIPManageDao>().CheckIsMedicine(Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeRecordID"].ToString()));
                    // 取得账单类型
                    int feeClass = Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeClass"].ToString());
                    // 未发药
                    if (result)
                    {
                        switch (feeClass)
                        {
                        // 药品
                        case 1:
                            // 处方明细取消冲正
                            try
                            {
                                // 减去有效库存
                                NewObject <DrugStoreManagement>().UpdateStorage(feeItemRecord.ItemID, feeItemRecord.ExecDeptID, feeItemRecord.Amount);
                            }
                            catch (Exception ex)
                            {
                                if (ex.Message.Contains("库存数不够"))
                                {
                                    strMsg.Append("[" + feeItemRecord.ItemName + "]、");
                                    continue;
                                }
                            }
                            // 将选中记录改成9,(9=已取消冲账)
                            feeItemRecord.RecordFlag = 9;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            // 重新走记账流程重新生成费用数据
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = 0;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 0;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            feeItemRecord.Amount         = Math.Abs(feeItemRecord.Amount);
                            feeItemRecord.TotalFee       = Math.Abs(feeItemRecord.TotalFee);
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            break;

                        // 材料/项目
                        case 2:
                        case 3:
                            // 处方明细取消冲账
                            // 将选中记录改成9,(9=已取消冲账)
                            feeItemRecord.RecordFlag = 9;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            // 重新走记账流程重新生成费用数据
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = 0;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 0;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            if (feeItemRecord.Amount < 0)
                            {
                                feeItemRecord.Amount = Math.Abs(feeItemRecord.Amount);
                            }

                            feeItemRecord.TotalFee = Math.Abs(feeItemRecord.TotalFee);
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            break;

                        // 组合项目/医嘱
                        case 4:
                        case 5:
                        default:
                            break;
                        }
                    }
                    else
                    {
                        // 已发药
                        switch (feeClass)
                        {
                        // 药品
                        case 1:
                            // 处方明细取消冲正
                            try
                            {
                                // 减去有效库存
                                NewObject <DrugStoreManagement>().UpdateStorage(feeItemRecord.ItemID, feeItemRecord.ExecDeptID, feeItemRecord.Amount);
                            }
                            catch (Exception ex)
                            {
                                if (ex.Message.Contains("库存数不够"))
                                {
                                    strMsg.Append("[" + feeItemRecord.ItemName + "]、");
                                    continue;
                                }
                            }
                            // 将选中记录改成9,(9=已取消冲账)
                            feeItemRecord.RecordFlag = 9;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = 0;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 0;
                            feeItemRecord.DrugFlag       = 0;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            feeItemRecord.Amount         = Math.Abs(feeItemRecord.Amount);
                            feeItemRecord.TotalFee       = Math.Abs(feeItemRecord.TotalFee);
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            break;

                        // 材料/项目
                        case 2:
                        case 3:
                            // 项目已做不能冲账
                            // 提示消息
                            strMsg.Append("[" + strikeABalanceDt.Rows[i]["ItemName"].ToString() + "]、");
                            break;

                        // 组合项目/医嘱
                        case 4:
                        case 5:
                        default:
                            break;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(strMsg.ToString()))
            {
                msgList.Add(strMsg.ToString());
                isStrikeABalance = false;
            }

            return(isStrikeABalance);
        }
예제 #2
0
        /// <summary>
        /// 费用冲账
        /// </summary>
        /// <param name="strikeABalanceDt">冲账数据</param>
        /// <param name="msgList">错误消息</param>
        /// <returns>true:冲账成功</returns>
        public bool StrikeABalance(DataTable strikeABalanceDt, List <string> msgList)
        {
            // 项目已做不能冲账提示消息。
            StringBuilder strMsg           = new StringBuilder();
            bool          isStrikeABalance = true;

            if (strikeABalanceDt != null && strikeABalanceDt.Rows.Count > 0)
            {
                for (int i = 0; i < strikeABalanceDt.Rows.Count; i++)
                {
                    int              feeRecordID     = Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeRecordID"].ToString());
                    DataTable        feeItemRecordDt = NewDao <IIPManageDao>().GetIPFeeItemRecordInfo(feeRecordID);
                    IP_FeeItemRecord feeItemRecord   = ConvertExtend.ToObject <IP_FeeItemRecord>(feeItemRecordDt, 0);
                    // 检查药品是否已发药、检查项目是否已做检查
                    bool result = NewDao <IIPManageDao>().CheckIsMedicine(Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeRecordID"].ToString()));
                    // 取得账单类型
                    int feeClass = Convert.ToInt32(strikeABalanceDt.Rows[i]["FeeClass"].ToString());
                    // 未发药
                    if (result)
                    {
                        switch (feeClass)
                        {
                        // 药品
                        case 1:
                            // 检查是否已生成统领单,如果已生成统领单,则需要删除统领单对应的信息
                            bool isDrugBillDetail = NewDao <IIPManageDao>().CheckIsGenerateDrugBillDetail(feeRecordID);
                            if (isDrugBillDetail)
                            {
                                // 删除统领单明细数据
                                NewDao <IIPManageDao>().DelDrugBillDetail(feeRecordID);
                            }

                            feeItemRecord.RecordFlag = 1;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();

                            // 冲账时产生负数记录
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = feeRecordID;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 2;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            feeItemRecord.Amount         = 0 - feeItemRecord.Amount;
                            feeItemRecord.TotalFee       = 0 - feeItemRecord.TotalFee;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            // 追加有效库存
                            NewObject <DrugStoreManagement>().UpdateStorage(
                                feeItemRecord.ItemID,
                                feeItemRecord.ExecDeptID,
                                Math.Abs(feeItemRecord.Amount));
                            break;

                        // 材料/项目
                        case 2:
                        case 3:
                            // 处方明细冲正
                            feeItemRecord.RecordFlag = 1;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();

                            // 冲账时产生负数记录
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = feeRecordID;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 2;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            feeItemRecord.Amount         = 0 - feeItemRecord.Amount;
                            feeItemRecord.TotalFee       = 0 - feeItemRecord.TotalFee;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            break;

                        // 组合项目/医嘱
                        case 4:
                        case 5:
                        default:
                            break;
                        }
                    }
                    else
                    {
                        // 已发药
                        switch (feeClass)
                        {
                        // 药品
                        case 1:
                            // 处方明细冲正
                            feeItemRecord.RecordFlag = 1;
                            feeItemRecord.ChargeDate = DateTime.Now;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();

                            // 冲账时产生负数记录
                            feeItemRecord = feeItemRecord.Clone() as IP_FeeItemRecord;
                            feeItemRecord.OldFeeRecordID = feeRecordID;
                            feeItemRecord.FeeRecordID    = 0;
                            feeItemRecord.RecordFlag     = 2;
                            feeItemRecord.ChargeDate     = DateTime.Now;
                            feeItemRecord.Amount         = 0 - feeItemRecord.Amount;
                            feeItemRecord.TotalFee       = 0 - feeItemRecord.TotalFee;
                            this.BindDb(feeItemRecord);
                            feeItemRecord.save();
                            break;

                        // 材料/项目
                        case 2:
                        case 3:
                            // 项目已做不能冲账
                            strMsg.Append("[" + strikeABalanceDt.Rows[i]["ItemName"].ToString() + "]、");
                            break;

                        // 组合项目/医嘱
                        case 4:
                        case 5:
                        default:
                            break;
                        }
                    }
                }
            }

            if (!string.IsNullOrEmpty(strMsg.ToString()))
            {
                msgList.Add(strMsg.ToString());
                isStrikeABalance = false;
            }

            return(isStrikeABalance);
        }