Пример #1
0
        /// <summary>
        /// 结帐
        /// </summary>
        public void m_mthCharge()
        {
            if (this.m_objViewer.ucPatientInfo.BihPatient_VO.Status == 3 && this.m_objViewer.ucPatientInfo.BihPatient_VO.FeeStatus != 4)
            {
                MessageBox.Show("该病人已办理出院结算,当前为查询状态。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            if (m_intParm1068 != 0)
            {
                ////////结算前判断病人在门诊是否用未交费用的处方,给出提示
                string strMessage = "";
                clsPublic.m_lngSelectPatientNoPayRecipe(this.m_objViewer.ucPatientInfo.BihPatient_VO.RegisterID, out strMessage);
                if (!string.IsNullOrEmpty(strMessage))
                {
                    if (m_intParm1068 == 1)
                    {
                        if (MessageBox.Show("是否允许结算" + strMessage, "病人门诊费用未清!", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                        {
                            return;
                        }
                    }
                    else if (m_intParm1068 == 2)
                    {
                        MessageBox.Show("不允许结算" + strMessage, "病人门诊费用未清!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                }
                //////////////////
            }
            if (ChargeDtSelect == null || ChargeDtSelect.Rows.Count == 0)
            {
                if (MessageBox.Show("该病人在住院期间没有发生任何费用,是否直接办理出院?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    frmReckoning f = new frmReckoning(this.m_objViewer.InvoNo);
                    if (this.m_objViewer.ucPatientInfo.BihPatient_VO.FeeStatus == 4)
                    {
                        f.ChargeType = 6;
                    }
                    else
                    {
                        f.ChargeType = 2;
                    }
                    f.ChargeDetail    = null;
                    f.objPatient      = this.m_objViewer.ucPatientInfo;
                    f.DayChrgType     = 0;
                    f.DayAccountsArr  = null;
                    f.DirectChargeOut = true;
                    if (f.ShowDialog() == DialogResult.OK)
                    {
                        this.m_objViewer.ucPatientInfo.m_mthShortCurFind();
                    }
                }

                return;
            }

            #region 获取帐期信息
            //结算类型 1 帐期 2 明细
            int DayChrgType = 1;

            Hashtable has = new Hashtable();
            for (int i = 0; i < ChargeDtSelect.Rows.Count; i++)
            {
                string dayid = ChargeDtSelect.Rows[i]["dayaccountid_chr"].ToString();

                if (!has.ContainsKey(dayid))
                {
                    has.Add(dayid, null);
                }
            }

            ArrayList DayaccountsNoArr = new ArrayList();
            DayaccountsNoArr.AddRange(has.Keys);

            DataView  dvDayAll       = new DataView(ChargeDt);
            DataView  dvDaySub       = new DataView(ChargeDtSelect);
            ArrayList DayAccountsArr = new ArrayList();
            for (int i = 0; i < DayaccountsNoArr.Count; i++)
            {
                string dayid = DayaccountsNoArr[i].ToString();

                clsBihDayAccounts_VO DayAccounts_VO = new clsBihDayAccounts_VO();
                DayAccounts_VO.AccountsID = dayid;
                DayAccounts_VO.ChargeEmp  = this.m_objViewer.LoginInfo.m_strEmpID;

                dvDayAll.RowFilter = "dayaccountid_chr = '" + dayid + "'";
                dvDaySub.RowFilter = "dayaccountid_chr = '" + dayid + "'";

                decimal decTotalSum = 0;
                decimal decSbSum    = 0;
                decimal decAcctSum  = 0;

                foreach (DataRowView drv in dvDayAll)
                {
                    decimal d = clsPublic.ConvertObjToDecimal(drv["unitprice_dec"]) * clsPublic.ConvertObjToDecimal(drv["amount_dec"]);
                    decTotalSum += clsPublic.Round(d, 2);
                    decSbSum    += clsPublic.Round(d * clsPublic.ConvertObjToDecimal(drv["precent_dec"]) / 100, 2);
                }
                decAcctSum = decTotalSum - decSbSum;

                DayAccounts_VO.TotalSum = decTotalSum;
                DayAccounts_VO.SbSum    = decSbSum;
                DayAccounts_VO.AcctSum  = decAcctSum;

                decTotalSum = 0;
                decSbSum    = 0;
                decAcctSum  = 0;

                foreach (DataRowView drv in dvDaySub)
                {
                    decimal d = clsPublic.ConvertObjToDecimal(drv["unitprice_dec"]) * clsPublic.ConvertObjToDecimal(drv["amount_dec"]);
                    decTotalSum += clsPublic.Round(d, 2);
                    decSbSum    += clsPublic.Round(d * clsPublic.ConvertObjToDecimal(drv["precent_dec"]) / 100, 2);
                }
                decAcctSum = decTotalSum - decSbSum;

                DayAccounts_VO.ClearSbSum   = decSbSum;
                DayAccounts_VO.ClearAcctSum = decAcctSum;

                DayAccountsArr.Add(DayAccounts_VO);
            }

            #endregion

            //只能结算待结、待清费用
            DataView dv = new DataView(ChargeDt);
            dv.RowFilter = "pstatus_int = 1 or pstatus_int = 2";

            DataTable dt = ChargeDt.Clone();
            foreach (DataRowView drv in dv)
            {
                dt.Rows.Add(drv.Row.ItemArray);
            }
            dt.AcceptChanges();

            frmReckoning frec = new frmReckoning(this.m_objViewer.InvoNo);
            if (this.m_objViewer.ucPatientInfo.BihPatient_VO.FeeStatus == 4)
            {
                frec.ChargeType = 6;
            }
            else
            {
                frec.ChargeType = 2;
            }
            frec.ChargeDetail   = dt;
            frec.objPatient     = this.m_objViewer.ucPatientInfo;
            frec.DayChrgType    = DayChrgType;
            frec.DayAccountsArr = DayAccountsArr;
            if (frec.ShowDialog() == DialogResult.OK)
            {
                this.m_objViewer.ucPatientInfo.m_mthShortCurFind();
            }
        }
Пример #2
0
        /// <summary>
        /// 结帐
        /// </summary>
        public void m_mthCharge()
        {
            if (ChargeDtSelect == null || ChargeDtSelect.Rows.Count == 0)
            {
                MessageBox.Show("请选择结帐项目。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            #region 获取帐期信息
            //结算类型 1 帐期 2 明细
            int       DayChrgType      = 0;
            ArrayList DayaccountsNoArr = new ArrayList();

            if (this.m_objViewer.rdoZq.Checked)
            {
                DayChrgType = 1;

                for (int i = 0; i < this.m_objViewer.dtgMain.Rows.Count; i++)
                {
                    if (this.m_objViewer.dtgMain.Rows[i].Cells[0].Value.ToString().ToUpper() == "T")
                    {
                        DataRow dr = (DataRow)this.m_objViewer.dtgMain.Rows[i].Tag;
                        DayaccountsNoArr.Add(dr["dayaccountid_chr"].ToString());
                    }
                }
            }
            else if (this.m_objViewer.rdoMx.Checked)
            {
                DayChrgType = 2;

                //全选明细等同于按帐期结帐
                bool b = true;
                for (int i = 0; i < this.m_objViewer.dtgDetail.Rows.Count; i++)
                {
                    if (this.m_objViewer.dtgDetail.Rows[i].Cells[0].ReadOnly == true)
                    {
                        continue;
                    }

                    if (this.m_objViewer.dtgDetail.Rows[i].Cells[0].Value.ToString().ToUpper() == "F")
                    {
                        b = false;
                        break;
                    }
                }

                if (b)
                {
                    DayChrgType = 1;
                }

                for (int i = 0; i < this.m_objViewer.dtgMain.Rows.Count; i++)
                {
                    if (this.m_objViewer.dtgMain.Rows[i].Selected)
                    {
                        DataRow dr = (DataRow)this.m_objViewer.dtgMain.Rows[i].Tag;
                        DayaccountsNoArr.Add(dr["dayaccountid_chr"].ToString());
                    }
                }
            }
            else if (this.m_objViewer.rdoMix.Checked)
            {
                DayChrgType = 2;

                string    id    = "";
                Hashtable hasID = new Hashtable();
                for (int i = 0; i < this.ChargeDtSelect.Rows.Count; i++)
                {
                    id = this.ChargeDtSelect.Rows[i]["dayaccountid_chr"].ToString();
                    if (!hasID.ContainsKey(id))
                    {
                        hasID.Add(id, id);
                    }
                }
                if (hasID.Count > 0)
                {
                    DayaccountsNoArr.AddRange(hasID.Values);
                }
            }

            DataView  dvDayAll       = new DataView(ChargeDt);
            DataView  dvDaySub       = new DataView(ChargeDtSelect);
            ArrayList DayAccountsArr = new ArrayList();
            for (int i = 0; i < DayaccountsNoArr.Count; i++)
            {
                string dayid = DayaccountsNoArr[i].ToString();

                clsBihDayAccounts_VO DayAccounts_VO = new clsBihDayAccounts_VO();
                DayAccounts_VO.AccountsID = dayid;
                DayAccounts_VO.ChargeEmp  = this.m_objViewer.LoginInfo.m_strEmpID;

                dvDayAll.RowFilter = "dayaccountid_chr = '" + dayid + "'";
                dvDaySub.RowFilter = "dayaccountid_chr = '" + dayid + "' and pstatus_int = 2";

                decimal decTotalSum = 0;
                decimal decSbSum    = 0;
                decimal decAcctSum  = 0;

                foreach (DataRowView drv in dvDayAll)
                {
                    decimal d = clsPublic.ConvertObjToDecimal(drv["unitprice_dec"]) * clsPublic.ConvertObjToDecimal(drv["amount_dec"]);
                    decTotalSum += clsPublic.Round(d, 2);
                    decSbSum    += clsPublic.Round(d * clsPublic.ConvertObjToDecimal(drv["precent_dec"]) / 100, 2);
                }
                decAcctSum = decTotalSum - decSbSum;

                DayAccounts_VO.TotalSum = decTotalSum;
                DayAccounts_VO.SbSum    = decSbSum;
                DayAccounts_VO.AcctSum  = decAcctSum;

                decTotalSum = 0;
                decSbSum    = 0;
                decAcctSum  = 0;

                foreach (DataRowView drv in dvDaySub)
                {
                    decimal d = clsPublic.ConvertObjToDecimal(drv["unitprice_dec"]) * clsPublic.ConvertObjToDecimal(drv["amount_dec"]);
                    decTotalSum += clsPublic.Round(d, 2);
                    decSbSum    += clsPublic.Round(d * clsPublic.ConvertObjToDecimal(drv["precent_dec"]) / 100, 2);
                }
                decAcctSum = decTotalSum - decSbSum;

                DayAccounts_VO.ClearSbSum   = decSbSum;
                DayAccounts_VO.ClearAcctSum = decAcctSum;

                DayAccountsArr.Add(DayAccounts_VO);
            }

            #endregion

            frmReckoning frec = new frmReckoning();
            frec.ChargeType     = 1;
            frec.ChargeDetail   = ChargeDtSelect;
            frec.objPatient     = this.m_objViewer.ucPatientInfo;
            frec.DayChrgType    = DayChrgType;
            frec.DayAccountsArr = DayAccountsArr;
            if (frec.ShowDialog() == DialogResult.OK)
            {
                this.m_objViewer.ucPatientInfo.m_mthShortCurFind();
            }
        }
Пример #3
0
        /// <summary>
        /// 结帐处理:将待结转为待清,同时生成一笔期帐.(含补滚费)
        /// </summary>
        public void m_mthCharge()
        {
            if (!this.m_blnBatchCharge(false))
            {
                return;
            }

            if (this.dtSource.Rows.Count == 0)
            {
                MessageBox.Show("该病人没有待结费用。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                if (MessageBox.Show("结帐收费项目前请再次确认? [是]-确认 [否]-取消", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.No)
                {
                    return;
                }
            }

            frmDayReckoningRemark fremark = new frmDayReckoningRemark();

            fremark.Text = "结帐备注";
            DialogResult dg = fremark.ShowDialog();

            if (dg == DialogResult.Yes || dg == DialogResult.OK)
            {
                clsBihDayAccounts_VO DayAccounts_VO = new clsBihDayAccounts_VO();
                DayAccounts_VO.RegisterID = this.m_objViewer.ucPatientInfo.RegisterID;
                DayAccounts_VO.PatientID  = this.m_objViewer.ucPatientInfo.BihPatient_VO.PatientID;
                DayAccounts_VO.AreaID     = this.m_objViewer.ucPatientInfo.BihPatient_VO.AreaID;
                DayAccounts_VO.Note       = fremark.RemarkInfo;
                DayAccounts_VO.CurrAreaID = this.m_objViewer.ucPatientInfo.BihPatient_VO.AreaID;
                DayAccounts_VO.OperID     = this.m_objViewer.LoginInfo.m_strEmpID;
                DayAccounts_VO.Type       = "1";

                //计算总金额、自付金额和记帐金额
                decimal decTotalSum = 0;
                decimal decSbSum    = 0;
                decimal decAcctSum  = 0;

                for (int i = 0; i < dtSource.Rows.Count; i++)
                {
                    decimal d = clsPublic.ConvertObjToDecimal(dtSource.Rows[i]["unitprice_dec"]) * clsPublic.ConvertObjToDecimal(dtSource.Rows[i]["amount_dec"]);
                    decTotalSum += clsPublic.Round(d, 2);
                    decSbSum    += clsPublic.Round(d * clsPublic.ConvertObjToDecimal(dtSource.Rows[i]["precent_dec"]) / 100, 2);
                }

                DayAccounts_VO.TotalSum = decTotalSum;
                DayAccounts_VO.SbSum    = decSbSum;
                DayAccounts_VO.AcctSum  = decAcctSum;

                long l = this.objSvc.m_lngBuildDayAccounts(DayAccounts_VO, this.m_objViewer.LoginInfo.m_strEmpID, int.Parse(this.m_objViewer.ChargeType));
                if (l > 0)
                {
                    //出院结帐立即腾出床位
                    if (this.m_objViewer.ChargeType == "1")
                    {
                        this.objSvc.m_lngClearBed(this.m_objViewer.ucPatientInfo.RegisterID);
                        this.objSvc.m_lngUpdatePatientChargeCheckStatus(this.m_objViewer.ucPatientInfo.RegisterID, "3");
                    }

                    MessageBox.Show("结帐成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    this.m_objViewer.ucPatientInfo.m_mthShortCurFind();
                }
            }
        }