예제 #1
0
 /// <summary>
 /// 计算调整金额
 /// </summary>
 /// <param name="adjOrder">调价单明细</param>
 /// <param name="belongSystem">所属系统(药房还是药库)</param>
 private void ComputeAdjFee(YP_AdjOrder adjOrder, string belongSystem)
 {
     if (belongSystem == ConfigManager.YF_SYSTEM)
     {
         int modNum = Convert.ToInt32(adjOrder.AdjNum) % Convert.ToInt32(adjOrder.UnitNum);
         if (modNum != 0)
         {
             adjOrder.AdjRetailFee = 0;
             adjOrder.AdjTradeFee  = 0;
             decimal packNum = (adjOrder.AdjNum - modNum) / adjOrder.UnitNum;
             adjOrder.AdjRetailFee += (adjOrder.NewRetailPrice - adjOrder.OldRetailPrice) * packNum;
             adjOrder.AdjRetailFee += (Convert.ToDecimal(modNum) / Convert.ToDecimal(adjOrder.UnitNum))
                                      * (adjOrder.NewRetailPrice - adjOrder.OldRetailPrice);
             adjOrder.AdjTradeFee += (adjOrder.NewTradePrice - adjOrder.OldTradePrice) * packNum;
             adjOrder.AdjTradeFee += (Convert.ToDecimal(modNum) / Convert.ToDecimal(adjOrder.UnitNum))
                                     * (adjOrder.NewTradePrice - adjOrder.OldTradePrice);
         }
         else
         {
             adjOrder.AdjRetailFee = (adjOrder.NewRetailPrice - adjOrder.OldRetailPrice) * adjOrder.AdjNum / adjOrder.UnitNum;
             adjOrder.AdjTradeFee  = (adjOrder.NewTradePrice - adjOrder.OldTradePrice) * adjOrder.AdjNum / adjOrder.UnitNum;
         }
     }
     else
     {
         adjOrder.AdjRetailFee = (adjOrder.NewRetailPrice - adjOrder.OldRetailPrice) * adjOrder.AdjNum;
         adjOrder.AdjTradeFee  = (adjOrder.NewTradePrice - adjOrder.OldTradePrice) * adjOrder.AdjNum;
     }
 }
예제 #2
0
        /// <summary>
        /// 根据单据信息构造台帐信息
        /// </summary>
        /// <param name="billMaster">单据头</param>
        /// <param name="billOrder">单据明细信息</param>
        /// <param name="storeNum">库存处理后药品库存信息</param>
        /// <param name="accountYear">会计年份</param>
        /// <param name="accountMonth">会计月份</param>
        /// <param name="smallUnit">基本单位</param>
        /// <returns>台帐信息</returns>
        override protected YP_Account BuildAccount(BillMaster billMaster, BillOrder billOrder, decimal storeNum,
                                                   int accountYear, int accountMonth, int smallUnit)
        {
            YP_AdjMaster master  = (YP_AdjMaster)billMaster;
            YP_AdjOrder  order   = (YP_AdjOrder)billOrder;
            YP_Account   account = new YP_Account();

            account.AccountYear  = accountYear;
            account.AccountMonth = accountMonth;
            account.AccountType  = 2;
            account.Balance_Flag = 0;
            account.BillNum      = master.BillNum;
            account.OpType       = master.OpType;
            account.DeptID       = master.DeptID;
            account.LeastUnit    = smallUnit;
            account.UnitNum      = order.UnitNum;
            account.MakerDicID   = order.MakerDicID;
            account.RegTime      = master.ExeTime;
            account.RetailPrice  = order.NewRetailPrice;
            account.StockPrice   = order.NewTradePrice;
            account.OrderID      = order.OrderAdjPriceID;
            if (order.AdjRetailFee > 0)
            {
                account.LenderFee = Math.Abs(order.AdjRetailFee);
            }
            else
            {
                account.DebitFee = Math.Abs(order.AdjRetailFee);
            }
            account.OverNum = storeNum;
            return(account);
        }
예제 #3
0
 private List <BillOrder> GetListOrder()
 {
     if (_orederDt.Rows.Count <= 0)
     {
         return(null);
     }
     else
     {
         List <BillOrder> listOrder = new List <BillOrder>();
         for (int index = 0; index < _orederDt.Rows.Count; index++)
         {
             YP_AdjOrder order = new YP_AdjOrder();
             HIS.SYSTEM.PubicBaseClasses.ApiFunction.DataTableToObject(_orederDt, index, order);
             listOrder.Add(order);
         }
         return(listOrder);
     }
 }
예제 #4
0
        /// <summary>
        /// 构造调价单明细
        /// </summary>
        /// <param name="deptId">药剂科室ID</param>
        /// <param name="master">对应调价单表头</param>
        /// <returns>调价单明细</returns>
        public override BillOrder BuildNewoder(long deptId, BillMaster master)
        {
            YP_AdjOrder adjOrder = new YP_AdjOrder();

            try
            {
                YP_AdjMaster adjMaster = (YP_AdjMaster)master;
                adjOrder.DeptID          = adjMaster.DeptID;
                adjOrder.MasterAdjPrice  = adjMaster;
                adjOrder.MakerDic        = new YP_MakerDic();
                adjOrder.LeastUnitEntity = new YP_UnitDic();
                return(adjOrder);
            }
            catch (Exception error)
            {
                throw error;
            }
        }
예제 #5
0
        /// <summary>
        /// 添加调价明细对象到调价明细信息表中
        /// </summary>
        /// <param name="order">调价明细对象</param>
        /// <param name="orderDt">调价明细信息表</param>
        public static void AddOrderToDT(YP_AdjOrder order, DataTable orderDt)
        {
            try
            {
                DataRow newRow = orderDt.NewRow();
                AdjOrderToDataRow(newRow, order);
                //判断新增明细药品是否已经存在于入库单明细表中
                for (int index = 0; index < orderDt.Rows.Count; index++)
                {
                    if (Convert.ToInt32(orderDt.Rows[index]["MAKERDICID"]) == Convert.ToInt32(newRow["MAKERDICID"]))
                    {
                        throw new Exception("该药品已经存在于明细中,无法添加....");
                    }
                }

                orderDt.Rows.Add(newRow);
            }
            catch (Exception error)
            {
                throw error;
            }
        }
예제 #6
0
 private void btnAddOrder_Click(object sender, EventArgs e)
 {
     try
     {
         if (CheckSaveOrder() == true)
         {
             txtNewRetail_TextChanged(null, null);
             txtNewTrade_TextChanged(null, null);
             AddOrderToDT(_currentOrder, _orederDt);
             ClearOrderTextbox();
             _currentOrder = (YP_AdjOrder)(_billProcessor.BuildNewoder(0, _adjMaster));
             //设置金额初始值
             this.txtNewRetail.Text = "0.00";
             this.txtNewTrade.Text  = "0.00";
             this.txtDgCode.Focus();
         }
     }
     catch (Exception error)
     {
         MessageBox.Show(error.Message);
     }
 }
예제 #7
0
 /// <summary>
 /// 将调价明细对象转成调价明细表中行记录
 /// </summary>
 /// <param name="dR">明细表行记录对象</param>
 /// <param name="adjOrder">调价明细对象</param>
 public static void AdjOrderToDataRow(DataRow dR, YP_AdjOrder adjOrder)
 {
     try
     {
         if (dR == null || adjOrder == null)
         {
             return;
         }
         else
         {
             dR["AdjNum"]           = adjOrder.AdjNum;
             dR["AdjRetailFee"]     = adjOrder.AdjRetailFee;
             dR["AdjTradeFee"]      = adjOrder.AdjTradeFee;
             dR["Audit_Flag"]       = adjOrder.Audit_Flag;
             dR["BillNum"]          = adjOrder.BillNum;
             dR["DeptID"]           = adjOrder.DeptID;
             dR["LeastUnit"]        = adjOrder.LeastUnit;
             dR["MakerDicID"]       = adjOrder.MakerDicID;
             dR["MasterIAdjPriceD"] = adjOrder.MasterIAdjPriceD;
             dR["NewRetailPrice"]   = adjOrder.NewRetailPrice;
             dR["NewTradePrice"]    = adjOrder.NewTradePrice;
             dR["OldRetailPrice"]   = adjOrder.OldRetailPrice;
             dR["OldTradePrice"]    = adjOrder.OldTradePrice;
             dR["OrderAdjPriceID"]  = adjOrder.OrderAdjPriceID;
             dR["UnitNum"]          = adjOrder.UnitNum;
             dR["SPEC"]             = adjOrder.MakerDic.DrugInfo.spec;
             dR["CHEMNAME"]         = adjOrder.MakerDic.DrugInfo.chemname;
             dR["UNITNAME"]         = adjOrder.LeastUnitEntity.UnitName;
             dR["PRODUCTNAME"]      = adjOrder.MakerDic.DrugInfo.productname;
             dR["AdjDif"]           = adjOrder.NewRetailPrice - adjOrder.OldRetailPrice;
         }
         return;
     }
     catch (Exception error)
     {
         throw error;
     }
 }
예제 #8
0
 private void FrmAdjOrder_Load(object sender, EventArgs e)
 {
     try
     {
         if (_belongSystem == ConfigManager.YF_SYSTEM)
         {
             _billQuery     = BillFactory.GetQuery(ConfigManager.OP_YF_ADJPRICE);
             _billProcessor = BillFactory.GetProcessor(ConfigManager.OP_YF_ADJPRICE);
         }
         else
         {
             _billQuery     = BillFactory.GetQuery(ConfigManager.OP_YK_ADJPRICE);
             _billProcessor = BillFactory.GetProcessor(ConfigManager.OP_YK_ADJPRICE);
         }
         if (_currentState == ADD)
         {
             this._currentOrder = (YP_AdjOrder)(_billProcessor.BuildNewoder(0, _adjMaster));
             LoadData();
             this.txtNewRetail.Text = "0.00";
             this.txtNewTrade.Text  = "0.00";
             ShowMaster();
             this.txtAdjCode.Focus();
             this.txtAdjCode.SelectAll();
         }
         else
         {
             LoadData();
             _currentOrder = (YP_AdjOrder)(_billProcessor.BuildNewoder(0, _adjMaster));
             dgrdAdjOrder_CurrentCellChanged(null, null);
             ShowInQuery();
             ShowMaster();
         }
     }
     catch (Exception error)
     {
         MessageBox.Show(error.Message);
     }
 }
예제 #9
0
        private void tsrbtnNew_Click(object sender, EventArgs e)
        {
            try
            {
                //生成一个新的单据表头
                _adjMaster = (YP_AdjMaster)(_billProcessor.BuildNewMaster(_adjMaster.DeptID, _adjMaster.RegPeople));

                _currentOrder = (YP_AdjOrder)(_billProcessor.BuildNewoder(0, _adjMaster));
                //加载数据
                LoadData();
                ClearOrderTextbox();
                ShowMaster();
                //设置金额初始值
                this.txtNewTrade.Text  = "0.00";
                this.txtNewRetail.Text = "0.00";
                this.txtAdjCode.Focus();
                _currentState = ADD;
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message);
            }
        }
예제 #10
0
 /// <summary>
 /// 将调价明细信息表中的行记录转成调价明细
 /// </summary>
 /// <param name="dR">调价明细信息表</param>
 /// <param name="adjOrder">调价明细对象</param>
 public static void DataRowToAdjOrder(DataRow dR, YP_AdjOrder adjOrder)
 {
     try
     {
         if (dR == null || adjOrder == null)
         {
             return;
         }
         else
         {
             adjOrder.AdjNum                        = Convert.ToDecimal(dR["AdjNum"]);         //调价数量
             adjOrder.AdjRetailFee                  = Convert.ToDecimal(dR["AdjRetailFee"]);   //调整零售金额
             adjOrder.AdjTradeFee                   = Convert.ToDecimal(dR["AdjTradeFee"]);    //调整批发金额
             adjOrder.Audit_Flag                    = Convert.ToInt32(dR["Audit_Flag"]);       //审核标识
             adjOrder.BillNum                       = Convert.ToInt32(dR["BillNum"]);          //单据号
             adjOrder.DeptID                        = Convert.ToInt32(dR["DeptID"]);           //科室ID
             adjOrder.LeastUnit                     = Convert.ToInt32(dR["LeastUnit"]);        //单位
             adjOrder.MakerDicID                    = Convert.ToInt32(dR["MakerDicID"]);       //厂家典标识ID
             adjOrder.MasterIAdjPriceD              = Convert.ToInt32(dR["MasterIAdjPriceD"]); //调价表头ID
             adjOrder.NewRetailPrice                = Convert.ToDecimal(dR["NewRetailPrice"]); //新零售价
             adjOrder.NewTradePrice                 = Convert.ToDecimal(dR["NewTradePrice"]);  //新批发价
             adjOrder.OldRetailPrice                = Convert.ToDecimal(dR["OldRetailPrice"]); //老零售价
             adjOrder.OldTradePrice                 = Convert.ToDecimal(dR["OldTradePrice"]);  //老批发价
             adjOrder.OrderAdjPriceID               = Convert.ToInt32(dR["OrderAdjPriceID"]);  //调价明细ID
             adjOrder.UnitNum                       = Convert.ToInt32(dR["UnitNum"]);          //单位比例
             adjOrder.MakerDic.DrugInfo.spec        = dR["SPEC"].ToString();                   //药品规格
             adjOrder.MakerDic.DrugInfo.chemname    = dR["CHEMNAME"].ToString();               //药品名称
             adjOrder.LeastUnitEntity.UnitName      = dR["UNITNAME"].ToString();               //单位名称
             adjOrder.MakerDic.DrugInfo.productname = dR["PRODUCTNAME"].ToString();            //厂家名称
         }
         return;
     }
     catch (Exception error)
     {
         throw error;
     }
 }
예제 #11
0
 private void btnDelOrder_Click(object sender, EventArgs e)
 {
     try
     {
         if (MessageBox.Show("您确认要删除该明细么?", "删除提示", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
         {
             return;
         }
         if (_currentOrder == null || _orederDt.Rows.Count == 0 || dgrdAdjOrder.CurrentCell == null)
         {
             MessageBox.Show("没有选中数据");
             return;
         }
         else
         {
             _orederDt.Rows.RemoveAt(dgrdAdjOrder.CurrentCell.RowIndex);
             if (dgrdAdjOrder.CurrentCell == null)
             {
                 _currentOrder = (YP_AdjOrder)(_billProcessor.BuildNewoder(0, _adjMaster));
                 ClearOrderTextbox();
             }
             else if (dgrdAdjOrder.CurrentCell.RowIndex > _orederDt.Rows.Count - 1)
             {
                 dgrdAdjOrder.CurrentCell = dgrdAdjOrder[dgrdAdjOrder.CurrentCell.ColumnIndex, dgrdAdjOrder.CurrentCell.RowIndex - 1];
             }
             else
             {
                 DataRowToAdjOrder(_orederDt.Rows[dgrdAdjOrder.CurrentCell.RowIndex], _currentOrder);
                 ShowCurrentOrder();
             }
         }
     }
     catch (Exception error)
     {
         MessageBox.Show(error.Message);
     }
 }
예제 #12
0
        /// <summary>
        /// 保存调价单
        /// </summary>
        /// <param name="billMaster">调价单表头</param>
        /// <param name="listOrder">调价单明细列表</param>
        /// <param name="deptId">药剂科室ID</param>
        public override void SaveBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId)
        {
            try
            {
                int          count     = 0;
                YP_AdjMaster masterAdj = (YP_AdjMaster)billMaster;
                oleDb.BeginTransaction();
                //声明操作对象
                YP_AdjOrder    adjOrder = new YP_AdjOrder();
                HIS.DAL.YP_Dal ypDal    = new YP_Dal();
                ypDal._oleDb = oleDb;
                List <YP_DeptDic> deptList = new List <YP_DeptDic>();
                //获取调价药剂科室
                deptList = BindEntity <HIS.Model.YP_DeptDic> .CreateInstanceDAL(oleDb).GetListArray("");

                foreach (YP_DeptDic dept in deptList)
                {
                    count = 0;
                    if (dept.DeptType1 == "药房")
                    {
                        if (dept.Use_Flag == 1)
                        {
                            masterAdj.OpType = ConfigManager.OP_YF_ADJPRICE;
                        }
                    }
                    else
                    {
                        if (dept.Use_Flag == 1)
                        {
                            masterAdj.OpType = ConfigManager.OP_YK_ADJPRICE;
                        }
                    }
                    masterAdj.Over_Flag = 0;
                    masterAdj.AdjCode   = GWIString.FilterSpecial(masterAdj.AdjCode);
                    masterAdj.Remark    = GWIString.FilterSpecial(masterAdj.Remark);
                    masterAdj.DeptID    = dept.DeptID;
                    BindEntity <HIS.Model.YP_AdjMaster> .CreateInstanceDAL(oleDb).Add(masterAdj);

                    foreach (BillOrder order in listOrder)
                    {
                        adjOrder = (YP_AdjOrder)order;
                        adjOrder.MasterIAdjPriceD = masterAdj.MasterAdjPriceID;
                        adjOrder.DeptID           = masterAdj.DeptID;
                        string belongSystem = (dept.DeptType1 == "药房" ? ConfigManager.YF_SYSTEM : ConfigManager.YK_SYSTEM);
                        if (StoreFactory.GetQuery(belongSystem).QueryNum(adjOrder.MakerDicID, adjOrder.DeptID) < 0)
                        {
                            continue;
                        }
                        count++;
                        BindEntity <HIS.Model.YP_AdjOrder> .CreateInstanceDAL(oleDb).Add(adjOrder);
                    }
                    if (count > 0)
                    {
                        masterAdj.BillNum = (ypDal.YP_Bill_GetBillNum(masterAdj.OpType, dept.DeptID)).BillNum;
                        if (masterAdj.BillNum == 0)
                        {
                            throw new Exception("药剂科室设置错误,请确认当前科室是药剂科室");
                        }
                        BindEntity <HIS.Model.YP_AdjMaster> .CreateInstanceDAL(oleDb).Update(masterAdj);

                        AuditBill(masterAdj, (long)(masterAdj.RegPeople), (long)(masterAdj.DeptID));
                    }
                    else
                    {
                        string strwhere = Tables.yp_adjmaster.DEPTID + oleDb.EuqalTo() + masterAdj.DeptID
                                          + oleDb.And() + Tables.yp_adjmaster.MASTERADJPRICEID + oleDb.EuqalTo() + masterAdj.MasterAdjPriceID;
                        BindEntity <HIS.Model.YP_AdjMaster> .CreateInstanceDAL(oleDb).Delete(strwhere);

                        strwhere = Tables.yp_adjorder.DEPTID + oleDb.EuqalTo() + masterAdj.DeptID
                                   + oleDb.And() + Tables.yp_adjorder.MASTERIADJPRICED + oleDb.EuqalTo() + masterAdj.MasterAdjPriceID;
                        BindEntity <YP_AdjOrder> .CreateInstanceDAL(oleDb).Delete(strwhere);
                    }
                }
                oleDb.CommitTransaction();
            }
            catch (Exception error)
            {
                oleDb.RollbackTransaction();
                throw error;
            }
        }