/// <summary> /// Регистрирует приходную операцию /// </summary> /// <param name="entry"></param> public void Income(UnitEntry entry, Operation operation) { entry.Operation = operation; Incoming.Add(entry); Current.Add(entry); }
/// <summary> /// Регистрирует расходную операцию /// Цены расхода равны ценам прихода /// Сначала расходуютсяя ранее оприходованные /// </summary> /// <param name="entry"></param> /// <param name="operation"></param> public void Outcom(UnitEntry entry, Operation operation) { CheckAvailable(entry); var actual = Current.Where(x => x.UnitId == entry.UnitId).OrderBy(x => x.Operation.Date).ToArray(); var unitCountToGrab = entry.Count; foreach (var actualEntry in actual) { if (unitCountToGrab < actualEntry.Count) { actualEntry.Count -= unitCountToGrab; Outgoing.Add(new UnitEntry {Unit = actualEntry.Unit, Price = actualEntry.Price, Count = unitCountToGrab}); break; } Outgoing.Add(actualEntry); Current.Remove(actualEntry); actualEntry.Operation = operation; unitCountToGrab -= actualEntry.Count; if (unitCountToGrab == 0) break; if (unitCountToGrab < 0) throw new NotImplementedException("Ошибка в алгоритме перемещения с участка учета"); } }