Ejemplo n.º 1
0
        void controller_AfterBudgetEndEvent(object sender, AfterBudgetEndArgs e)
        {
            if (e.Success)
            {
                //向用户展示结算信息
                FrmChargeInfo frmChargeInfo = new FrmChargeInfo(e.TotalBugetInfo);
                if (frmChargeInfo.ShowDialog( ) == DialogResult.Cancel)
                {
                    e.ChargeController.CancelCharge( );
                    return;
                }

                //防止在允许收手工录入医保支付或农合补偿金额情况下结算多张处方,
                if (frmChargeInfo.ReturnChargeInfo.VillageFee > 0 &&
                    e.BudgetInfos.Length > 1 && Convert.ToInt16(HIS.MZ_BLL.OPDParamter.Parameters["002"]) == 0)
                {
                    MessageBox.Show("如果是手工录入的农合补偿金额,每次只能结算一张处方!", "", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                    return;
                }
                HIS.MZ_BLL.ChargeInfo[] chargeInfos = e.BudgetInfos;
                e.ChargeController.SetChargeInfoPay(ref chargeInfos, frmChargeInfo.ReturnChargeInfo.VillageFee,
                                                    frmChargeInfo.ReturnChargeInfo.PosFee,
                                                    frmChargeInfo.ReturnChargeInfo.CashFee,
                                                    frmChargeInfo.ReturnChargeInfo.SelfTally);
                e.BudgetInfos = chargeInfos;
                frmPreviousInfo.ActiveGetMoney = frmChargeInfo.ActPay.ToString(decimalFormat);
                frmPreviousInfo.ReturnMoney    = frmChargeInfo.ReturnMoney.ToString(decimalFormat);
                controller.Balance(e);
            }
            else
            {
                MessageBox.Show(e.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 退费处理
        /// </summary>
        private void RefundmentProcess()
        {
               //delete by heyan 2011.3.22 不是该收费员收的费也可以退费
            //if ( _EmployeeID != Convert.ToInt32( currentInvoice.ChargeUserId ) )
            //{
            //    throw new OperatorException( "该发票不是您收费,需收费员【"+currentInvoice.ChargeUser+"】才能退费!" );
            //}
            //得到新的处方
            List <int> returnedDocPresIdList = new List <int>(); //有退费处理的医生处方ID

            Prescription[] remanentPrescriptions = GetPrescriptionRemanentFromGrid(true, out returnedDocPresIdList);
            if (remanentPrescriptions == null)
            {
                throw new OperatorException("至少需要指定一条需要退费项目的数量!");
            }
            //整理处方,除去0数量和没有明细的处方
            List <Prescription> lstPrescription = new List <Prescription>( );

            for (int i = 0; i < remanentPrescriptions.Length; i++)
            {
                remanentPrescriptions[i].PrescriptionID = 0;
                List <PrescriptionDetail> lstDetail = new List <PrescriptionDetail>( );
                for (int j = 0; j < remanentPrescriptions[i].PresDetails.Length; j++)
                {
                    remanentPrescriptions[i].PresDetails[j].DetailId = 0;
                    if (remanentPrescriptions[i].PresDetails[j].Tolal_Fee != 0)
                    {
                        lstDetail.Add(remanentPrescriptions[i].PresDetails[j]);
                    }
                }
                remanentPrescriptions[i].Modified  = true;
                remanentPrescriptions[i].DocPresId = 0;
                if (lstDetail.Count > 0)
                {
                    remanentPrescriptions[i].PresDetails = lstDetail.ToArray( );
                    lstPrescription.Add(remanentPrescriptions[i]);
                }
            }
            remanentPrescriptions = lstPrescription.ToArray( );
            if (remanentPrescriptions.Length == 0)
            {
                remanentPrescriptions = null;
            }


            ChargeControl chargeController = new ChargeControl(currentPatient, _EmployeeID);

            try
            {
                decimal newcost      = 0;
                decimal newmoneypay  = 0;
                decimal newpos       = 0;
                decimal newfoverpay  = 0;
                decimal newtally     = 0;
                decimal invoiceCount = 0;
                if (chargeController.Refundment(currentInvoice, remanentPrescriptions, returnedDocPresIdList))
                {
                    if (remanentPrescriptions != null)
                    {
                        if (chargeController.SavePrescription(remanentPrescriptions))
                        {
                            if (MessageBox.Show("部分退费需要重新补打发票收据,请确认发票是否已经准备就绪!", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                            {
                                MessageBox.Show("用户已取消操作,需要重新收费的处方还未收费,请转到收费窗口继续收费!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                ReturnPatient      = currentPatient;
                                HasPresNeedBalance = true;
                                return;
                            }

                            ChargeInfo[] chargeInfos = chargeController.Budget(remanentPrescriptions);
                            #region 合计结算信息并显示给用户
                            //累计结算信息
                            HIS.MZ_BLL.ChargeInfo totalChargeInfo = new HIS.MZ_BLL.ChargeInfo( );
                            for (int i = 0; i < chargeInfos.Length; i++)
                            {
                                totalChargeInfo.TotalFee   += chargeInfos[i].TotalFee;
                                totalChargeInfo.FavorFee   += chargeInfos[i].FavorFee;
                                totalChargeInfo.SelfFee    += chargeInfos[i].SelfFee;
                                totalChargeInfo.VillageFee += chargeInfos[i].VillageFee;
                            }

                            //向用户展示结算信息
                            FrmChargeInfo frmChargeInfo = new FrmChargeInfo(totalChargeInfo, true);
                            frmChargeInfo.ShowDialog( );

                            chargeController.SetChargeInfoPay(ref chargeInfos, frmChargeInfo.ReturnChargeInfo.VillageFee,
                                                              frmChargeInfo.ReturnChargeInfo.PosFee,
                                                              frmChargeInfo.ReturnChargeInfo.CashFee, frmChargeInfo.ReturnChargeInfo.SelfTally);

                            #endregion
                            Invoice[] invoices;
                            chargeController.Charge(chargeInfos, remanentPrescriptions, out invoices);

                            PrintController.PrintChargeInvoice(invoices);
                            invoiceCount = invoices.Length;
                            for (int i = 0; i < invoices.Length; i++)
                            {
                                newcost     += invoices[i].TotalPay;
                                newmoneypay += invoices[i].CashPay;
                                newpos      += invoices[i].PosPay;
                                newfoverpay += invoices[i].FavorPay;
                                newtally    += invoices[i].VillagePay;
                            }
                        }
                    }

                    decimal returncost     = currentInvoice.TotalPay - newcost;
                    decimal returnmoneypay = currentInvoice.CashPay - newmoneypay;
                    decimal returnpos      = currentInvoice.PosPay - newpos;
                    decimal returnfoverpay = currentInvoice.FavorPay - newfoverpay;
                    decimal returntally    = currentInvoice.VillagePay - newtally;
                    GWMHIS.BussinessLogicLayer.Forms.GwmMessageBox.Show("本次操作完成!\r\n需要退病人金额:" + returncost + "元,其中:" +
                                                                        "\r\n退 现 金:" + returnmoneypay + "元" +
                                                                        "\r\n退 POS  :" + returnpos + "元" +
                                                                        "\r\n退 优 惠:" + returnfoverpay + "元" +
                                                                        "\r\n退 记 账:" + returntally + "元" +
                                                                        "\r\n\r\n新打发票:" + invoiceCount + "张" +
                                                                        "\r\n总 金 额:" + newcost + "元",
                                                                        (new Font("宋体", 15F)), Color.Red, "退费成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception err)
            {
                MessageBox.Show("退费失败!\r\n可能的原因;+\r\n" + err.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }