Example #1
0
        /// <summary>
        /// 床位费记账
        /// </summary>
        /// <param name="patListID">病人登记ID</param>
        /// <param name="endTime">记账截止时间</param>
        /// <param name="empID">记账人ID</param>
        /// <returns>true:记账成功</returns>
        public bool BedFeeAccounting(int patListID, DateTime endTime, int empID)
        {
            // 根据病人ID查询病人所有未停用的床位费用
            DataTable accountDateDt = NewDao <IIPManageDao>().GetAccountDate(string.Empty, endTime, true, patListID);

            if (accountDateDt != null && accountDateDt.Rows.Count > 0)
            {
                for (int i = 0; i < accountDateDt.Rows.Count; i++)
                {
                    // 取得记账天数
                    int days = Convert.ToInt32(accountDateDt.Rows[i]["Days"]);
                    if (days < 0)
                    {
                        continue;
                    }
                    // 保存费用明细表数据
                    // 费用生成ID
                    int generateID = Convert.ToInt32(accountDateDt.Rows[i]["GenerateID"]);
                    // 重新获取价格
                    DataTable        feeItemGenerateDt = NewDao <IIPManageDao>().GetFeeItemGenerateData(patListID, generateID);
                    IP_FeeItemRecord feeItemRecord     = NewObject <IP_FeeItemRecord>();
                    feeItemRecord = ConvertExtend.ToObject <IP_FeeItemRecord>(feeItemGenerateDt, 0);
                    // 床位费记账,根据开始日期以及记账天数记账
                    for (int j = 0; j <= days; j++)
                    {
                        feeItemRecord.FeeRecordID = 0;
                        if (j == 0)
                        {
                            // 直接取开始时间
                            feeItemRecord.PresDate = Convert.ToDateTime(accountDateDt.Rows[i]["ExecDate"]);
                        }
                        else
                        {
                            // 开始时间累加1
                            feeItemRecord.PresDate = Convert.ToDateTime(accountDateDt.Rows[i]["ExecDate"]).AddDays(j);
                        }
                        // 根据最新价格重新计算金额
                        feeItemRecord.TotalFee = Math.Round(feeItemRecord.Amount * feeItemRecord.SellPrice, 2);
                        // 保存费用明细数据
                        this.BindDb(feeItemRecord);
                        feeItemRecord.save();

                        // 保存处方明细关系数据
                        IP_FeeItemRelationship feeItemRelationship = NewObject <IP_FeeItemRelationship>();
                        feeItemRelationship.PatListID   = feeItemRecord.PatListID;
                        feeItemRelationship.OrderID     = 0;
                        feeItemRelationship.GenerateID  = feeItemRecord.GenerateID;
                        feeItemRelationship.FeeSource   = 0;
                        feeItemRelationship.ExecDate    = feeItemRecord.PresDate;
                        feeItemRelationship.ChargeDate  = DateTime.Now;
                        feeItemRelationship.ChargeEmpID = empID;
                        this.BindDb(feeItemRelationship);
                        feeItemRelationship.save();
                    }
                }
            }

            return(true);
        }
Example #2
0
        /// <summary>
        /// 账单记账
        /// </summary>
        /// <param name="feeItemAccDt">待记账数据集合</param>
        /// <param name="empID">操作员ID</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="isBedFee">是否记床位费</param>
        /// <param name="isLongFee">是否记长期账单</param>
        /// <param name="msgList">错误消息</param>
        /// <returns>true:记账成功</returns>
        public bool FeeItemAccounting(
            DataTable feeItemAccDt,
            int empID,
            DateTime startTime,
            DateTime endTime,
            bool isBedFee,
            bool isLongFee,
            List <string> msgList)
        {
            // 获取需要记账的天数
            int interval = new TimeSpan(Convert.ToDateTime(endTime.ToString("yyyy-MM-dd")).Ticks -
                                        Convert.ToDateTime(startTime.ToString("yyyy-MM-dd")).Ticks).Days + 1;

            // 是否勾选了账单
            if (isLongFee)
            {
                if (feeItemAccDt != null && feeItemAccDt.Rows.Count > 0)
                {
                    IP_FeeItemGenerate feeItem = null;
                    for (int i = 0; i < feeItemAccDt.Rows.Count; i++)
                    {
                        feeItem = NewObject <IP_FeeItemGenerate>();
                        feeItem = ConvertExtend.ToObject <IP_FeeItemGenerate>(feeItemAccDt, i);
                        // 如果当前记录在费用生成表中不存在,则先记录保存到费用生成表中,然后在进行记账操作
                        if (feeItem.GenerateID == 0)
                        {
                            // 查询病人登记信息
                            DataTable  patDt = NewDao <IIPManageDao>().GetPatListInfo(Convert.ToInt32(feeItemAccDt.Rows[0]["PatListID"]));
                            IP_PatList pat   = ConvertExtend.ToObject <IP_PatList>(patDt, 0);
                            feeItem.PatListID    = pat.PatListID;
                            feeItem.PatName      = pat.PatName;
                            feeItem.PatDeptID    = pat.CurrDeptID;
                            feeItem.PatDoctorID  = pat.CurrDoctorID;
                            feeItem.PatNurseID   = pat.CurrNurseID;
                            feeItem.MarkEmpID    = empID;
                            feeItem.PresDoctorID = pat.CurrDoctorID;
                            feeItem.PresDeptID   = feeItem.PatDeptID;
                        }

                        this.BindDb(feeItem);
                        feeItem.save();
                        // 保存费用数据
                        bool result = SaveFeeItemAccountingData(feeItem, feeItemAccDt, i, interval, startTime, msgList);
                    }
                }
            }
            // 是否需要记床位费
            if (isBedFee)
            {
                DateTime presDate = startTime;
                for (int s = 0; s < interval; s++)
                {
                    if (s > 0)
                    {
                        // 每循环一次处方日期加1
                        presDate = Convert.ToDateTime(presDate.AddDays(1).ToString("yyyy-MM-dd"));
                    }
                    else
                    {
                        presDate = Convert.ToDateTime(presDate.ToString("yyyy-MM-dd"));
                    }

                    // 检查当日是否已记床位费
                    if (NewDao <IIPManageDao>().IsExistenceBedFeeData(Convert.ToInt32(feeItemAccDt.Rows[0]["PatListID"].ToString()), presDate))
                    {
                        IP_FeeItemGenerate feeItem = ConvertExtend.ToObject <IP_FeeItemGenerate>(feeItemAccDt, 0);
                        // 取得病人关联的所有床位
                        DataTable bedList  = NewDao <IIPManageDao>().GetPatientBedList(Convert.ToInt32(feeItemAccDt.Rows[0]["PatListID"].ToString()));
                        DataTable bedFeeDt = new DataTable();
                        for (int i = 0; i < bedList.Rows.Count; i++)
                        {
                            DataTable tempDt = null;
                            if (Convert.ToInt32(bedList.Rows[i]["IsPack"]) == 0)
                            {
                                // 根据床位ID查询床位费用
                                tempDt = NewDao <IIPManageDao>().GetBedFeeItemList(Convert.ToInt32(bedList.Rows[i]["BedID"].ToString()), 0);
                            }
                            else
                            {
                                // 根据床位ID查询床位费用
                                tempDt = NewDao <IIPManageDao>().GetBedFeeItemList(Convert.ToInt32(bedList.Rows[i]["BedID"].ToString()), 1);
                            }

                            if (i == 0)
                            {
                                bedFeeDt = tempDt.Clone();
                            }

                            bedFeeDt.Merge(tempDt);
                        }
                        // 记床位费账单
                        if (bedFeeDt != null && bedFeeDt.Rows.Count > 0)
                        {
                            for (int i = 0; i < bedFeeDt.Rows.Count; i++)
                            {
                                // 保存处方明细关系数据
                                IP_FeeItemRelationship feeItemRelationship = NewObject <IP_FeeItemRelationship>();
                                feeItemRelationship.GenerateID  = 0;
                                feeItemRelationship.ChargeDate  = presDate;
                                feeItemRelationship.ChargeEmpID = empID;
                                feeItemRelationship.PatListID   = Convert.ToInt32(feeItemAccDt.Rows[0]["PatListID"].ToString());
                                feeItemRelationship.FeeSource   = 2;
                                this.BindDb(feeItemRelationship);
                                feeItemRelationship.save();

                                // 写入处方明细表数据
                                IP_FeeItemRecord feeItemRecord = NewObject <IP_FeeItemRecord>();
                                SetFeeItemRecord(
                                    feeItemRecord,
                                    bedFeeDt.Rows[i],
                                    feeItem,
                                    Convert.ToInt32(bedFeeDt.Rows[i]["ItemClass"].ToString()),
                                    presDate,
                                    Convert.ToInt32(bedFeeDt.Rows[i]["ItemAmount"].ToString()),
                                    true);
                                feeItemRecord.TotalFee     = Math.Round(feeItemRecord.Amount * Convert.ToDecimal(bedFeeDt.Rows[i]["UnitPrice"].ToString()), 2);
                                feeItemRecord.PackAmount   = Convert.ToDecimal(bedFeeDt.Rows[i]["UnitPrice"].ToString()); // 划价系数
                                feeItemRecord.GenerateID   = 0;                                                           // 费用生成ID
                                feeItemRecord.PresDeptID   = feeItem.PatDeptID;
                                feeItemRecord.ExecDeptID   = feeItem.PatDeptID;
                                feeItemRecord.PresDoctorID = empID;
                                feeItemRecord.ExecDeptID   = Convert.ToInt32(bedFeeDt.Rows[i]["ExecDeptId"].ToString()); // 执行科室ID
                                feeItemRecord.OrderType    = 4;
                                this.BindDb(feeItemRecord);
                                feeItemRecord.save();
                            }
                        }
                    }
                }
            }

            return(true);
        }
Example #3
0
        /// <summary>
        /// 保存记账数据
        /// </summary>
        /// <param name="feeItem">处方生成对象</param>
        /// <param name="feeItemAccDt">处方生成列表</param>
        /// <param name="rowIndex">处方生成Index</param>
        /// <param name="interval">处方天数</param>
        /// <param name="presDate">处方开始日期</param>
        /// <param name="msgList">错误消息</param>
        /// <returns>true:记账成功</returns>
        private bool SaveFeeItemAccountingData(
            IP_FeeItemGenerate feeItem,
            DataTable feeItemAccDt,
            int rowIndex,
            int interval,
            DateTime presDate,
            List <string> msgList)
        {
            // 根据选择的时间区间记录账单
            for (int s = 0; s < interval; s++)
            {
                if (s > 0)
                {
                    // 每循环一次处方日期加1
                    presDate = Convert.ToDateTime(presDate.AddDays(1).ToString("yyyy-MM-dd"));
                }
                else
                {
                    presDate = Convert.ToDateTime(presDate.ToString("yyyy-MM-dd"));
                }
                // 检查是否存在重复记账
                if (!NewDao <IIPManageDao>().IsExistenceItemAccountingData(feeItem.GenerateID, feeItem.PatListID, presDate))
                {
                    continue;
                }

                // 1.对药品记账时,记账成功后要减去有效库存。
                // ItemClass=1为药品,需要减去有效库存
                if (feeItem.FeeClass == 1)
                {
                    try
                    {
                        // 减去有效库存
                        NewObject <DrugStoreManagement>().UpdateStorage(feeItem.ItemID, feeItem.ExecDeptDoctorID, feeItem.Amount - (feeItem.Amount * 2));
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message.Contains("库存数不够"))
                        {
                            msgList.Add("[" + feeItem.ItemName + "]");
                            continue;
                        }
                    }
                }
                // 写入关系表数据
                // 判断是否为组合项目,如果为组合项目需先拆成明细在写入
                if (feeItem.FeeClass == 4)
                {
                    // 根据组合项目ItemID获取组合项目明细列表
                    DataTable combinationProjectDt = NewDao <IIPManageDao>().CombinationProjectDetails(feeItem.ItemID);
                    for (int j = 0; j < combinationProjectDt.Rows.Count; j++)
                    {
                        // 保存处方明细关系数据
                        IP_FeeItemRelationship feeItemRelationship = NewObject <IP_FeeItemRelationship>();
                        feeItemRelationship.GenerateID  = feeItem.GenerateID;
                        feeItemRelationship.ChargeDate  = presDate;
                        feeItemRelationship.ChargeEmpID = feeItem.MarkEmpID;
                        feeItemRelationship.PatListID   = feeItem.PatListID;
                        feeItemRelationship.FeeSource   = 0;
                        this.BindDb(feeItemRelationship);
                        feeItemRelationship.save();

                        // 写入处方明细表数据
                        IP_FeeItemRecord feeItemRecord = NewObject <IP_FeeItemRecord>();
                        SetFeeItemRecord(
                            feeItemRecord,
                            combinationProjectDt.Rows[j],
                            feeItem,
                            Convert.ToInt32(combinationProjectDt.Rows[j]["ItemClass"].ToString()),
                            presDate,
                            0,
                            false);
                        this.BindDb(feeItemRecord);
                        feeItemRecord.save();
                    }
                }
                else
                {
                    // 不是组合项目直接写入账单
                    // 保存处方明细关系数据
                    IP_FeeItemRelationship feeItemRelationship = NewObject <IP_FeeItemRelationship>();
                    feeItemRelationship.GenerateID  = feeItem.GenerateID;
                    feeItemRelationship.ChargeDate  = presDate;
                    feeItemRelationship.ChargeEmpID = feeItem.MarkEmpID;
                    feeItemRelationship.PatListID   = feeItem.PatListID;
                    feeItemRelationship.FeeSource   = 0;
                    this.BindDb(feeItemRelationship);
                    feeItemRelationship.save();

                    // 写入处方明细表数据
                    IP_FeeItemRecord feeItemRecord = NewObject <IP_FeeItemRecord>();
                    SetFeeItemRecord(feeItemRecord, feeItemAccDt.Rows[rowIndex], feeItem, feeItem.FeeClass, presDate, 0, false);
                    //feeItemRecord.TotalFee = Math.Round(feeItemRecord.Amount * Convert.ToDecimal(FeeItemAccDt.Rows[rowIndex]["PackAmount"].ToString()), 2);
                    //feeItemRecord.PackAmount = Convert.ToDecimal(FeeItemAccDt.Rows[rowIndex]["PackAmount"].ToString());  // 划价系数
                    this.BindDb(feeItemRecord);
                    feeItemRecord.save();
                }
            }

            return(true);
        }
Example #4
0
        /// <summary>
        /// 保存费用明细数据
        /// </summary>
        /// <param name="generateIdList">费用生成ID集合</param>
        /// <param name="endTime">记账结束时间</param>
        /// <param name="empID">操作员ID</param>
        /// <returns>true:保存成功</returns>
        public bool FeeItemAccounting(List <int> generateIdList, DateTime endTime, int empID)
        {
            // 不存在需要记账的数据
            if (generateIdList.Count <= 0)
            {
                return(true);
            }
            // 获取账单记账开始时间以及记账天数
            // 取得费用生成ID列表
            string    strGenerateIdList = string.Join(",", generateIdList.ToArray());
            DataTable accountDateDt     = NewDao <IIPManageDao>().GetAccountDate(strGenerateIdList, endTime, false, -1);

            if (accountDateDt != null && accountDateDt.Rows.Count > 0)
            {
                int patListId = Convert.ToInt32(accountDateDt.Rows[0]["PatListID"]);
                for (int i = 0; i < accountDateDt.Rows.Count; i++)
                {
                    // 取得记账天数
                    int days = Convert.ToInt32(accountDateDt.Rows[i]["Days"]);
                    if (days < 0)
                    {
                        continue;
                    }
                    // 保存费用明细表数据
                    // 费用生成ID
                    int generateID = Convert.ToInt32(accountDateDt.Rows[i]["GenerateID"]);
                    // 重新获取价格
                    DataTable        feeItemGenerateDt = NewDao <IIPManageDao>().GetFeeItemGenerateData(patListId, generateID);
                    IP_FeeItemRecord feeItemRecord     = NewObject <IP_FeeItemRecord>();
                    feeItemRecord = ConvertExtend.ToObject <IP_FeeItemRecord>(feeItemGenerateDt, 0);
                    // 临时账单只记账一次,执行时间为费用生成时间
                    if (Convert.ToInt32(accountDateDt.Rows[i]["OrderType"]) == 3)
                    {
                        // 根据最新价格重新计算金额
                        feeItemRecord.TotalFee = Math.Round(feeItemRecord.Amount * feeItemRecord.SellPrice / feeItemRecord.PackAmount, 2);
                        // 保存费用明细数据
                        this.BindDb(feeItemRecord);
                        feeItemRecord.save();
                        // 临时账单记账后直接停用账单
                        NewDao <IIPManageDao>().StopTempFeeItemGenerate(feeItemRecord.GenerateID);
                        continue;
                    }
                    // 临时账单记账,根据开始日期以及记账天数记账
                    for (int j = 0; j <= days; j++)
                    {
                        #region "组合项目拆分明细注释代码"
                        //// 取得费用明细类型
                        //int feeClass = Convert.ToInt32(accountDateDt.Rows[i]["FeeClass"]);
                        //// 如果为组合项目,则先拆分成明细再保存数据
                        //if (feeClass == 4)
                        //{
                        //    // 根据组合项目ItemID获取组合项目明细列表
                        //    DataTable CombinationProjectDt = NewDao<IIPManageDao>().CombinationProjectDetails(feeItemRecord.ItemID);
                        //    for (int k = 0; k < CombinationProjectDt.Rows.Count; k++)
                        //    {
                        //        // 保存费用明细数据
                        //        feeItemRecord.FeeRecordID = 0;
                        //        // 项目ID
                        //        feeItemRecord.ItemID = Convert.ToInt32(CombinationProjectDt.Rows[k]["ItemID"]);
                        //        // 项目名
                        //        feeItemRecord.ItemName = CombinationProjectDt.Rows[k]["ItemName"].ToString();
                        //        // 项目类型
                        //        feeItemRecord.FeeClass = Convert.ToInt32(CombinationProjectDt.Rows[k]["ItemClass"]);
                        //        // 大项目ID
                        //        feeItemRecord.StatID = Convert.ToInt32(CombinationProjectDt.Rows[k]["StatID"]);
                        //        // 规格
                        //        feeItemRecord.Spec = CombinationProjectDt.Rows[k]["Standard"].ToString();
                        //        // 单位
                        //        feeItemRecord.Unit = CombinationProjectDt.Rows[k]["MiniUnitName"].ToString();
                        //        // 划价系数
                        //        feeItemRecord.PackAmount = Convert.ToDecimal(CombinationProjectDt.Rows[k]["MiniConvertNum"]);
                        //        // 批发价
                        //        feeItemRecord.InPrice = Convert.ToDecimal(CombinationProjectDt.Rows[k]["InPrice"]);
                        //        // 销售价
                        //        feeItemRecord.SellPrice = Convert.ToDecimal(CombinationProjectDt.Rows[k]["SellPrice"]);
                        //        // 执行科室
                        //        feeItemRecord.ExecDeptID = Convert.ToInt32(CombinationProjectDt.Rows[k]["ExecDeptId"]);
                        //    }
                        //}
                        #endregion
                        feeItemRecord.FeeRecordID = 0;
                        if (j == 0)
                        {
                            // 直接取开始时间
                            feeItemRecord.PresDate = Convert.ToDateTime(accountDateDt.Rows[i]["ExecDate"]);
                        }
                        else
                        {
                            // 开始时间累加1
                            feeItemRecord.PresDate = Convert.ToDateTime(accountDateDt.Rows[i]["ExecDate"]).AddDays(j);
                        }
                        // 根据最新价格重新计算金额
                        feeItemRecord.TotalFee = Math.Round(feeItemRecord.Amount * feeItemRecord.SellPrice / feeItemRecord.PackAmount, 2);
                        // 保存费用明细数据
                        this.BindDb(feeItemRecord);
                        feeItemRecord.save();

                        // 保存处方明细关系数据
                        IP_FeeItemRelationship feeItemRelationship = NewObject <IP_FeeItemRelationship>();
                        feeItemRelationship.PatListID   = feeItemRecord.PatListID;
                        feeItemRelationship.OrderID     = 0;
                        feeItemRelationship.GenerateID  = feeItemRecord.GenerateID;
                        feeItemRelationship.FeeSource   = 0;
                        feeItemRelationship.ExecDate    = feeItemRecord.PresDate;
                        feeItemRelationship.ChargeDate  = DateTime.Now;
                        feeItemRelationship.ChargeEmpID = empID;
                        this.BindDb(feeItemRelationship);
                        feeItemRelationship.save();
                    }
                }
            }

            return(true);
        }