public override void _PhysicsProcess(float delta) { delta *= Game.SPEED; if (ActionInProgress == null) { IEnumerable <DefossiliserAction> doableActionsRightNow = possibleProcesses.Where(p => p.CanBeDoneWith(InInventory) && OutInventory.CanAdd(p.outItemID, p.outItemCount)); if (doableActionsRightNow.Any()) { ActionInProgress = doableActionsRightNow.OrderBy(action => action.ProcessingTime).First(); } } else { if (ActionInProgress.CanBeDoneWith(InInventory) && OutInventory.CanAdd(ActionInProgress.outItemID, ActionInProgress.outItemCount)) { DefossilisingProgress += delta / ActionInProgress.ProcessingTime; if (DefossilisingProgress >= 1) { OutInventory.TryAddItemStack(ActionInProgress.Process(InInventory)); Callback?.Invoke(); ActionInProgress = null; DefossilisingProgress = 0; } } else { ActionInProgress = null; DefossilisingProgress = 0; } } }
private void BindGrid() { string message = string.Empty; SalesCodeSearchInput input = new SalesCodeSearchInput(); input.Code = this.txtCode.Text; if (this.dtFrom.Checked) { input.FromDate = this.dtFrom.Value; } if (this.dtTo.Checked) { input.ToDate = this.dtTo.Value; } input.isImport = this.checkBox1.Checked ? 1 : 0; OutInventory[] list = new OutInventory[0]; if (this.Status == OutInventoryStatus.Outing) { list = PharmacyDatabaseService.GetSubmitedOutInventoryByCondition(out pager, out message, input, this.pagerControl.PageIndex, this.pagerControl.PageSize); } else if (this.Status == OutInventoryStatus.Outed) { list = PharmacyDatabaseService.GetAcceptedOutInventoryByCondition(out pager, out message, input, this.pagerControl.PageIndex, this.pagerControl.PageSize); } dgvOutInventory.DataSource = list; FormatRows(); }
/// <summary> /// 根据出库单生成销退单(允许退货一次) /// </summary> /// <param name="orderInfo"></param> public FormSalesOrderReturn(OutInventory outInventory) { InitializeComponent(); this.OutInfo = outInventory; this.dgvDrugDetailList.RowPostPaint += delegate(object o, DataGridViewRowPostPaintEventArgs ex) { DataGridViewOperator.SetRowNumber((DataGridView)o, ex); }; this.dgvDrugDetailList.AutoGenerateColumns = false; }
/// <summary> /// 保存出库信息 /// </summary> /// <param name="entity"></param> public void SubmitOutInventory(OutInventory entity) { try { var order = BusinessHandlerFactory.SalesOrderBusinessHandler.Get(entity.SalesOrderID); entity.Id = Guid.NewGuid(); entity.OrderCode = order.OrderCode; entity.OutInventoryDate = DateTime.Now; entity.CreateTime = DateTime.Now; entity.TotalMoney = entity.SalesOutInventoryDetails.Sum(p => p.OutAmount * p.ActualUnitPrice); this.Add(entity); order.OutInventoryId = entity.Id; order.OrderOutInventoryUserID = entity.CreateUserId; order.OrderOutInventoryTime = DateTime.Now; order.OrderOutInventoryCode = entity.OrderCode; foreach (var detail in entity.SalesOutInventoryDetails) { var sDetail = BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Get(detail.SalesOrderDetailId); sDetail.OutAmount += detail.OutAmount;//更新到订详细中 BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Save(sDetail); detail.Id = Guid.NewGuid(); detail.SalesOutInventoryID = entity.Id; detail.CreateTime = DateTime.Now; detail.DrugInventoryRecordID = sDetail.DrugInventoryRecordID; detail.ActualUnitPrice = sDetail.ActualUnitPrice; if (string.IsNullOrEmpty(detail.Description)) { detail.Description = "无备注";//必须字段 } BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Add(detail); } this.Save(); var tmpDetail = BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Fetch(p => p.OutAmount < p.Amount - p.ReturnAmount).FirstOrDefault(); //有未出库的商品,则此订单为出库中,否则作为配送中... order.OrderStatus = (tmpDetail == null) ? OrderStatus.Delivering : OrderStatus.Outing; BusinessHandlerFactory.SalesOrderBusinessHandler.Save(order); this.Save(); } catch (Exception ex) { throw new Exception("提交出库信息处理失败!", ex); } }
public bool CheckSpecial(OutInventory oi) { bool b = false; foreach (var o in oi.SalesOutInventoryDetails) { return(false); } return(true); }
/// <summary> /// 同意出库,并添加配送信息 /// </summary> /// <param name="entity"></param> public void AcceptOutInverntory(OutInventory entity) { try { lock (Locker) { var m = BusinessHandlerFactory.OutInventoryBusinessHandler.Get(entity.Id); m.UpdateTime = DateTime.Now; m.OrderOutInventoryCheckTime = DateTime.Now; m.OrderOutInventoryTime = DateTime.Now; m.OutInventoryDate = DateTime.Now; m.ReviewerId = entity.ReviewerId; if (m.OutInventoryStatus == OutInventoryStatus.Outing) { m.OrderOutInventoryCheckTime = DateTime.Now; } else { m.SecondCheckDateTime = DateTime.Now; } m.OutInventoryStatus = entity.OutInventoryStatus; this.Save(m); var order = BusinessHandlerFactory.SalesOrderBusinessHandler.Get(entity.SalesOrderID); //追加配送表 var c = RepositoryProvider.Db.Deliverys.Where(r => r.OutInventoryID == entity.Id).FirstOrDefault(); if (c == null && entity.OutInventoryStatusValue == (int)OutInventoryStatus.Outed) { Delivery delivery = new Delivery(); delivery.Id = Guid.NewGuid(); delivery.DeliveryStatusValue = (int)DeliveryStatus.Reservation;//配送预约 delivery.ReceivingCompasnyID = order.PurchaseUnitId; delivery.ShippingAddress = PharmacyFileBusinessHandler.CurrentStore.Address; delivery.DeliveryAddress = BusinessHandlerFactory.PurchaseUnitBusinessHandler.Get(order.PurchaseUnitId).ReceiveAddress; delivery.DrugsCount = entity.SalesOutInventoryDetails.Sum(p => p.OutAmount); delivery.CreateTime = delivery.UpdateTime = DateTime.Now; delivery.CreateUserId = entity.ReviewerId; delivery.UpdateUserId = entity.ReviewerId; delivery.OrderID = order.Id; delivery.OutInventoryID = entity.Id; delivery.outedNo = BusinessHandlerFactory.BillDocumentCodeBusinessHandler.GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.Delivery).Code; delivery.DeliveryMethodValue = order.PickUpGoodTypeValue == 0 ? 1 : order.PickUpGoodTypeValue == 1 ? 0 : (int)DeliveryMethod.Entrust; delivery.Memo = "执行配送,销售单号:" + order.OrderCode; BusinessHandlerFactory.DeliveryBusinessHandler.Add(delivery); } this.Save(); } } catch (Exception ex) { throw new Exception("审核出库单时出错!", ex); } }
public UCOutInventory(OutInventory entity, SalesOrder order) { InitializeComponent(); this.dgvDrugDetailList.AutoGenerateColumns = false; this.cmbOutType.DataSource = new List <ListItem> { new ListItem() { ID = ((int)OutInventoryType.SalesNormal).ToString(), Name = Utility.getEnumTypeDisplayName <OutInventoryType>(OutInventoryType.SalesNormal) }, new ListItem() { ID = ((int)OutInventoryType.SalesReissue).ToString(), Name = Utility.getEnumTypeDisplayName <OutInventoryType>(OutInventoryType.SalesReissue) } }; this.cmbOutType.ValueMember = "ID"; this.cmbOutType.DisplayMember = "Name"; this.OutInventory = entity; this.SalesOrder = order; if (OutInventory.Id == Guid.Empty || OutInventory.OutInventoryStatusValue == (int)OutInventoryStatus.None) { OutInventory.SalesOrderID = SalesOrder.Id; OutInventory.OutInventoryStatusValue = (int)OutInventoryStatus.None; OutInventory.StoreId = SalesOrder.StoreId; OutInventory.OutInventoryNumber = userControlBillDocumentCode1.GenarateCode(); } lblOrderNo.Text = order.OrderCode; lblCreateDate.Text = order.CreateTime.ToString("yyyy年MM月dd日"); lblOutStatus.Text = "出库"; string msg = string.Empty; var strPName = this.PharmacyDatabaseService.GetPurchaseUnit(out msg, order.PurchaseUnitId); label3.Text = strPName.Name; var FHY = this.PharmacyDatabaseService.GetUser(out msg, order.OrderOutInventoryCheckUserID); txt金额合计.Text = order.TotalMoney.ToString("0.00"); txt备注.Text = entity.Description; this.lblTitle.Text = "销售出库拣货复核"; }
/// <summary> /// 提交处理 /// </summary> /// <param name="order"></param> /// <param name="outInventory"></param> public void SaveOutInventoryByOrderOutInventory(SalesOrder order, OutInventory outInventory) { //1. 更新订单表() //2. 添加出库表 //3. 添加出库明细表 SalesOrder neworder = BusinessHandlerFactory.SalesOrderBusinessHandler.Get(order.Id); this.BusinessHandlerFactory.SalesOrderBusinessHandler.Save(order); outInventory.Id = Guid.NewGuid(); neworder.OrderOutInventoryCode = outInventory.OutInventoryNumber; neworder.OrderOutInventoryTime = outInventory.CreateTime; this.Add(outInventory); ICollection <OutInventoryDetail> details = outInventory.SalesOutInventoryDetails; foreach (OutInventoryDetail detail in details) { detail.SalesOutInventoryID = outInventory.Id; detail.UpdateTime = DateTime.Now; detail.CreateTime = DateTime.Now; BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Add(detail); } this.Save(); }
/// <summary> /// 获取订单相关的出库信息(包括详细信息) /// </summary> /// <param name="orderID"></param> /// <returns></returns> public List <OutInventory> GetOutInventoryByOrderID(Guid orderID) { var list = this.Fetch(p => p.SalesOrderID == orderID).OrderBy(p => p.CreateTime).ToList(); //更新详细信息 if (list.Count > 0) { return(list); } list.ForEach(p => p.SalesOutInventoryDetails = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Fetch(o => o.SalesOutInventoryID == p.Id).ToList()); var newDetails = GetOutInventoryDetailFromOrderDetail(orderID); if (newDetails.Count > 0) { OutInventory newOut = new OutInventory(); newOut.OutInventoryStatus = OutInventoryStatus.None; newOut.SalesOutInventoryDetails = newDetails; list.Add(newOut); } return(list); }
/// <summary> /// 添加出库信息 /// </summary> /// <param name="index"></param> /// <param name="order"></param> /// <param name="outInventory"></param> private void InitTabPage(int index, string tabPageName, SalesOrder order, OutInventory outInventory) { var ucOutInventory = new UCOutInventory(outInventory, order); ucOutInventory.Dock = System.Windows.Forms.DockStyle.Fill; ucOutInventory.Location = new System.Drawing.Point(0, 0); ucOutInventory.Name = tabPageName; ucOutInventory.Size = new System.Drawing.Size(861, 440); ucOutInventory.TabIndex = 0; var tabPage = new System.Windows.Forms.TabPage(); tabPage.Controls.Add(ucOutInventory); tabPage.Location = new System.Drawing.Point(4, 22); tabPage.Name = tabPageName; tabPage.Padding = new System.Windows.Forms.Padding(3); tabPage.Size = new System.Drawing.Size(867, 446); tabPage.TabIndex = 1; tabPage.Text = tabPageName; tabPage.UseVisualStyleBackColor = true; tabPage.Tag = ucOutInventory; tabContorl.TabPages.Add(tabPage); }
/// <summary> ///销退单入库保存 /// </summary> /// <param name="so"></param> public void SaveReturnOrderInventory(SalesOrderReturn sor) { try { //处理库存的退库信息 List <SalesOrderReturnDetail> salesOrderReturnDetailList = sor.SalesOrderReturnDetails.ToList(); OutInventory oi = null; int index = 0; foreach (SalesOrderReturnDetail item in salesOrderReturnDetailList) { index++; Guid drugInventoryID = item.DrugInventoryRecordID; decimal returnQtyIn = item.CanInAmount; //获取药物库存实体 DrugInventoryRecord drugInventory = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(drugInventoryID); //在销售单但未出库数量 累计当前订单明细数量 drugInventory.SalesCount -= returnQtyIn; drugInventory.CurrentInventoryCount += returnQtyIn; if (item.IsReissue) { drugInventory.OnSalesOrderCount += returnQtyIn; if (oi == null) { OutInventory oib = BusinessHandlerFactory.OutInventoryBusinessHandler.GetOutInventoryByOrderID(sor.SalesOrderID).ToList().First(); oi = new OutInventory(); oi.CreateUserId = oib.CreateUserId; oi.OrderCode = oib.OrderCode; oi.OrderOutInventoryCheckNumber = oib.OrderOutInventoryCheckNumber; oi.OrderOutInventoryCheckTime = oib.OrderOutInventoryCheckTime; oi.OrderOutInventoryCheckUserID = oib.OrderOutInventoryCheckUserID; oi.OrderOutInventoryTime = oib.OrderOutInventoryTime; oi.OrderOutInventoryUserID = oib.OrderOutInventoryUserID; oi.OutInventoryDate = DateTime.Now; oi.OutInventoryNumber = new BillDocumentCodeBusinessHandler(BusinessHandlerFactory.RepositoryProvider, null).GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.SalesOrderOutInventory).Code; oi.ReviewerId = new Guid(); oi.SalesOrderID = oib.SalesOrderID; oi.storekeeperId = oib.storekeeperId; oi.Id = Guid.NewGuid(); oi.CreateTime = DateTime.Now; oi.Deleted = false; oi.Description = "销退补货出库单"; oi.OutInventoryStatus = OutInventoryStatus.Outing; oi.OutInventoryStatusValue = (int)OutInventoryStatus.Outing; oi.OutInventoryType = OutInventoryType.SalesReissue; oi.OutInventoryTypeValue = (int)OutInventoryType.SalesReissue; oi.SalesOrderReturnID = sor.Id; oi.TotalMoney = item.ActualUnitPrice * item.ReturnAmount; BusinessHandlerFactory.OutInventoryBusinessHandler.Add(oi); } OutInventoryDetail oid = new OutInventoryDetail(); oid.ActualUnitPrice = item.ActualUnitPrice; oid.Amount = item.ReturnAmount; oid.BatchNumber = item.BatchNumber; oid.CanSaleNum = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(item.DrugInventoryRecordID).CanSaleNum + item.CanInAmount; oid.CreateTime = DateTime.Now; oid.CreateUserId = item.CreateUserId; oid.Deleted = false; oid.Description = "销退补货出库细节"; oid.DictionaryDosageCode = item.DictionaryDosageCode; oid.DrugInventoryRecordID = item.DrugInventoryRecordID; oid.FactoryName = item.FactoryName; oid.Id = Guid.NewGuid(); oid.Index = index; oid.MeasurementUnit = item.MeasurementUnit; oid.Origin = item.Origin; oid.OutAmount = item.ReturnAmount; oid.OutValidDate = item.OutValidDate; oid.Price = item.Price; oid.productCode = item.productCode; oid.productName = item.productName; oid.PruductDate = item.PruductDate; oid.SalesOrderDetailId = item.SalesOrderDetailID; oid.SalesOrderDetailReturnId = item.Id; oid.SalesOrderId = sor.SalesOrderID; oid.SalesOrderReturnId = sor.Id; oid.SalesOutInventoryID = oi.Id; oid.SpecificationCode = item.SpecificationCode; oid.StoreId = item.StoreId; oid.UnitPrice = item.UnitPrice; oid.UpdateTime = DateTime.Now; oid.UpdateUserId = item.UpdateUserId; OutInventoryDetail outinv = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Get(item.OutInventoryDetailID); oid.WarehouseCode = outinv.WarehouseCode; oid.WarehouseName = outinv.WarehouseName; oid.WarehouseZoneCode = outinv.WarehouseZoneCode; oid.WarehouseZoneName = outinv.WarehouseZoneName; BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Add(oid); } //drugInventory.PurchaseReturnNumber = item.ReturnAmount; drugInventory.Valid = true; BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Save(drugInventory); //在销售单但未出库数量 累计当前订单明细数量 if (item.IsReissue) { drugInventory.OnSalesOrderCount += returnQtyIn; } } this.Save(sor); this.Save(); } catch (Exception ex) { this.HandleException("销退单入库保存失败", ex); } }
/// <summary> /// 更新配送信息 /// </summary> /// <param name="userId"></param> /// <returns></returns> public void UpdateDelivery(Delivery delivery) { try { //更新配送信息表 this.Save(delivery); if (delivery.DeliveryStatus == DeliveryStatus.Outed) { if (delivery.OutInventoryID != Guid.Empty) { OutInventory oi = BusinessHandlerFactory.OutInventoryBusinessHandler.Get(delivery.OutInventoryID); SalesOrder so = BusinessHandlerFactory.SalesOrderBusinessHandler.Get(oi.SalesOrderID); so.OrderStatusValue = OrderStatus.Delivering.GetHashCode(); //更新库存信息 List <OutInventoryDetail> outInventoryList = BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Fetch(p => p.SalesOutInventoryID == delivery.OutInventoryID).ToList(); foreach (OutInventoryDetail item in outInventoryList) { Guid drugInventoryID = item.DrugInventoryRecordID; decimal outQty = item.OutAmount; //获取药物库存实体 DrugInventoryRecord drugInventory = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(drugInventoryID); //在销售单但未出库数量 累计当前订单明细数量 drugInventory.SalesCount += outQty; drugInventory.CurrentInventoryCount -= outQty; drugInventory.OnSalesOrderCount -= outQty; drugInventory.Valid = drugInventory.CanSaleNum > 0; BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Save(drugInventory); //获取库存实体 InventoryRecord inventory = BusinessHandlerFactory.InventoryRecordBusinessHandler.GetInventoryRecordByDrugInfoID(drugInventory.DrugInfoId); if (inventory != null) //应该能为NULL,Debug中却出现了. { //在销售单但未出库数量 累计当前订单明细数量 inventory.SalesCount += outQty; inventory.CurrentInventoryCount -= outQty; inventory.OnSalesOrderCount -= outQty; BusinessHandlerFactory.InventoryRecordBusinessHandler.Save(inventory); } } } } //签收后 if (delivery.DeliveryStatus == DeliveryStatus.Signed) { //更新车辆信息 if (delivery.VehicleID != Guid.Empty) { var vehicle = BusinessHandlerFactory.VehicleBusinessHandler.Get(delivery.VehicleID); vehicle.Status = false; //设置状态为可用 BusinessHandlerFactory.VehicleBusinessHandler.Save(vehicle); } } this.Save(); } catch (Exception ex) { this.HandleException("更新配送信息失败", ex); } finally { Dispose(); } }
/// <summary> /// 保存出库信息 /// </summary> /// <param name="entity"></param> public void SubmitOutInventory(OutInventory entity) { try { var order = BusinessHandlerFactory.SalesOrderBusinessHandler.Get(entity.SalesOrderID); entity.storekeeperId = entity.CreateUserId; entity.OrderOutInventoryUserID = entity.CreateUserId; entity.Id = Guid.NewGuid(); entity.OrderCode = order.OrderCode; entity.OutInventoryDate = DateTime.Now; entity.CreateTime = DateTime.Now; entity.TotalMoney = entity.SalesOutInventoryDetails.Sum(p => p.OutAmount * p.ActualUnitPrice); entity.OrderOutInventoryCheckNumber = BusinessHandlerFactory.BillDocumentCodeBusinessHandler.GenerateBillDocumentCodeByTypeValue((int)BillDocumentType.SalesOrderOutInventory).Code; order.OutInventoryId = entity.Id; order.OrderOutInventoryUserID = entity.CreateUserId; order.OrderOutInventoryTime = DateTime.Now; order.OrderOutInventoryCode = entity.OrderCode; bool IsSpecial = false; foreach (var detail in entity.SalesOutInventoryDetails) { var sDetail = BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Get(detail.SalesOrderDetailId); if (IsSpecial == false) { var druginventoryrecorder = BusinessHandlerFactory.DrugInventoryRecordBusinessHandler.Get(sDetail.DrugInventoryRecordID); IsSpecial = druginventoryrecorder.DrugInfo.IsSpecialDrugCategory; } sDetail.OutAmount += detail.OutAmount;//更新到订详细中 BusinessHandlerFactory.SalesOrderDetailBusinessHandler.Save(sDetail); detail.Id = Guid.NewGuid(); detail.SalesOutInventoryID = entity.Id; detail.CreateTime = DateTime.Now; detail.DrugInventoryRecordID = sDetail.DrugInventoryRecordID; detail.ActualUnitPrice = sDetail.ActualUnitPrice; if (string.IsNullOrEmpty(detail.Description)) { detail.Description = "无备注";//必须字段 } BusinessHandlerFactory.OutInventoryDetailBusinessHandler.Add(detail); } var rules = SearialiserHelper <SalePriceControlRulesModel> .DeSerializeFileToObj("SalePriceControlRulesModel.bin"); if (IsSpecial == false) { entity.OrderOutInventoryCheckUserID = rules.SaleChecker.OrdinaryChecker; } else { entity.OrderOutInventoryCheckUserID = rules.SaleChecker.SpacialDrugFirstChecker; entity.SpecialDrugSecondChecker = rules.SaleChecker.SpacialDrugSecondChecker; } this.Add(entity); order.OrderStatus = OrderStatus.Outing; this.Save(); } catch (Exception ex) { throw new Exception("提交出库信息处理失败!", ex); } }