Beispiel #1
0
 /// <summary>
 /// Регистрирует приходную операцию
 /// </summary>
 /// <param name="entry"></param>
 public void Income(UnitEntry entry, Operation operation)
 {
     entry.Operation = operation;
     Incoming.Add(entry);
     Current.Add(entry);
 }
Beispiel #2
0
        /// <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("Ошибка в алгоритме перемещения с участка учета");
            }
        }