Ejemplo n.º 1
0
        /// <summary>
        /// 删除费用数据
        /// </summary>
        /// <param name="delFeeItemDt">待删除费用数据</param>
        /// <returns>错误消息</returns>
        public string DelFeeLongOrderData(DataTable delFeeItemDt)
        {
            string msg = string.Empty;

            try
            {
                IP_FeeItemGenerate feeItem = null;
                for (int i = 0; i < delFeeItemDt.Rows.Count; i++)
                {
                    feeItem = NewObject <IP_FeeItemGenerate>();
                    feeItem = ConvertExtend.ToObject <IP_FeeItemGenerate>(delFeeItemDt, i);
                    bool result = NewDao <IIPManageDao>().IsFeeCharge(feeItem.GenerateID);
                    if (result)
                    {
                        msg += "[" + feeItem.ItemName + "]、";
                        continue;
                    }

                    this.BindDb(feeItem);
                    feeItem.delete();
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }

            if (!string.IsNullOrEmpty(msg))
            {
                msg  = msg.Substring(0, msg.Length - 1);
                msg += "等项目已经被记账无法删除!";
            }

            return(msg);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 做成账单明细数据
        /// </summary>
        /// <param name="feeItemRecord">账单明细</param>
        /// <param name="feeDr">费用数据</param>
        /// <param name="feeItem">费用生成</param>
        /// <param name="feeClass">费用类型</param>
        /// <param name="presDate">处方时间</param>
        /// <param name="amount">基本数</param>
        /// <param name="isBedFee">是否记床位费</param>
        private void SetFeeItemRecord(
            IP_FeeItemRecord feeItemRecord,
            DataRow feeDr,
            IP_FeeItemGenerate feeItem,
            int feeClass,
            DateTime presDate,
            int amount,
            bool isBedFee)
        {
            // 写入处方明细表数据
            feeItemRecord.GenerateID  = feeItem.GenerateID;                               // 费用生成ID
            feeItemRecord.PatListID   = feeItem.PatListID;                                // 病人ID
            feeItemRecord.PatName     = feeItem.PatName;                                  // 病人名
            feeItemRecord.PatDeptID   = feeItem.PatDeptID;                                // 病人入院科室
            feeItemRecord.PatDoctorID = feeItem.PatDoctorID;                              // 病人责任医生
            feeItemRecord.PatNurseID  = feeItem.PatNurseID;                               // 病人责任护士
            feeItemRecord.BabyID      = feeItem.BabyID;                                   // BabyID
            feeItemRecord.ItemID      = Convert.ToInt32(feeDr["ItemID"].ToString());      // 项目ID
            feeItemRecord.ItemName    = feeDr["ItemName"].ToString();                     // 项目名
            feeItemRecord.StatID      = Convert.ToInt32(feeDr["StatID"].ToString());      // StatID
            feeItemRecord.InPrice     = Convert.ToDecimal(feeDr["InPrice"].ToString());   // 批发价
            feeItemRecord.SellPrice   = Convert.ToDecimal(feeDr["SellPrice"].ToString()); // 销售价
            feeItemRecord.FeeClass    = feeClass;
            feeItemRecord.PackAmount  = feeItem.PackAmount;
            if (!isBedFee)
            {
                feeItemRecord.Amount    = feeItem.Amount; // 费用生成表的基本数
                feeItemRecord.Spec      = feeItem.Spec;   // 规格
                feeItemRecord.Unit      = feeItem.Unit;   // 单位
                feeItemRecord.FeeSource = 0;              // 0账单
                // 组合项目时,根据基本数计算=基本数*划价系数
                //feeItemRecord.TotalFee = Math.Round(feeItemRecord.Amount * Convert.ToDecimal(feeDr["PackAmount"].ToString()), 2);
            }
            else
            {
                feeItemRecord.Amount    = amount;                         // 费用生成表的基本数
                feeItemRecord.Spec      = feeDr["Standard"].ToString();   // 规格
                feeItemRecord.Unit      = feeDr["UnPickUnit"].ToString(); // 单位
                feeItemRecord.FeeSource = 2;                              // 2床位费
            }

            feeItemRecord.TotalFee       = Math.Round(feeItemRecord.Amount * feeItemRecord.SellPrice / feeItemRecord.PackAmount, 2);
            feeItemRecord.DoseAmount     = 0;                        // 默认0
            feeItemRecord.PresDeptID     = feeItem.PresDeptID;       // 划价科室ID
            feeItemRecord.PresDoctorID   = feeItem.PresDoctorID;     // 划价医生ID
            feeItemRecord.ExecDeptID     = feeItem.ExecDeptDoctorID; // 执行科室ID
            feeItemRecord.PresDate       = presDate;                 // 处方日期
            feeItemRecord.ChargeDate     = DateTime.Now;             // 记账日期
            feeItemRecord.DrugFlag       = 0;                        // 发药标识
            feeItemRecord.RecordFlag     = 0;                        // 记录状态
            feeItemRecord.OldFeeRecordID = 0;                        // 退费明细ID
            feeItemRecord.CostHeadID     = 0;
            feeItemRecord.CostType       = 0;
            feeItemRecord.UploadID       = 0;
            feeItemRecord.OrderType      = feeItem.OrderType;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 医嘱费用生成
        /// </summary>
        /// <param name="amount">数量</param>
        /// <param name="doseNum">付数</param>
        /// <param name="record">医嘱对象</param>
        /// <param name="ipPatlist">病人对象</param>
        /// <param name="row">药品项目明细</param>
        /// <returns>费用对象</returns>
        private IP_FeeItemGenerate GenerateRecordFee(decimal amount, int doseNum, IPD_OrderRecord record, IP_PatList ipPatlist, DataRow row)
        {
            IP_FeeItemGenerate feeItem = new IP_FeeItemGenerate();

            feeItem.PatListID   = record.PatListID;
            feeItem.PatName     = ipPatlist.PatName;
            feeItem.PatDeptID   = ipPatlist.CurrDeptID;
            feeItem.PatDoctorID = ipPatlist.CurrDoctorID;
            feeItem.PatNurseID  = ipPatlist.CurrNurseID;
            feeItem.BabyID      = 0;
            feeItem.ItemID      = Convert.ToInt32(row["ItemID"]);
            feeItem.ItemName    = row["ItemName"].ToString();
            feeItem.FeeClass    = Convert.ToInt32(row["ItemClass"]);
            feeItem.StatID      = Convert.ToInt32(row["StatID"]);
            feeItem.Spec        = row["Standard"].ToString();
            feeItem.Unit        = row["MiniUnitName"].ToString();
            feeItem.PackUnit    = row["MiniUnitName"].ToString();
            feeItem.PackAmount  = amount;
            feeItem.InPrice     = Convert.ToDecimal(row["InPrice"]);
            feeItem.SellPrice   = Convert.ToDecimal(row["SellPrice"]);
            feeItem.Amount      = Convert.ToInt32(amount);
            feeItem.DoseAmount  = doseNum;
            feeItem.TotalFee    = (Convert.ToDecimal(row["SellPrice"]) * feeItem.Amount) / Convert.ToDecimal(row["MiniConvertNum"]);
            //if (record.OrderType == 2)
            //{
            //    feeItem.TotalFee = 0;
            //    feeItem.Amount = 0;
            //}
            //else
            //{
            //    feeItem.TotalFee = (Convert.ToDecimal(row["SellPrice"]) * feeItem.Amount)/Convert.ToDecimal( row["MiniConvertNum"]);
            //}
            feeItem.PresDeptID   = record.PresDeptID;
            feeItem.PresDoctorID = record.OrderDoc;
            if (Convert.ToInt32(row["ExecDeptId"]) > 0)
            {
                feeItem.ExecDeptDoctorID = record.ExecDeptID;// Convert.ToInt32(row["ExecDeptId"]);
            }
            else
            {
                feeItem.ExecDeptDoctorID = record.PresDeptID;
            }

            feeItem.PresDate      = record.OrderBdate;
            feeItem.MarkDate      = record.OrderBdate;
            feeItem.MarkEmpID     = record.OrderDoc;
            feeItem.OrderID       = record.OrderID;
            feeItem.OrderType     = record.OrderCategory;
            feeItem.FrequencyID   = record.FrenquencyID;
            feeItem.FrequencyName = record.Frequency;
            feeItem.ChannelName   = record.ChannelName;
            feeItem.ChannelID     = record.ChannelID;
            feeItem.GroupID       = record.GroupID;
            return(feeItem);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 医嘱本身费用
        /// </summary>
        /// <param name="record">医嘱对象</param>
        /// <param name="dtDrugItem">药品项目数据</param>
        /// <param name="ipPatlist">病人对象</param>
        private void GenerateFee(IPD_OrderRecord record, DataTable dtDrugItem, IP_PatList ipPatlist)
        {
            if (record.ItemType == 4)
            {
                #region 组合项目明细费用生成
                FeeItemDataSource feeDataSource = NewObject <FeeItemDataSource>();
                DataTable         dtDetailItem  = feeDataSource.GetExamItemDetailDt(record.ItemID);
                for (int index = 0; index < dtDetailItem.Rows.Count; index++)
                {
                    int       feeitemId = Convert.ToInt32(dtDetailItem.Rows[index]["ITEMID"]);
                    decimal   amount    = Convert.ToDecimal(dtDetailItem.Rows[index]["ItemAmount"]);
                    DataRow[] rows      = dtDrugItem.Select(" ItemID=" + feeitemId);
                    if (rows.Length < 1)
                    {
                        continue;
                    }

                    IP_FeeItemGenerate feeItem = GenerateRecordFee(amount, 1, record, ipPatlist, rows[0]);
                    feeItem.FeeSource   = 1;
                    feeItem.CalCostMode = 0;
                    this.BindDb(feeItem);
                    feeItem.save();
                }
                #endregion
            }
            else
            {
                #region 医嘱本身费用生成
                if (record.ItemID <= 0 || record.StatID == 0 || record.ItemType == 5)
                {
                    return;
                }

                DataRow[] rows = dtDrugItem.Select(" ItemID=" + record.ItemID);
                if (rows.Length < 1)
                {
                    return;
                }

                IP_FeeItemGenerate feeItem = GenerateRecordFee(record.Amount * record.UnitNO, Convert.ToInt32(record.DoseNum), record, ipPatlist, rows[0]);
                feeItem.FeeSource   = 0;
                feeItem.CalCostMode = 0;
                this.BindDb(feeItem);
                feeItem.save();
                #endregion
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 保存医嘱费用数据
        /// </summary>
        /// <param name="saveDocFeeItemDt">待保存医嘱费用数据</param>
        /// <param name="patListID">病人登记ID</param>
        /// <param name="groupID">组号ID</param>
        /// <param name="empId">操作员ID</param>
        /// <param name="deptID">科室ID</param>
        /// <returns>true:保存成功</returns>
        public bool SaveFeeItemData(DataTable saveDocFeeItemDt, int patListID, int groupID, int empId, int deptID)
        {
            if (saveDocFeeItemDt.Rows.Count > 0)
            {
                IP_FeeItemGenerate mIPFeeItemGenerate = NewObject <IP_FeeItemGenerate>();
                // 获取病人信息
                IP_PatList mPatlist = NewObject <IP_PatList>();
                DataTable  patDt    = NewDao <IDoctorManagementDao>().GetPatientInfo(Convert.ToInt32(saveDocFeeItemDt.Rows[0]["PatListID"]));
                mPatlist = ConvertExtend.ToObject <IP_PatList>(patDt, 0);
                // 获取医嘱信息
                IPD_OrderRecord mIPDOrderRecord = NewObject <IPD_OrderRecord>();
                DataTable       docDt           = NewDao <IDoctorManagementDao>().GetOrderRecord(patListID, groupID);
                mIPDOrderRecord = ConvertExtend.ToObject <IPD_OrderRecord>(docDt, 0);
                for (int i = 0; i < saveDocFeeItemDt.Rows.Count; i++)
                {
                    mIPFeeItemGenerate = ConvertExtend.ToObject <IP_FeeItemGenerate>(saveDocFeeItemDt, i);
                    if (mIPFeeItemGenerate.GenerateID == 0)
                    {
                        // 病人登记信息
                        mIPFeeItemGenerate.PatName     = mPatlist.PatName;
                        mIPFeeItemGenerate.PatDeptID   = mPatlist.CurrDeptID;
                        mIPFeeItemGenerate.PatDoctorID = mPatlist.CurrDoctorID;
                        mIPFeeItemGenerate.PatNurseID  = mPatlist.CurrNurseID;
                        mIPFeeItemGenerate.BabyID      = 0;
                        // 医嘱信息
                        mIPFeeItemGenerate.OrderID       = mIPDOrderRecord.OrderID;
                        mIPFeeItemGenerate.GroupID       = mIPDOrderRecord.GroupID;
                        mIPFeeItemGenerate.OrderType     = mIPDOrderRecord.OrderCategory;// == 0 ? 0 : 3;
                        mIPFeeItemGenerate.FrequencyID   = mIPDOrderRecord.FrenquencyID;
                        mIPFeeItemGenerate.FrequencyName = mIPDOrderRecord.Frequency;
                        mIPFeeItemGenerate.ChannelID     = mIPDOrderRecord.ChannelID;
                        mIPFeeItemGenerate.ChannelName   = mIPDOrderRecord.ChannelName;
                        mIPFeeItemGenerate.PresDoctorID  = empId;
                        mIPFeeItemGenerate.PresDeptID    = deptID;
                        mIPFeeItemGenerate.MarkEmpID     = empId;
                    }
                    // 保存费用数据
                    this.BindDb(mIPFeeItemGenerate);
                    mIPFeeItemGenerate.save();
                }
            }

            return(true);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 保存住院费用生成数据
        /// </summary>
        /// <param name="longFeeOrderDt">住院费用生成数据</param>
        /// <param name="markEmpID">记账人ID</param>
        /// <returns>错误消息</returns>
        public string SaveLongOrderData(DataTable longFeeOrderDt, int markEmpID)
        {
            try
            {
                if (longFeeOrderDt != null && longFeeOrderDt.Rows.Count > 0)
                {
                    IP_FeeItemGenerate feeItem = null;
                    // 查询病人登记信息
                    DataTable  patDt = NewDao <IIPManageDao>().GetPatListInfo(Convert.ToInt32(longFeeOrderDt.Rows[0]["PatListID"]));
                    IP_PatList pat   = ConvertExtend.ToObject <IP_PatList>(patDt, 0);
                    for (int i = 0; i < longFeeOrderDt.Rows.Count; i++)
                    {
                        feeItem              = NewObject <IP_FeeItemGenerate>();
                        feeItem              = ConvertExtend.ToObject <IP_FeeItemGenerate>(longFeeOrderDt, i);
                        feeItem.PatListID    = pat.PatListID;
                        feeItem.PatName      = pat.PatName;
                        feeItem.PatDeptID    = pat.CurrDeptID;
                        feeItem.PatDoctorID  = pat.CurrDoctorID;
                        feeItem.PatNurseID   = pat.CurrNurseID;
                        feeItem.MarkEmpID    = markEmpID;
                        feeItem.PresDoctorID = pat.CurrDoctorID;
                        feeItem.PresDeptID   = feeItem.PatDeptID;
                        feeItem.FeeSource    = 3;
                        if (feeItem.ExecDeptDoctorID == 0)
                        {
                            feeItem.ExecDeptDoctorID = pat.CurrDeptID;
                        }

                        this.BindDb(feeItem);
                        feeItem.save();
                        longFeeOrderDt.Rows[i]["GenerateID"] = feeItem.GenerateID;
                    }
                }
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }

            return(string.Empty);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 一组医嘱用法关联的费用
        /// </summary>
        /// <param name="record">医嘱对象</param>
        /// <param name="dtDrugItem">药品项目数据</param>
        /// <param name="ipPatlist">病人对象</param>
        private void GenerateChannelFee(IPD_OrderRecord record, DataTable dtDrugItem, IP_PatList ipPatlist)
        {
            #region 用法关联费用明细生成
            //用法关联费用明细
            List <Basic_ChannelFee> channelFees = NewObject <Basic_ChannelFee>().getlist <Basic_ChannelFee>("ChannelID=" + record.ChannelID);
            foreach (Basic_ChannelFee chanelFee in channelFees)
            {
                DataRow[] rows = dtDrugItem.Select(" ItemID=" + chanelFee.ItemID);
                if (rows.Length < 1)
                {
                    continue;
                }

                IP_FeeItemGenerate feeItem = GenerateRecordFee(chanelFee.ItemAmount, 1, record, ipPatlist, rows[0]);
                feeItem.FeeSource   = 2;
                feeItem.CalCostMode = chanelFee.CalCostMode;
                this.BindDb(feeItem);
                feeItem.save();
            }
            #endregion
        }
Ejemplo n.º 8
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);
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 账单记账
        /// </summary>
        /// <param name="feeItemAccDt">记账明细数据</param>
        /// <param name="empID">记账人ID</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="isBedFee">是否记床位费</param>
        /// <param name="isLongFee">是否记账单</param>
        /// <returns>true:记账成功</returns>
        public bool FeeItemAccounting(
            DataTable feeItemAccDt,
            int empID,
            DateTime endTime,
            bool isBedFee,
            bool isLongFee)
        {
            // 是否勾选了账单
            if (isLongFee)
            {
                #region "保存费用生成数据"
                List <int> generateIdList = new List <int>();
                // 保存未保存的账单
                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;
                            feeItem.FeeSource    = 3;
                            if (feeItem.ExecDeptDoctorID == 0)
                            {
                                feeItem.ExecDeptDoctorID = pat.CurrDeptID;
                            }

                            this.BindDb(feeItem);
                            feeItem.save();
                        }

                        generateIdList.Add(feeItem.GenerateID);
                    }

                    // 费用记账--保存费用明细数据
                    FeeItemAccounting(generateIdList, endTime, empID);
                }
                #endregion
            }

            // 是否勾选了床位费
            if (isBedFee)
            {
                BedFeeAccounting(Convert.ToInt32(feeItemAccDt.Rows[0]["PatListID"]), endTime, empID);
            }

            return(true);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// 保存医技申请
        /// </summary>
        /// <param name="head">申请头实体</param>
        /// <param name="itemData">项目数据</param>
        /// <param name="dt">明细数据</param>
        /// <returns>申请头id</returns>
        public int SaveMedicalApply(EXA_MedicalApplyHead head, DataTable itemData, DataTable dt)
        {
            DataRow dr = null;

            head.Remark = GetItemName(itemData);
            DeleteData(itemData, dt);
            if (dt != null)
            {
                head.ApplyHeadID = Convert.ToInt32(dt.Rows[0]["ApplyHeadID"].ToString());
            }

            this.BindDb(head);
            head.save();
            int          headid   = head.ApplyHeadID;
            OPD_PresHead presHead = new OPD_PresHead();

            if (head.SystemType == 0)
            {
                if (dt != null)
                {
                    presHead.PresHeadID = Convert.ToInt32(dt.Rows[0]["PresHeadID"].ToString());
                }

                presHead.MemberID  = head.MemberID;
                presHead.PatListID = head.PatListID;
                presHead.PresType  = 4;
                BindDb(presHead);
                int presheadid = presHead.save();
                NewObject <PrescriptionProcess>().UpdatePatCurrentDoctorID(head.PatListID, head.ApplyDoctorID, head.ApplyDeptID);
            }

            for (int i = 0; i < itemData.Rows.Count; i++)
            {
                dr = NewDao <IOPDDao>().GetPresNO().Rows[0];
                int             predetailid = 0;
                OPD_PresDetail  presdetail  = new OPD_PresDetail();
                IPD_OrderRecord orderRecord = new IPD_OrderRecord();
                DataRow         detaildr    = null;
                DataTable       orderdt     = NewDao <IOPDDao>().GetStatID(itemData.Rows[i]["ExamItemID"].ToString());
                if (dt != null)
                {
                    detaildr = dt.Select("ItemID=" + Convert.ToInt32(itemData.Rows[i]["ExamItemID"].ToString())).FirstOrDefault();
                }

                if (head.SystemType == 0)
                {
                    if (detaildr != null)
                    {
                        presdetail.PresDetailID = Convert.ToInt32(detaildr["PresDetailID"]);
                    }

                    if (head.ApplyType == 2)
                    {
                        presdetail.Price        = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString()) * Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                        presdetail.ChargeAmount = Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                        presdetail.PresAmount   = Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                    }
                    else
                    {
                        presdetail.Price        = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString());
                        presdetail.ChargeAmount = 1;
                        presdetail.PresAmount   = 1;
                    }

                    presdetail.DoseNum    = 1;
                    presdetail.PresHeadID = presHead.PresHeadID;
                    presdetail.ItemID     = Convert.ToInt32(itemData.Rows[i]["ExamItemID"].ToString());
                    presdetail.ItemName   = itemData.Rows[i]["ExamItemName"].ToString();
                    presdetail.ExecDeptID = head.ExecuteDeptID;
                    presdetail.StatID     = Convert.ToInt32(orderdt.Rows[0]["StatID"]);
                    if (dr != null)
                    {
                        if (dr["PresNO"] == null || dr["PresNO"].ToString() == string.Empty)
                        {
                            presdetail.PresNO = 1;
                        }
                        else
                        {
                            presdetail.PresNO = Convert.ToInt32(dr["PresNO"]) + 1;
                        }
                    }

                    presdetail.IsEmergency    = 0;
                    presdetail.IsLunacyPosion = 0;
                    presdetail.PresDate       = head.ApplyDate;
                    presdetail.PresDeptID     = head.ApplyDeptID;
                    presdetail.PresDoctorID   = head.ApplyDoctorID;
                    BindDb(presdetail);
                    predetailid = presdetail.save();
                    if (presdetail.PresDetailID > 0)
                    {
                        predetailid = presdetail.PresDetailID;
                    }
                }
                else
                {
                    if (detaildr != null)
                    {
                        orderRecord.OrderID = Convert.ToInt32(detaildr["PresDetailID"]);
                    }

                    DataTable          ipPatlist          = NewDao <IOPDDao>().GetInBedPatient(head.PatListID);
                    SerialNumberSource serialNumberSource = NewObject <SerialNumberSource>();
                    string             groupID            = serialNumberSource.GetSerialNumber(SnType.医嘱组号);
                    orderRecord.GroupID       = Convert.ToInt32(groupID);
                    orderRecord.ExecDeptID    = head.ExecuteDeptID;
                    orderRecord.OrderCategory = 1;
                    orderRecord.CancelFlag    = 0;
                    orderRecord.DeleteFlag    = 0;
                    orderRecord.AstFlag       = -1;
                    orderRecord.DoseNum       = 1;
                    orderRecord.Dosage        = 1;
                    // orderRecord.DosageUnit = itemData.Rows[i][""].ToString();
                    orderRecord.OrderStatus = 1;
                    orderRecord.PatDeptID   = Convert.ToInt32(ipPatlist.Rows[0]["CurrDeptID"]);
                    orderRecord.WardID      = Convert.ToInt32(ipPatlist.Rows[0]["EnterWardID"]);
                    orderRecord.StatID      = Convert.ToInt32(orderdt.Rows[0]["StatID"]);
                    orderRecord.ItemID      = Convert.ToInt32(itemData.Rows[i]["ExamItemID"].ToString());
                    orderRecord.PresDeptID  = head.ApplyDeptID;
                    orderRecord.OrderDoc    = head.ApplyDoctorID;
                    orderRecord.ItemName    = itemData.Rows[i]["ExamItemName"].ToString();
                    orderRecord.Amount      = Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                    orderRecord.OrderBdate  = head.CheckDate; //DateTime.Now; 20170418改成检查时间
                    if (head.ApplyType == 2)
                    {
                        orderRecord.ItemPrice = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString()) * Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                    }
                    else
                    {
                        orderRecord.ItemPrice = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString());
                    }

                    orderRecord.ItemType  = 4;
                    orderRecord.PatListID = head.PatListID;
                    BindDb(orderRecord);
                    predetailid = orderRecord.save();
                    //插入费用明细
                    FeeItemDataSource feeDataSource = NewObject <FeeItemDataSource>();
                    DataTable         dtDetailItem  = feeDataSource.GetExamItemDetailDt(orderRecord.ItemID);

                    for (int index = 0; index < dtDetailItem.Rows.Count; index++)
                    {
                        int       feeitemId  = Convert.ToInt32(dtDetailItem.Rows[index]["ITEMID"]);
                        DataTable dtDrugItem = NewDao <IOPDDao>().GetFeeItemData(feeitemId);
                        decimal   amount     = Convert.ToDecimal(dtDetailItem.Rows[index]["ItemAmount"]);
                        DataRow[] rows       = dtDrugItem.Select(" ItemID=" + feeitemId);
                        if (rows.Length < 1)
                        {
                            continue;
                        }

                        IP_FeeItemGenerate feeItem = GenerateRecordFee(amount, 1, orderRecord, ipPatlist, rows[0]);
                        feeItem.FeeSource   = 1;
                        feeItem.CalCostMode = 0;
                        this.BindDb(feeItem);
                        feeItem.save();
                    }
                }

                EXA_MedicalApplyDetail detail = new EXA_MedicalApplyDetail();
                if (detaildr != null)
                {
                    detail.ApplyDetailID = Convert.ToInt32(detaildr["ApplyDetailID"]);
                }

                detail.SystemType   = head.SystemType;
                detail.PresDetailID = predetailid;
                detail.ApplyHeadID  = head.ApplyHeadID;
                detail.ItemID       = Convert.ToInt32(itemData.Rows[i]["ExamItemID"].ToString());
                detail.ItemName     = itemData.Rows[i]["ExamItemName"].ToString();
                detail.Price        = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString());
                if (head.ApplyType == 2)
                {
                    detail.Amount   = Convert.ToInt32(itemData.Rows[i]["Amount"].ToString());
                    detail.TotalFee = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString()) * detail.Amount;
                }
                else
                {
                    detail.Amount   = 1;
                    detail.TotalFee = Convert.ToDecimal(itemData.Rows[i]["Price"].ToString());
                }

                BindDb(detail);
                detail.save();
            }

            return(headid);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 生成病人床位费
        /// </summary>
        /// <param name="bedId">病床ID</param>
        /// <param name="patListId">病人登记ID</param>
        /// <param name="isPackBed">是否为包床费用</param>
        /// <param name="empId">操作员ID</param>
        private void SaveBedFeeData(int bedId, int patListId, bool isPackBed, int empId)
        {
            // 获取床位费用
            DataTable tempDt = null;

            if (isPackBed)
            {
                // 包床获取包床床位费用
                tempDt = NewDao <IIPManageDao>().GetBedFeeItemList(bedId, 1);
            }
            else
            {
                // 不是包床,获取病床包床费用之外的床位费
                tempDt = NewDao <IIPManageDao>().GetBedFeeItemList(bedId, 0);
            }

            if (tempDt != null && tempDt.Rows.Count > 0)
            {
                // 查询病人登记信息
                DataTable  patDt = NewDao <IIPManageDao>().GetPatListInfo(patListId);
                IP_PatList pat   = ConvertExtend.ToObject <IP_PatList>(patDt, 0);
                for (int i = 0; i < tempDt.Rows.Count; i++)
                {
                    IP_FeeItemGenerate feeItem = NewObject <IP_FeeItemGenerate>();
                    feeItem.PatListID   = pat.PatListID;
                    feeItem.PatName     = pat.PatName;
                    feeItem.PatDeptID   = pat.CurrDeptID;
                    feeItem.PatDoctorID = pat.CurrDoctorID;
                    feeItem.PatNurseID  = pat.CurrNurseID;
                    feeItem.BabyID      = 0;
                    if (DBNull.Value == tempDt.Rows[i]["ItemID"])
                    {
                        continue;
                    }
                    feeItem.ItemID           = Convert.ToInt32(tempDt.Rows[i]["ItemID"]);
                    feeItem.ItemName         = tempDt.Rows[i]["ItemName"].ToString();
                    feeItem.FeeClass         = Convert.ToInt32(tempDt.Rows[i]["ItemClass"]);
                    feeItem.StatID           = Convert.ToInt32(tempDt.Rows[i]["StatID"]);
                    feeItem.Spec             = tempDt.Rows[i]["Standard"].ToString();
                    feeItem.PackAmount       = Convert.ToInt32(tempDt.Rows[i]["MiniConvertNum"]);
                    feeItem.PackUnit         = tempDt.Rows[i]["UnPickUnit"].ToString();
                    feeItem.InPrice          = Convert.ToDecimal(tempDt.Rows[i]["InPrice"]);
                    feeItem.SellPrice        = Convert.ToDecimal(tempDt.Rows[i]["SellPrice"]);
                    feeItem.Amount           = Convert.ToInt32(tempDt.Rows[i]["ItemAmount"]);
                    feeItem.Unit             = tempDt.Rows[i]["MiniUnitName"].ToString();
                    feeItem.DoseAmount       = 0;
                    feeItem.TotalFee         = Math.Round(feeItem.Amount * Convert.ToDecimal(tempDt.Rows[i]["UnitPrice"]), 2);
                    feeItem.PresDeptID       = pat.CurrDeptID;
                    feeItem.PresDoctorID     = pat.CurrDoctorID;
                    feeItem.ExecDeptDoctorID = pat.CurrDeptID;
                    feeItem.PresDate         = DateTime.Now;
                    feeItem.MarkDate         = DateTime.Now;
                    feeItem.MarkEmpID        = empId;
                    feeItem.SortOrder        = 0;
                    feeItem.OrderID          = 0;
                    feeItem.GroupID          = 0;
                    feeItem.OrderType        = 2;
                    feeItem.FrequencyID      = 0;
                    feeItem.FrequencyName    = string.Empty;
                    feeItem.ChannelID        = 0;
                    feeItem.ChannelName      = string.Empty;
                    feeItem.IsStop           = 0;
                    feeItem.FeeSource        = 4;
                    feeItem.CalCostMode      = 0;
                    feeItem.BedID            = bedId;
                    this.BindDb(feeItem);
                    feeItem.save();
                }
            }
        }