public static void ActionInExt(this StoreEntity db, Guid targetId, Guid objectId, string age, string place, string image, Guid? responsibleId, string note, DateTime inTime, Guid operatorId, string code, decimal amount, decimal totalPrice, decimal sourcePerPrice, decimal fee, decimal money) { var @in = new StoreIn { Id = db.GlobalId(), TargetId = targetId, ObjectId = objectId, Age = age, Place = place, Image = image, ResponsibleUserId = responsibleId, Note = note, TimeNode = inTime.ToTimeNode(), Time = inTime, OperationUserId = operatorId, OperationTime = DateTime.Now, Code = code, Amount = amount, SourceAmount = amount, OriginalAmount = amount, PerPrice = decimal.Divide(totalPrice, amount), SourcePerPrice = sourcePerPrice, Fee = fee, Money = totalPrice + fee, SourceMoney = totalPrice + fee, OriginalMoney = totalPrice + fee }; db.StoreIn.Add(@in); var obj = db.StoreObject.Single(o => o.Id == objectId); obj.Amount += amount; obj.Money += money; var catalog = obj.StoreCatalog; var store = catalog.Store; if (store.State != StoreState.食品 && db.StoreDictionary.Count(o => o.StoreId == store.Id && o.Type == DictionaryType.年龄段 && o.Name == age) == 0) { var dictionary = new StoreDictionary { StoreId = catalog.StoreId, Type = DictionaryType.年龄段, Name = age, PinYin = db.ToPinYin(age).Single() }; db.StoreDictionary.Add(dictionary); } var flow = new StoreFlow { Id = db.GlobalId(), ObjectId = objectId, UserId = operatorId, Type = FlowType.入库, TypeName = FlowType.入库.ToString(), TimeNode = inTime.ToTimeNode(), Time = inTime, Amount = amount, Money = money, Note = note }; db.StoreFlow.Add(flow); db.ActionRecord(objectId, inTime, amount, money, 0M, 0M, 0M, 0M, 0M, 0M, 0M, 0M); if (obj.Single) { // To Do } db.SaveChanges(); }
public static void ActionInEditExt(this StoreEntity db, StoreIn @in, DateTime day, decimal amount, decimal perPrice, decimal money, string place, string note, Guid operatorId) { var obj = db.StoreObject.Single(o => o.Id == @in.ObjectId); var target = db.StoreTarget.Single(o => o.Id == @in.TargetId); if (obj.Single) return; decimal plusAmount = amount - @in.Amount; decimal plusMoney = money - @in.Money; if (day.Year == @in.Time.Year || day.Month == @in.Time.Month) { db.ActionRecord(obj.Id, day, plusAmount, plusMoney, 0, 0, 0, 0, 0, 0, 0, 0); } else { db.ActionRecord(obj.Id, @in.Time, plusAmount, plusMoney, 0, 0, 0, 0, 0, 0, 0, 0); db.ActionRecord(obj.Id, day, amount, money, 0, 0, 0, 0, 0, 0, 0, 0); } if (amount != @in.OriginalAmount || money != @in.OriginalMoney) { if (amount > 0 && money > 0) { @in.Amount = amount; @in.OriginalAmount = amount; @in.SourceAmount = amount; @in.Money = money; @in.OriginalMoney = money; @in.SourceMoney = money; @in.SourcePerPrice = perPrice; @in.PerPrice = decimal.Divide(money, amount); @in.Place = place; @in.Note = note; @in.Time = day; @in.TimeNode = day.ToTimeNode(); obj.Amount += plusAmount; obj.Money += plusMoney; target.Paid += plusMoney; var flow = new StoreFlow { Id = db.GlobalId(), ObjectId = obj.Id, UserId = operatorId, Type = FlowType.入库修改, TypeName = FlowType.入库修改.ToString(), TimeNode = day.ToTimeNode(), Time = day, Amount = plusAmount, Money = plusMoney, Note = note }; db.StoreFlow.Add(flow); } else { db.StoreIn.Remove(@in); obj.Amount += plusAmount; obj.Money += plusMoney; target.Paid += plusMoney; var flow = new StoreFlow { Id = db.GlobalId(), ObjectId = obj.Id, UserId = operatorId, Type = FlowType.入库修改, TypeName = FlowType.入库修改.ToString(), TimeNode = day.ToTimeNode(), Time = day, Amount = plusAmount, Money = plusMoney, Note = note }; db.StoreFlow.Add(flow); } } db.SaveChanges(); }
public static Guid ActionUseExt(this StoreEntity db, List<CachedUse> list, Guid userId, DateTime time, Guid operatorId, Guid storeId, string code = "") { if (list.Count == 0) { return Guid.Empty; } var gid = db.GlobalId(); var su = new StoreUse { Id = gid, UserId = userId, Time = time, TimeNode = time.ToTimeNode(), OperationUserId = operatorId, OperationTime = DateTime.Now, UsageTarget = list.First().UserTarget, StoreId = storeId, Money = 0 }; db.StoreUse.Add(su); db.SaveChanges(); foreach (var use in list) { decimal _money = 0; var objId = use.ObjectId.Value; var obj = db.StoreObject.Single(o => o.Id == objId); if (!obj.Single) { if (obj.Amount < use.Amount.Value) use.Amount = obj.Amount; if (use.Type == "领用") { var consume = new StoreConsume { Id = db.GlobalId(), ObjectId = use.ObjectId.Value, ConsumeUserId = userId, Note = use.Note, TimeNode = time.ToTimeNode(), Time = time, OperationUserId = operatorId, OperationTime = DateTime.Now, Code = code, Amount = use.Amount.Value, Money = 0 }; db.StoreConsume.Add(consume); var counter = 0; var left = consume.Amount; foreach (var @in in obj.StoreIn.Where(o => o.Amount > 0).OrderBy(o => o.TimeNode)) { counter++; if (@in.Amount >= left) { var @single = new StoreConsumeSingle(); @single.Id = db.GlobalId(); var us = new StoreUseSingle { Id = db.GlobalId(), UseId = gid, Type = 0, InId = @in.Id, SingleInId = null, ObjectId = obj.Id, Note = use.Note, Amount = left, Money = (decimal.Divide(@in.SourceMoney, @in.SourceAmount)) * left, SingleConsumeId = @single.Id }; db.StoreUseSingle.Add(us); consume.Money += (decimal.Divide(@in.SourceMoney, @in.SourceAmount)) * left; @single.InId = @in.Id; @single.ConsumeId = consume.Id; @single.Ordinal = counter; @single.Amount = left; @single.PerPrice = @in.PerPrice; @single.SourcePerPrice = @in.SourcePerPrice; @single.Fee = (decimal.Divide(@in.Fee, @in.Amount)) * left; @single.Money = (decimal.Divide(@in.SourceMoney, @in.SourceAmount)) * left; @in.Amount -= left; if (@in.Amount == 0) @in.Money = 0; else @in.Money -= (decimal.Divide(@in.SourceMoney, @in.SourceAmount)) * left; db.StoreConsumeSingle.Add(@single); break; } else { left -= @in.Amount; var @single = new StoreConsumeSingle(); @single.Id = db.GlobalId(); var us = new StoreUseSingle { Id = db.GlobalId(), UseId = gid, Type = 0, InId = @in.Id, SingleInId = null, ObjectId = obj.Id, Note = use.Note, Amount = @in.Amount, Money = @in.Amount * (decimal.Divide(@in.SourceMoney, @in.SourceAmount)), SingleConsumeId = @single.Id }; db.StoreUseSingle.Add(us); consume.Money += @in.Amount * (decimal.Divide(@in.SourceMoney, @in.SourceAmount)); @single.InId = @in.Id; @single.ConsumeId = consume.Id; @single.Ordinal = counter; @single.Amount = @in.Amount; @single.PerPrice = @in.PerPrice; @single.SourcePerPrice = @in.SourcePerPrice; @single.Fee = @in.Fee; @single.Money = @in.Amount * (decimal.Divide(@in.SourceMoney, @in.SourceAmount)); @in.Amount = 0; @in.Money = 0; db.StoreConsumeSingle.Add(@single); } } _money = consume.Money; su.Money += consume.Money; obj.Amount -= use.Amount.Value; obj.Money -= _money; var flow = new StoreFlow { Id = db.GlobalId(), ObjectId = objId, UserId = operatorId, Type = FlowType.领用出库, TypeName = FlowType.领用出库.ToString(), TimeNode = time.ToTimeNode(), Time = time, Amount = -use.Amount.Value, Money = -consume.Money, Note = use.Note }; db.StoreFlow.Add(flow); db.ActionRecord(objId, time, 0M, 0M, 0M, 0M, use.Amount.Value, _money, 0M, 0M, 0M, 0M); db.SaveChanges(); } } } return gid; }
protected void Adjust() { var lcId = "LCId".Query().GlobalId(); var lc = db.Value.Store_LC.Single(o => o.Id == lcId); var obj = db.Value.StoreObject.Single(o => o.Id == lc.ObjectId); if (lc.Type == "领用" && obj.Consumable) { var cs = db.Value.StoreConsumeSingle.Single(o => o.Id == lc.Id); var @in = cs.StoreIn; var perPrice = @in.PerPrice; var fee = @in.Fee / @in.OriginalAmount; var plusAmount = cs.Amount - amount.PeekValue(lc.Amount);//20 var plusFee = fee * plusAmount; var plusMoney = perPrice * plusAmount + plusFee; cs.Amount -= plusAmount; cs.Money -= plusMoney; var c = cs.StoreConsume; c.Amount -= plusAmount; c.Money -= plusMoney; @in.Amount += plusAmount; @in.Money += plusMoney; obj.Amount += plusAmount; obj.Money += plusMoney; var u = db.Value.StoreUseSingle.Single(o => o.SingleConsumeId == cs.Id); u.Amount -= plusAmount; u.Money -= plusMoney; var us = u.StoreUse; us.Money -= plusMoney; var flow = new StoreFlow { Id = db.Value.GlobalId(), ObjectId = obj.Id, UserId = CurrentUser, Type = FlowType.出库修改, TypeName = FlowType.出库修改.ToString(), TimeNode = lc.TimeNode, Time = lc.TimeNode.ToTime(), Amount = plusAmount, Money = plusMoney, Note = "出库修改" }; db.Value.StoreFlow.Add(flow); var time = c.Time; var year = time.Year; var month = time.Month; var stamp = new DateTime(year, month, 1).ToTimeNode(); var last = db.Value.StoreStatistics.Where(o => o.ObjectId == obj.Id && o.TimeNode < stamp).OrderByDescending(o => o.TimeNode).FirstOrDefault(); var current = db.Value.StoreStatistics.Single(o => o.ObjectId == obj.Id && o.Year == year && o.Month == month); current.ConsumeAmount -= plusAmount; current.ConsumeMoney -= plusMoney; current.EndAmount += plusAmount; current.EndMoney += plusMoney; foreach (var currentX in db.Value.StoreStatistics.Where(o => o.ObjectId == obj.Id && o.TimeNode > stamp)) { currentX.StartAmount += plusAmount; currentX.StartMoney += plusMoney; currentX.EndAmount += plusAmount; currentX.EndMoney += plusMoney; } if (cs.Amount == 0) { db.Value.StoreConsumeSingle.Remove(cs); } db.Value.SaveChanges(); } }