public override Hashtable ChangeStoreNum(BillMaster billMaster, List <BillOrder> orderList) { try { Hashtable storeNumHash = new Hashtable(); foreach (BillOrder order in orderList) { YP_StoreNum storeNum = new YP_StoreNum(); YP_OutOrder orderOutstore = (YP_OutOrder)order; storeNum.smallUnit = orderOutstore.LeastUnit; storeNum.makerDicId = orderOutstore.MakerDicID; decimal reduceNum = orderOutstore.OutNum; decimal rtn = ReduceStoreNum(orderOutstore.MakerDicID, orderOutstore.DeptID, reduceNum); if (rtn != -1) { storeNum.storeNum = rtn; storeNum.queryKey = storeNum.makerDicId.ToString() + orderOutstore.ProductNum; } else { string drugName = DrugBaseDataBll.GetDurgName(storeNum.makerDicId); throw new Exception("[" + drugName + "]" + "出库数量过多,审核失败"); } storeNumHash.Add(storeNum.queryKey, storeNum); } BatchProcessor.ReduceBatchNum(orderList); return(storeNumHash); } catch (Exception error) { throw error; } }
//add 平级药房调拨 张运辉 [20100531] /// <summary> /// 将药房申请入库单明细转换为药库出库单明细 /// </summary> /// <param name="inOrder">入库单明细</param> /// <param name="outMaster">药库出库单表头</param> /// <returns>药库出库单明细</returns> private YP_OutOrder ChangeInorderToOutorder(YP_InOrder inOrder) { YP_OutOrder outOrder = new YP_OutOrder(); outOrder.MakerDic = new YP_MakerDic(); outOrder.LeastUnitEntity = new YP_UnitDic(); outOrder.Audit_Flag = 0; outOrder.LeastUnit = inOrder.LeastUnit; outOrder.MakerDicID = inOrder.MakerDicID; //outOrder.MasterOutStorageID = outMaster.MasterOutStorageID; outOrder.OutNum = inOrder.InNum; outOrder.ProductNum = inOrder.BatchNum; outOrder.RecScale = inOrder.RecScale; outOrder.Remark = inOrder.Remark; outOrder.RetailFee = inOrder.RetailFee; outOrder.RetailPrice = inOrder.RetailPrice; outOrder.TradeFee = inOrder.TradeFee; outOrder.TradePrice = inOrder.TradePrice; outOrder.UnitNum = inOrder.UnitNum; outOrder.ValidityDate = inOrder.ValidityDate; outOrder.DeptID = (int)_currentDeptId; outOrder.OutDeptID = inOrder.DeptID; return(outOrder); }
public override Hashtable ChangeStoreNum(BillMaster billMaster, List <BillOrder> orderList) { try { Hashtable storeNumHash = new Hashtable(); foreach (BillOrder order in orderList) { YP_StoreNum storeNum = new YP_StoreNum(); YP_OutOrder orderOutstore = (YP_OutOrder)order; storeNum.smallUnit = ypDal.Unit_GetSmallUnit(orderOutstore.MakerDicID); storeNum.makerDicId = orderOutstore.MakerDicID; decimal reduceNum = orderOutstore.OutNum * orderOutstore.UnitNum; decimal rtn = ReduceStoreNum(orderOutstore.MakerDicID, orderOutstore.DeptID, reduceNum); if (rtn != -1) { storeNum.storeNum = rtn; } else { throw new Exception("出库数量过多,审核失败"); } storeNumHash.Add(storeNum.makerDicId, storeNum); } return(storeNumHash); } catch (Exception error) { throw error; } }
/// <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_OutMaster master = (YP_OutMaster)billMaster; YP_OutOrder order = (YP_OutOrder)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.AuditTime; account.RetailPrice = order.RetailPrice; account.StockPrice = order.TradePrice; account.OrderID = order.OutStorageID; account.DebitFee = order.RetailFee; account.OverNum = storeNum; account.BalanceFee = 0; return(account); }
private void tsrbtnNew_Click(object sender, EventArgs e) { try { //生成一个新的单据表头 if (_opType == ConfigManager.OP_YF_PJDB)//平级调拨 张运辉 { _currentMaster = ChangeInmasterToOutmaster(((YP_InMaster)(_billProcessor.BuildNewMaster(_currentDeptId, _currentUserId)))); _currentMaster.OpType = _opType; _currentOrder = ChangeInorderToOutorder((YP_InOrder)(_billProcessor.BuildNewoder(_currentDeptId, ChangeOutmasterToIntmaster(_currentMaster)))); } else { _currentMaster = (YP_OutMaster)(_billProcessor.BuildNewMaster(_currentDeptId, _currentUserId)); _currentMaster.OpType = _opType; _currentOrder = (YP_OutOrder)(_billProcessor.BuildNewoder(_currentDeptId, _currentMaster)); } //加载数据 _outOrderDt = _billQuery.LoadOrder(_currentMaster); this.dgrdOrderInfo.DataSource = _outOrderDt; ClearOrderTextbox(); ShowCurrentMaster(); //设置金额初始值 this.cobOutDate.Focus(); _currentState = ADD; } catch (Exception error) { MessageBox.Show(error.Message); } }
private void btnDelOrder_Click(object sender, EventArgs e) { try { if (_currentOrder == null || _outOrderDt.Rows.Count == 0 || dgrdOrderInfo.CurrentCell == null) { MessageBox.Show("没有选中数据"); return; } else { _outOrderDt.Rows.RemoveAt(dgrdOrderInfo.CurrentCell.RowIndex); if (dgrdOrderInfo.CurrentCell == null) { _currentOrder = (YP_OutOrder)(_billProcessor.BuildNewoder(_currentDeptId, _currentMaster)); ClearOrderTextbox(); } else if (dgrdOrderInfo.CurrentCell.RowIndex > _outOrderDt.Rows.Count - 1) { dgrdOrderInfo.CurrentCell = dgrdOrderInfo[dgrdOrderInfo.CurrentCell.ColumnIndex, dgrdOrderInfo.CurrentCell.RowIndex - 1]; } else { DataRowToOutorder(_outOrderDt.Rows[dgrdOrderInfo.CurrentCell.RowIndex], _currentOrder); ShowCurrentOrder(); } } MessageBox.Show("删除成功"); } catch (Exception error) { MessageBox.Show(error.Message); } }
private void btnAddOrder_Click(object sender, EventArgs e) { try { if (CheckSaveOrder() == true) { txtOutNum_TextChanged(null, null); AddOrderToDT(_currentOrder, _outOrderDt); ClearOrderTextbox(); if (_opType == ConfigManager.OP_YF_PJDB) { _currentOrder = ChangeInorderToOutorder((YP_InOrder)(_billProcessor.BuildNewoder((int)_currentDeptId, ChangeOutmasterToIntmaster(_currentMaster)))); } else { _currentOrder = (YP_OutOrder)(_billProcessor.BuildNewoder((int)_currentDeptId, _currentMaster)); } this.txtDgCode.Focus(); } } catch (Exception error) { MessageBox.Show(error.Message); } }
/// <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> protected override YP_Account BuildAccount(BillMaster billMaster, BillOrder billOrder, decimal storeNum, int accountYear, int accountMonth, int smallUnit) { YP_OutOrder order = (YP_OutOrder)billOrder; YP_Account account = base.BuildAccount(billMaster, billOrder, storeNum, accountYear, accountMonth, smallUnit); account.DebitNum = order.OutNum; return(account); }
/// <summary> /// 从出库明细信息表中读取出库明细对象 /// </summary> /// <param name="dtTable"> /// 出库明细信息表 /// </param> /// <param name="index"> /// 指定行记录索引 /// </param> /// <returns> /// 出库明细对象 /// </returns> private YP_OutOrder GetOutOrderFromDt(DataTable dtTable, int index) { try { if (dtTable.Rows.Count < index || dtTable.Rows.Count == 0) { return(null); } YP_OutOrder currentOutorder = new YP_OutOrder(); ApiFunction.DataTableToObject(dtTable, index, currentOutorder); return(currentOutorder); } catch (Exception error) { throw error; } }
/// <summary> /// 创建出库单明细 /// </summary> /// <param name="deptId">药剂科室ID</param> /// <param name="master">出库单表头</param> /// <returns>出库单明细</returns> public override HIS.Model.BillOrder BuildNewoder(long deptId, HIS.Model.BillMaster master) { YP_OutOrder outStore = new YP_OutOrder(); try { outStore.DeptID = Convert.ToInt32(deptId); outStore.MasterOutStorage = (YP_OutMaster)master; outStore.MakerDic = new YP_MakerDic(); outStore.LeastUnitEntity = new YP_UnitDic(); return(outStore); } catch (Exception error) { throw error; } }
private void FrmOutOrder_Load(object sender, EventArgs e) { txtApplyPeople.Text = new User(_currentUserId).Name; if (_opType == ConfigManager.OP_YK_REPORTLOSS || _opType == ConfigManager.OP_YF_REPORTLOSS) { txtOpType.Text = "药品报损"; txtOutDept.Text = "无领药科室"; txtOutDept.ReadOnly = true; txtApplyPeople.ReadOnly = true; txtByOptype.ReadOnly = false; } else { this.txtOpType.Text = "科室领药"; txtByOptype.ReadOnly = true; } if (_belongSystem == ConfigManager.YK_SYSTEM) { _billQuery = BillFactory.GetQuery(ConfigManager.DEF_YK_OUT); } else if (_belongSystem == ConfigManager.YF_SYSTEM) { _billQuery = BillFactory.GetQuery(ConfigManager.DEF_YF_OUT); txtBatchNum.ReadOnly = true; } _billProcessor = BillFactory.GetProcessor(_opType); //如果是添加单据状态 if (_currentState == ADD) { //生成一个新的单据表头 _currentMaster = (YP_OutMaster)(_billProcessor.BuildNewMaster(_currentDeptId, _currentUserId)); _currentMaster.OpType = _opType; _currentOrder = (YP_OutOrder)(_billProcessor.BuildNewoder(_currentDeptId, _currentMaster)); LoadData(); } else if (_currentState == UPDATE) { _currentOrder = (YP_OutOrder)(_billProcessor.BuildNewoder(_currentDeptId, _currentMaster)); LoadData(); dgrdOrderInfo_CurrentCellChanged(null, null); } //显示当前表头信息 ShowCurrentMaster(); }
/// <summary> /// 减少药品批次 /// </summary> /// <param name="orderList">出库单明细链表</param> static public void ReduceBatchNum(List <BillOrder> orderList) { string strWhere = ""; YP_Batch reduceBatch; foreach (BillOrder billOrder in orderList) { YP_OutOrder order = (YP_OutOrder)billOrder; //获取出库单选择的出库明细对应的批次 strWhere = BLL.Tables.yk_batch.BATCHNUM + oleDb.EuqalTo() + "'" + order.ProductNum + "'" + oleDb.And() + BLL.Tables.yk_batch.MAKERDICID + oleDb.EuqalTo() + order.MakerDicID + oleDb.And() + BLL.Tables.yk_batch.DEPTID + oleDb.EuqalTo() + order.DeptID; reduceBatch = BindEntity <YP_Batch> .CreateInstanceDAL(oleDb, BLL.Tables.YK_BATCH).GetModel(strWhere); if (reduceBatch != null) { if (reduceBatch.Currentnum - order.OutNum > 0) { reduceBatch.Currentnum = reduceBatch.Currentnum - order.OutNum; reduceBatch.Del_flag = 0; BindEntity <YP_Batch> .CreateInstanceDAL(oleDb, BLL.Tables.YK_BATCH).Update(reduceBatch); } else if (reduceBatch.Currentnum - order.OutNum == 0) { reduceBatch.Currentnum = 0; reduceBatch.Del_flag = 1; BindEntity <YP_Batch> .CreateInstanceDAL(oleDb, BLL.Tables.YK_BATCH).Update(reduceBatch); } else { string strName = DrugBaseDataBll.GetDurgName(reduceBatch.Makerdicid); throw new Exception("[" + strName + "]" + "该药品申请批次数量大于药库批次库存数量,请修改入库申请单"); } } else { string drugName = DrugBaseDataBll.GetDurgName(order.MakerDicID); throw new Exception("[" + drugName + "]" + "药品批次输入错误。。。。。。"); } } }
/// <summary> /// 将出库明细信息表中的行记录转成出库明细对象 /// </summary> /// <param name="dR">行对象</param> /// <param name="outOrder">出库明细对象</param> private void DataRowToOutorder(DataRow dR, YP_OutOrder outOrder) { try { if (dR == null || outOrder == null) { return; } else { outOrder.Audit_Flag = Convert.ToInt32(dR["Audit_Flag"]); //审核标识 outOrder.BillNum = Convert.ToInt32(dR["BillNum"]); //单据号 outOrder.DeptID = Convert.ToInt32(dR["DeptID"]); //科室ID outOrder.OutNum = Convert.ToDecimal(dR["OutNum"]); //出库数量 outOrder.OutStorageID = Convert.ToInt32(dR["OutStorageID"]); //明细ID outOrder.LeastUnit = Convert.ToInt32(dR["LeastUnit"]); //出库单位 outOrder.MakerDicID = Convert.ToInt32(dR["MakerDicID"]); //药品厂家典ID outOrder.MasterOutStorageID = Convert.ToInt32(dR["MasterOutStorageID"]); //出库表头ID outOrder.RecScale = Convert.ToDecimal(dR["RecScale"]); //扣率 outOrder.Remark = dR["Remark"].ToString(); //备注 outOrder.RetailFee = Convert.ToDecimal(dR["RetailFee"]); //零售金额 outOrder.RetailPrice = Convert.ToDecimal(dR["RetailPrice"]); //零售价 outOrder.TradeFee = Convert.ToDecimal(dR["TradeFee"]); //批发金额 outOrder.TradePrice = Convert.ToDecimal(dR["TradePrice"]); //批发价 outOrder.UnitNum = Convert.ToInt32(dR["UnitNum"]); //单位比例 outOrder.ValidityDate = Convert.ToDateTime(dR["ValidityDate"]); //到效日期 outOrder.MakerDic.DrugInfo.spec = dR["SPEC"].ToString(); //规格 outOrder.MakerDic.DrugInfo.chemname = dR["CHEMNAME"].ToString(); //品名 outOrder.LeastUnitEntity.UnitName = dR["UNITNAME"].ToString(); //单位名称 outOrder.MakerDic.DrugInfo.productname = dR["PRODUCTNAME"].ToString(); //厂家名称 outOrder.OutReason = dR["OutReason"].ToString(); //出库原因 outOrder.ProductNum = dR["ProductNum"].ToString(); //批次号 } return; } catch (Exception error) { throw error; } }
/// <summary> /// 将出库明细对象转成出库信息表中行记录 /// </summary> /// <param name="dR">数据表记录行对象</param> /// <param name="outOrder">出库明细对象</param> private void OutorderToDataRow(DataRow dR, YP_OutOrder outOrder) { try { if (dR == null || outOrder == null) { return; } else { dR["Audit_Flag"] = outOrder.Audit_Flag; dR["BillNum"] = outOrder.BillNum; dR["DeptID"] = outOrder.DeptID; dR["OutNum"] = outOrder.OutNum; dR["OutStorageID"] = outOrder.OutStorageID; dR["LeastUnit"] = outOrder.LeastUnit; dR["MakerDicID"] = outOrder.MakerDicID; dR["MasterOutStorageID"] = outOrder.MasterOutStorageID; dR["RecScale"] = outOrder.RecScale; dR["Remark"] = outOrder.Remark; dR["RetailFee"] = outOrder.RetailFee; dR["RetailPrice"] = outOrder.RetailPrice; dR["TradeFee"] = outOrder.TradeFee; dR["TradePrice"] = outOrder.TradePrice; dR["UnitNum"] = outOrder.UnitNum; dR["ValidityDate"] = outOrder.ValidityDate; dR["SPEC"] = outOrder.MakerDic.DrugInfo.spec; dR["CHEMNAME"] = outOrder.MakerDic.DrugInfo.chemname; dR["UNITNAME"] = outOrder.LeastUnitEntity.UnitName; dR["PRODUCTNAME"] = outOrder.MakerDic.DrugInfo.productname; dR["OutReason"] = outOrder.OutReason; dR["ProductNum"] = outOrder.ProductNum;//批次号 } return; } catch (Exception error) { throw error; } }
/// <summary> /// 添加出库明细对象到出库明细信息表中 /// </summary> /// <param name="order"> /// 出库明细对象 /// </param> /// <param name="orderDt"> /// 出库明细信息表 /// </param> private void AddOrderToDT(YP_OutOrder order, DataTable orderDt) { try { DataRow newRow = orderDt.NewRow(); //出库明细对象转成明细信息表中行记录 OutorderToDataRow(newRow, order); for (int index = 0; index < orderDt.Rows.Count; index++) { if ((Convert.ToInt32(orderDt.Rows[index]["MAKERDICID"]) == Convert.ToInt32(newRow["MAKERDICID"])) && (orderDt.Rows[index]["PRODUCTNUM"].ToString() == newRow["PRODUCTNUM"].ToString())) { throw new Exception("该药品已经存在于明细中,无法添加....."); } } orderDt.Rows.Add(newRow); } catch (Exception error) { throw error; } }
/// <summary> /// /// </summary> /// <param name="billMaster"></param> /// <param name="listOrder"></param> /// <param name="deptId"></param> public override void UpdateBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId) { try { YP_OutMaster masterOutstore = (YP_OutMaster)billMaster; oleDb.BeginTransaction(); IBaseDAL <YP_OutMaster> masterDao; IBaseDAL <YP_OutOrder> orderDao; YP_OutOrder outStore = new YP_OutOrder(); //声明操作对象 masterDao = BindEntity <YP_OutMaster> .CreateInstanceDAL(oleDb, BLL.Tables.YF_OUTMASTER); orderDao = BindEntity <YP_OutOrder> .CreateInstanceDAL(oleDb, BLL.Tables.YF_OUTORDER); //删除以前的明细信息 orderDao.Delete("MasterOutStorageID" + oleDb.EuqalTo() + masterOutstore.MasterOutStorageID); masterOutstore.TradeFee = 0; masterOutstore.RetailFee = 0; foreach (BillOrder order in listOrder) { //遍历DataTable取出明细记录并设置记录的值 outStore = (YP_OutOrder)order; masterOutstore.TradeFee += outStore.TradeFee; masterOutstore.RetailFee += outStore.RetailFee; outStore.MasterOutStorageID = masterOutstore.MasterOutStorageID; outStore.BillNum = masterOutstore.BillNum; //依次添加明细记录 orderDao.Add(outStore); } masterDao.Update(masterOutstore); oleDb.CommitTransaction(); } catch (Exception error) { oleDb.RollbackTransaction(); throw error; } }
/// <summary> /// /// </summary> /// <param name="billMaster"></param> /// <param name="listOrder"></param> /// <param name="deptId"></param> public override void SaveBill(BillMaster billMaster, List <BillOrder> listOrder, long deptId) { try { YP_OutMaster masterOutstore = (YP_OutMaster)billMaster; oleDb.BeginTransaction(); //声明操作对象 IBaseDAL <YP_OutMaster> masterDao = BindEntity <YP_OutMaster> .CreateInstanceDAL(oleDb, BLL.Tables.YF_OUTMASTER); IBaseDAL <YP_OutOrder> orderDao = BindEntity <YP_OutOrder> .CreateInstanceDAL(oleDb, BLL.Tables.YF_OUTORDER); YP_Dal ypDal = new YP_Dal(); ypDal._oleDb = oleDb; YP_OutOrder outStore = new YP_OutOrder(); int billNum = (ypDal.YP_Bill_GetBillNum(masterOutstore.OpType, deptId)).BillNum; masterOutstore.BillNum = billNum; masterDao.Add(masterOutstore); foreach (BillOrder order in listOrder) { outStore = (YP_OutOrder)order; masterOutstore.RetailFee += outStore.RetailFee; masterOutstore.TradeFee += outStore.TradeFee; masterOutstore.OutFee += outStore.RetailFee; outStore.MasterOutStorageID = masterOutstore.MasterOutStorageID; outStore.BillNum = billNum; //依次添加明细记录 orderDao.Add(outStore); } masterDao.Update(masterOutstore); oleDb.CommitTransaction(); } catch (Exception error) { oleDb.RollbackTransaction(); throw error; } }
/// <summary> /// 根据出库表明细生成出库表明细并添加到数据库中 /// </summary> /// <param name="orderDao">出库表明细数据访问对象</param> /// <param name="inOrder">入库表明细</param> /// <param name="deptId">入库部门ID</param> /// <param name="outMaster">出库表头</param> private void AddYKOutOrder(IBaseDAL <YP_OutOrder> orderDao, YP_InOrder inOrder, long deptId, YP_OutMaster outMaster) { YP_OutOrder outOrder = ChangeInorderToOutorder(inOrder, outMaster); orderDao.Add(outOrder); }