Пример #1
0
        public ServiceResponseData SaveRefundMessage()
        {
            try
            {
                DataTable        dtPresc     = requestData.GetData <DataTable>(0);
                DataTable        dtMedical   = requestData.GetData <DataTable>(1);
                int              operatoreid = requestData.GetData <int>(2);
                OP_FeeRefundHead refundHead  = new OP_FeeRefundHead();
                refundHead.RefundDocID   = operatoreid;
                refundHead.RefundDate    = DateTime.Now;
                refundHead.RefundPayFlag = 0;
                refundHead.Flag          = 0;
                refundHead.PatListID     = dtPresc == null || dtPresc.Rows.Count == 0 ? Convert.ToInt32(dtMedical.Rows[0]["patlistid"]):  Convert.ToInt32(dtPresc.Rows[0]["patlistid"]);
                refundHead.PatName       = dtPresc == null || dtPresc.Rows.Count == 0 ? dtMedical.Rows[0]["patname"].ToString(): dtPresc.Rows[0]["patname"].ToString();
                refundHead.InvoiceNum    = dtPresc == null || dtPresc.Rows.Count == 0 ? dtMedical.Rows[0]["invoiceNO"].ToString():dtPresc.Rows[0]["invoiceNO"].ToString();
                this.BindDb(refundHead);
                refundHead.save();

                if (dtPresc != null)
                {
                    for (int i = 0; i < dtPresc.Rows.Count; i++)
                    {
                        if (dtPresc.Rows[i]["ItemName"].ToString().Trim() == "小   计")
                        {
                            continue;
                        }

                        OP_FeeRefundDetail refundDetail = new OP_FeeRefundDetail();
                        refundDetail.ReHeadID      = refundHead.ReHeadID;
                        refundDetail.FeeItemHeadID = Convert.ToInt32(dtPresc.Rows[i]["FeeItemHeadID"]);
                        OP_FeeItemHead opfeeitemhead = NewObject <OP_FeeItemHead>().getmodel(refundDetail.FeeItemHeadID) as OP_FeeItemHead;
                        if (opfeeitemhead.ChargeStatus != 0 && opfeeitemhead.ChargeFlag != 1 && opfeeitemhead.DistributeFlag != Convert.ToInt32(dtPresc.Rows[i]["DistributeFlag"]))
                        {
                            throw new Exception("该处方没有正常的收费记录");
                        }

                        refundDetail.DistributeFlag  = opfeeitemhead.DistributeFlag;//取数据库最新记录状态,防止并发状态
                        refundDetail.RefundFlag      = 0;
                        refundDetail.FeeItemDetailID = Convert.ToInt32(dtPresc.Rows[i]["PresDetailID"]);
                        refundDetail.ItemID          = Convert.ToInt32(dtPresc.Rows[i]["ItemID"]);
                        refundDetail.ItemName        = dtPresc.Rows[i]["ItemName"].ToString();
                        refundDetail.OldAmount       = Convert.ToDecimal(dtPresc.Rows[i]["Amount"]);

                        decimal refundminimun    = Convert.ToDecimal(dtPresc.Rows[i]["RefundMiniNum"]);
                        decimal refundpacknum    = Convert.ToDecimal(dtPresc.Rows[i]["RefundPackNum"]);
                        decimal refundpresamount = Convert.ToDecimal(dtPresc.Rows[i]["refundpresamount"]);
                        decimal unitNO           = Convert.ToDecimal(dtPresc.Rows[i]["UnitNO"]);
                        decimal refundamount     = ((refundpacknum * unitNO) + refundminimun) * refundpresamount;
                        refundDetail.RefundAmount     = refundamount;
                        refundDetail.NewAmount        = refundDetail.OldAmount - refundDetail.RefundAmount;
                        refundDetail.RefundFee        = Convert.ToDecimal(dtPresc.Rows[i]["RefundFee"]);
                        refundDetail.RefundPresAmount = refundpresamount;
                        this.BindDb(refundDetail);
                        refundDetail.save();
                    }
                }

                if (dtMedical != null)
                {
                    //根据组合项目生成明细
                    for (int i = 0; i < dtMedical.Rows.Count; i++)
                    {
                        int            feeItemHeadID = Convert.ToInt32(dtMedical.Rows[i]["FeeItemHeadID"]);
                        OP_FeeItemHead opfeeitemhead = NewObject <OP_FeeItemHead>().getmodel(feeItemHeadID) as OP_FeeItemHead;
                        if (opfeeitemhead.ChargeStatus != 0 && opfeeitemhead.ChargeFlag != 1 && opfeeitemhead.DistributeFlag != Convert.ToInt32(dtMedical.Rows[i]["DistributeFlag"]))
                        {
                            throw new Exception("该处方没有正常的收费记录");
                        }

                        List <OP_FeeItemDetail> list = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" FeeItemHeadID=" + feeItemHeadID + " and ExamItemID=" + dtMedical.Rows[i]["ExamItemID"] + " ");
                        foreach (OP_FeeItemDetail detail in list)
                        {
                            OP_FeeRefundDetail refundDetail = new OP_FeeRefundDetail();
                            refundDetail.ReHeadID        = refundHead.ReHeadID;
                            refundDetail.FeeItemHeadID   = feeItemHeadID;
                            refundDetail.DistributeFlag  = opfeeitemhead.DistributeFlag;//取数据库最新记录状态,防止并发状态
                            refundDetail.RefundFlag      = 0;
                            refundDetail.FeeItemDetailID = detail.PresDetailID;
                            refundDetail.ItemID          = detail.ItemID;
                            refundDetail.ItemName        = detail.ItemName;
                            refundDetail.OldAmount       = detail.Amount;
                            if (dtMedical.Rows[i]["Sel"] != DBNull.Value &&
                                Convert.ToInt32(dtMedical.Rows[i]["Sel"]) == 1)
                            {
                                refundDetail.RefundAmount = detail.Amount;
                            }
                            else
                            {
                                refundDetail.RefundAmount = 0;
                            }

                            refundDetail.NewAmount        = refundDetail.OldAmount - refundDetail.RefundAmount;
                            refundDetail.RefundFee        = detail.RetailPrice * refundDetail.RefundAmount;
                            refundDetail.RefundPresAmount = detail.PresAmount;
                            this.BindDb(refundDetail);
                            refundDetail.save();
                        }
                    }
                }

                responseData.AddData(true);
                return(responseData);
            }
            catch (Exception err)
            {
                throw new Exception(err.Message);
            }
        }