protected void grid_BatchEditCommand(object sender, GridBatchEditingEventArgs e) { var value = "ObjectId".Query(); if (value.None()) { Response.Redirect("~/Depot/Home"); return; } var objId = value.GlobalId(); var obj = DataContext.DepotObject.Single(o => o.Id == objId); foreach (var command in e.Commands) { var values = command.NewValues; var place = values["Place"].ToString(); var number = values["Number"]; var numberx = values["NumberX"]; if (number.None()) continue; switch (command.Type) { case GridBatchEditingCommandType.Update: { var id = values["Id"].ToString().GlobalId(); var @fixed = bool.Parse(values["Fixed"].ToString()); var @in = DataContext.DepotInX.SingleOrDefault(o => o.Id == id); @in.Place = place; var ___px = new DepotPlace { Code = @in.Code, Place = place, Time = DateTime.Now }; DataContext.DepotPlace.Add(___px); if (!obj.Single) { @in.DepotIn.Place = @in.Place; @in.DepotIn.Note = number.ToString(); } if (!number.None()) { var @inx = DataContext.DepotIn.SingleOrDefault(o => o.Id == id); @inx.Note = numberx.ToString(); } DataContext.SaveChanges(); } break; } } DataContext.SaveChanges(); grid.Rebind(); }
public static void DepotActReturn(this DepotEntities db, Guid depotId, DateTime returnTime, Guid operatorId, List<InMemoryReturn> list) { if (list == null || list.Count == 0) { return; } var @out = new List<InMemoryOut>(); foreach (var item in list) { if (!item.Amount.HasValue || item.Amount.Value == 0) continue; var usexId = item.UseX; var usex = db.DepotUseX.SingleOrDefault(o => o.Id == usexId && o.ReturnedAmount < o.Amount); if (usex == null) continue; var inx = usex.DepotInX; var obj = inx.DepotObject; var @in = inx.DepotIn; var @return = new DepotReturn { Id = db.GlobalId(), UserId = usex.DepotUse.UserId, UseXId = item.UseX, Amount = item.Amount.Value, Price = inx.Price, Total = item.Amount.Value * inx.Price, Time = returnTime, Note = item.Note }; var catalog = db.DepotObjectCatalog.Where(o => o.ObjectId == obj.Id && o.IsLeaf == true).ToList().Join(db.DepotCatalog.Where(o => o.DepotId == depotId), o => o.CatalogId, o => o.Id, (a, b) => a.CatalogId).FirstOrDefault(); usex.ReturnedAmount += @return.Amount; db.DepotReturn.Add(@return); obj.Amount += @return.Amount; obj.Money += @return.Total; @in.AvailableAmount += @return.Amount; @in.Total += @in.Price * @return.Amount; inx.AvailableAmount += @return.Amount; @in.Total += @in.Price * @return.Amount; if (obj.Single) { if (db.DepotPlace.Count(o => o.Code == inx.Code) > 1) { var dpx = db.DepotPlace.Where(o => o.Code == inx.Code).OrderByDescending(o => o.AutoId).Skip(1).Take(1).Single(); var ___px = new DepotPlace { Code = dpx.Code, Place = dpx.Place, Time = DateTime.Now }; db.DepotPlace.Add(___px); } var flowx = new DepotFlowX { Id = db.GlobalId(), ObjectId = @in.ObjectId, ObjectOrdinal = inx.Ordinal, UserId = usex.DepotUse.UserId, Type = FlowType.归还, TypeName = FlowType.归还.ToString(), Time = returnTime, Amount = @return.Amount, Money = @in.Price, Note = item.Note }; db.DepotFlowX.Add(flowx); if (item.OutAmount.HasValue && item.OutAmount.Value > 0) { var nl = new List<int>(); nl.Add(inx.Ordinal); @out.Add(new InMemoryOut { Amount = item.OutAmount.Value, ObjectId = @in.ObjectId, Ordinals = nl, Reason = "报废", CatalogId = catalog }); } } else { var flow = new DepotFlow { Id = db.GlobalId(), ObjectId = @in.ObjectId, UserId = usex.DepotUse.UserId, Type = FlowType.归还, TypeName = FlowType.归还.ToString(), Time = returnTime, Amount = @return.Amount, Money = @in.Price * @return.Amount, Note = item.Note }; db.DepotFlow.Add(flow); if (item.OutAmount > 0) { var nl = new List<int>(); @out.Add(new InMemoryOut { Amount = item.OutAmount, ObjectId = @in.ObjectId, Ordinals = nl, Reason = "报废", CatalogId = catalog }); } } db.DepotActStatistics(@in.ObjectId, returnTime, 0, 0, [email protected], [email protected], 0, 0, 0, 0, 0, 0); } db.SaveChanges(); try { db.DepotActOut(depotId, returnTime, operatorId, operatorId, @out); } catch { } }
public static Guid DepotActUse(this DepotEntities db, Guid depotId, DateTime useTime, Guid operatorId, Guid userId, List<InMemoryUse> list) { if (list == null || list.Count == 0) { return Guid.Empty; } var use = new DepotUse { Id = db.GlobalId(), DepotId = depotId, UserId = userId, Time = useTime, OperatorId = operatorId, OperationTime = DateTime.Now, Age = string.Empty, Place = string.Empty, Money = 0 }; db.DepotUse.Add(use); foreach (var item in list) { if (!item.ObjectId.HasValue) continue; var objId = item.ObjectId.Value; var obj = db.DepotObject.Single(o => o.Id == objId); if (obj.Single) { if (item.Ordinals.Count == 0 || !item.Type.HasValue) { continue; } foreach (var index in item.Ordinals) { var @in = db.DepotInX.Single(o => o.ObjectId == objId && o.Ordinal == index); if (db.DepotPlace.Count(o => o.Code == @in.Code) == 0) { var ___px = new DepotPlace { Code = @in.Code, Place = @in.Place, Time = @in.DepotIn.Time }; db.DepotPlace.Add(___px); } var ___p = new DepotPlace { Code = @in.Code, Place = item.Place, Time = DateTime.Now }; db.DepotPlace.Add(___p); var x = new DepotUseX { Id = db.GlobalId(), ObjectId = objId, UseId = use.Id, InXId = @in.Id, Type = item.Type.Value, Age = item.Age, Place = item.Place, Amount = 1, Money = @in.Price, ReturnedAmount = 0, Note = item.Note }; db.DepotUseX.Add(x); @in.AvailableAmount = 0; @in.DepotIn.AvailableAmount -= 1; obj.Amount -= 1; var flowx = new DepotFlowX { Id = db.GlobalId(), ObjectId = @in.ObjectId, ObjectOrdinal = index, UserId = operatorId, Type = FlowType.借用出库, TypeName = FlowType.借用出库.ToString(), Time = useTime, Amount = -1, Money = @in.Price, Note = item.Note }; use.Money += @in.Price; db.DepotFlowX.Add(flowx); db.DepotActStatistics(@in.ObjectId, useTime, 0, 0, 1, @in.Price, 0, 0, 0, 0, 0, 0); } } else { if (!item.Amount.HasValue || item.Amount.Value == 0) { continue; } if (!item.Type.HasValue) { continue; } var todo = obj.Amount < item.Amount.Value ? obj.Amount : item.Amount.Value; var totalAmount = 0M; var totalMoney = 0M; foreach (var @in in obj.DepotIn.Where(o => o.ObjectId == objId && o.AvailableAmount > 0).OrderBy(o => o.Time).ToList()) { var xObj = db.DepotInX.Single(o => o.ObjectId == objId && o.InId == @in.Id); if (@in.AvailableAmount < todo) { var x = new DepotUseX { Id = db.GlobalId(), ObjectId = objId, UseId = use.Id, InXId = xObj.Id, Type = item.Type.Value, Age = item.Age, Place = item.Place, Amount = @in.AvailableAmount, Money = @in.Price * @in.AvailableAmount, ReturnedAmount = 0, Note = item.Note }; db.DepotUseX.Add(x); todo -= @in.AvailableAmount; totalAmount += @in.AvailableAmount; totalMoney += @in.AvailableAmount * @in.Price; obj.Amount -= @in.AvailableAmount; obj.Money -= @in.AvailableAmount * @in.Price; @in.Total -= @in.AvailableAmount * @in.Price; @in.AvailableAmount = 0; var inx = @in.DepotInX.Single(); inx.AvailableAmount = @in.AvailableAmount; inx.Total = @in.Total; } else { var x = new DepotUseX { Id = db.GlobalId(), ObjectId = objId, UseId = use.Id, InXId = xObj.Id, Type = item.Type.Value, Age = item.Age, Place = item.Place, Amount = todo, Money = @in.Price * todo, ReturnedAmount = 0, Note = item.Note }; db.DepotUseX.Add(x); totalAmount += todo; totalMoney += todo * @in.Price; obj.Amount -= todo; obj.Money -= todo * @in.Price; @in.Total -= todo * @in.Price; @in.AvailableAmount -= todo; var inx = @in.DepotInX.Single(); inx.AvailableAmount = @in.AvailableAmount; inx.Total = @in.Total; todo = 0; break; } } use.Money += totalMoney; var flow = new DepotFlow { Id = db.GlobalId(), ObjectId = objId, UserId = userId, Type = item.Type.Value == UseType.借用 ? FlowType.借用出库 : FlowType.领用出库, TypeName = (item.Type.Value == UseType.借用 ? FlowType.借用出库 : FlowType.领用出库).ToString(), Time = useTime, Amount = -totalAmount, Money = -totalMoney, Note = "出库" }; db.DepotFlow.Add(flow); if (item.Type.Value == UseType.借用) db.DepotActStatistics(objId, useTime, 0, 0, totalAmount, totalMoney, 0, 0, 0, 0, 0, 0); else db.DepotActStatistics(objId, useTime, 0, 0, 0, 0, totalAmount, totalMoney, 0, 0, 0, 0); } } db.SaveChanges(); if (use.DepotUseX.Count == 0) { db.DepotUse.Remove(use); db.SaveChanges(); return Guid.Empty; } return use.Id; }
protected void save_ServerClick(object sender, EventArgs e) { var id = (sender as HtmlInputControl).Attributes["match"].GlobalId(); var value = "ObjectId".Query(); var @in = DataContext.DepotInX.Single(o => o.Id == id); var objId = value.GlobalId(); var obj = DataContext.DepotObject.Single(o => o.Id == objId); var place = ((sender as HtmlInputControl).NamingContainer.FindControl("place") as RadTextBox).Text; @in.Place = place; var ___px = new DepotPlace { Code = @in.Code, Place = place, Time = DateTime.Now }; DataContext.DepotPlace.Add(___px); if (!obj.Single) { @in.DepotIn.Place = @in.Place; } DataContext.SaveChanges(); }