Exemple #1
0
 public void AddRow(TRow row)
 {
     if (!Rows.Any(r => r.Equals(row)))
     {
         Rows.Add(row);
     }
 }
Exemple #2
0
 public TabularParameterDetails(IEnumerable <ITabularParameterColumn> columns, IEnumerable <ITabularParameterRow> rows, Exception tableException = null)
 {
     Columns             = columns.ToArray();
     Rows                = rows.ToArray();
     VerificationStatus  = Rows.Any() ? Rows.Max(x => x.VerificationStatus) : ParameterVerificationStatus.NotApplicable;
     VerificationMessage = CollectMessages(tableException);
 }
Exemple #3
0
        public virtual void CheckPossibilityToCancelAcceptance()
        {
            ValidationUtils.Assert(!IsNew, "Накладная еще не проведена.");
            ValidationUtils.Assert(!IsShipped, "Накладная уже отгружена.");

            ValidationUtils.Assert(!Rows.Any(x => x.AreOutgoingWaybills), "Невозможно отменить проводку накладной, т.к. ее позиции участвуют в дальнейшем товародвижении.");
        }
Exemple #4
0
        public List <List <string> > InitializeColumns()
        {
            var _columns = new List <List <string> >();

            if (!Rows.Any())
            {
                return(_columns);
            }

            for (int i = 0; i < Rows.Count; i++)
            {
                for (int j = 0; j < Rows[i].Count; j++)
                {
                    var column = new List <string>();
                    if (i != 0)
                    {
                        column = _columns.ElementAt(j);
                    }

                    column.Add(Rows[i][j]);

                    if (i == 0)
                    {
                        _columns.Add(column);
                    }
                }
            }

            return(_columns);
        }
Exemple #5
0
 /// <summary>
 ///     Normalize a saw tooth like series due to overflows or resets
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="resetValue">let it null to take the first value after the overflow, otherwise set the value explicitly</param>
 /// <returns></returns>
 public IQuerySerie <T> NormalizeOverflows(double?resetValue = null)
 {
     if (Rows.Any())
     {
         var    newRows       = new List <ISingleDataRow <T> >(Rows.Count);
         double offset        = 0;
         double previousValue = Rows.First().Value.ToDouble();
         foreach (var row in Rows)
         {
             double rowValue = row.Value.ToDouble();
             if (previousValue > rowValue)
             {
                 if (resetValue != null)
                 {
                     offset += previousValue - (rowValue - resetValue.Value);
                 }
                 else
                 {
                     offset += previousValue;
                 }
             }
             newRows.Add(new SingleDataRow <T>(row.TimeUtc, (rowValue + offset).ToType <T>()));
             previousValue = rowValue;
         }
         return(new QuerySerie <T>(newRows, this));
     }
     return(this);
 }
Exemple #6
0
        private void OneToGui(KomBankE komBank, string response)
        {
            if (string.IsNullOrEmpty(response))
            {
                var lastLine = Rows.LastOrDefault(r => r.Bank == komBank.GetAbbreviation());
                lastLine?.SetIfExpired();
                return;
            }

            var oneLine = JsonConvert.DeserializeObject <KomBankRatesLine>(response);
            var newLine = Mapper.Map <KomBankRateVm>(oneLine);

            var last = Rows.FirstOrDefault(r => r.Id == newLine.Id);

            if (last == null)
            {
                newLine.State = "Fresh";
                if (Rows.Any())
                {
                    Rows.Last().State = "";
                }
                Rows.Add(newLine);
            }
            else
            {
                last.SetIfExpired();
                last.LastCheck = newLine.LastCheck;
            }
        }
Exemple #7
0
        public ExcelRowDiff CreateRow()
        {
            var row = new ExcelRowDiff(Rows.Any() ? Rows.Keys.Last() + 1 : 0);

            Rows.Add(row.Index, row);

            return(row);
        }
Exemple #8
0
 public T?Min()
 {
     if (!Rows.Any())
     {
         return(null);
     }
     return(Rows.Select(i => i.Value).Min());
 }
Exemple #9
0
 /// <summary>
 ///     Mean of all measurement points without looking to timestamps
 /// </summary>
 /// <returns></returns>
 public T?Mean()
 {
     if (!Rows.Any())
     {
         return(null);
     }
     return(Rows.Select(i => i.Value.ToDouble()).Mean().ToType <T>());
 }
Exemple #10
0
 public IQuerySerie <T> WhereValue(Func <T, bool> predicate)
 {
     if (Rows.Any())
     {
         return(new QuerySerie <T>(Rows.Where(i => predicate(i.Value)).ToList(), this));
     }
     return(this);
 }
Exemple #11
0
 public IQuerySerie <T> Where(Func <ISingleDataRow <T>, bool> predicate)
 {
     if (Rows.Any())
     {
         return(new QuerySerie <T>(Rows.Where(predicate).ToList(), this));
     }
     return(this);
 }
Exemple #12
0
 public IQuerySerie <T> IncludeLastRow()
 {
     if (Rows.Any())
     {
         LastRow = Rows.Last();
     }
     return(this);
 }
        /// <summary>
        /// Проверка возможности отмены проводки
        /// </summary>
        public virtual void CheckPossibilityToCancelAcceptance()
        {
            ValidationUtils.Assert(IsAccepted && !IsReceipted, String.Format("Невозможно отменить проводку накладной со статусом «{0}».", State.GetDisplayName()));

            // Отменить проводку можно, только если ни по одной из позиций накладной не было сформировано других документов
            // со статусом "Проведено", "Отгружено" или "Принято".
            ValidationUtils.Assert(!Rows.Any(x => x.AreOutgoingWaybills), "Невозможно отменить проводку накладной, т.к. ее позиции участвуют в дальнейшем товародвижении.");
        }
Exemple #14
0
        public virtual void MergeWith(DataElement mergedElement)
        {
            int initialColumnsCount = Columns.Count;
            int initialRowsCount    = Rows.Count;

            for (int rowInd = 0; rowInd < mergedElement.Rows.Count; rowInd++)
            {
                if (string.IsNullOrEmpty(mergedElement.Rows[rowInd].Header) || !Rows.Any(r => r.Header.Equals(mergedElement.Rows[rowInd].Header, StringComparison.OrdinalIgnoreCase)))
                {
                    Row newRow = mergedElement.Rows[rowInd].Clone();
                    newRow.Data.InsertRange(0, Enumerable.Repeat <object>(null, initialColumnsCount));
                    Rows.Add(newRow);
                }
            }
            for (int colInd = 0; colInd < mergedElement.Columns.Count; colInd++)
            {
                if (string.IsNullOrEmpty(mergedElement.Columns[colInd].Header) || !Columns.Any(r => r.Header.Equals(mergedElement.Columns[colInd].Header, StringComparison.OrdinalIgnoreCase)))
                {
                    Column newColumn = mergedElement.Columns[colInd].Clone(false);
                    Columns.Add(newColumn);
                    foreach (Row row in Rows)
                    {
                        row.Data.Add(null);
                    }
                }
            }

            for (int rowInd = 0; rowInd < mergedElement.Rows.Count; rowInd++)
            {
                Row row = Rows.FirstOrDefault(r => !string.IsNullOrEmpty(r.Header) && r.Header.Equals(mergedElement.Rows[rowInd].Header, StringComparison.OrdinalIgnoreCase));
                if (row == null)
                {
                    row = Rows[initialRowsCount + rowInd];
                }
                for (int colInd = 0; colInd < mergedElement.Columns.Count; colInd++)
                {
                    if (mergedElement.Rows[rowInd].Data[colInd] != null)
                    {
                        int    dataIndex = initialColumnsCount + colInd;
                        Column column    = Columns.FirstOrDefault(r => !string.IsNullOrEmpty(r.Header) && r.Header.Equals(mergedElement.Columns[colInd].Header, StringComparison.OrdinalIgnoreCase));
                        if (column != null)
                        {
                            dataIndex = Columns.IndexOf(column);
                        }
                        if (row.Data[dataIndex] == null)
                        {
                            row.Data[dataIndex] = mergedElement.Rows[rowInd].Data[colInd];
                        }
                    }
                }
            }
            foreach (var item in Columns)
            {
                item.Data.Clear();
            }

            Normalize();
        }
Exemple #15
0
        public void Write([NotNull] ILog logger)
        {
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            // find the longest column by searching each row
            var columnLengths = ColumnLengths();

            // create the string format with padding
            var format = Enumerable.Range(0, Columns.Count)
                         .Select(i => "| {" + i + ",-" + columnLengths[i] + "} ")
                         .Aggregate((s, a) => s + a) + " |";

            // remove last pipe (|)
            format = format.Substring(0, format.Length - 1);

            // find the longest formatted line
            var maxRowLength  = Math.Max(0, Rows.Any() ? Rows.Max(row => string.Format(format, row).Length) : 0);
            var columnHeaders = string.Format(format, Columns.ToArray());

            // longest line is greater of formatted columnHeader and longest row
            var longestLine = Math.Min(Program.TerminalBufferWidth, Math.Max(maxRowLength, columnHeaders.Length));

            // add each row
            var results = Rows.Select(row => string.Format(format, row)).ToList();

            // create the divider
            var divider = $"{string.Join(string.Empty, Enumerable.Repeat("-", longestLine))} ";

            if (Header != null)
            {
                var dividerHeader = string.Join(string.Empty, Enumerable.Repeat("=", longestLine));
                foreach (var line in Header.Split("\n"))
                {
                    logger.Info(line);
                }
                logger.Info(dividerHeader);
            }

            logger.Info(columnHeaders);

            foreach (var row in results)
            {
                logger.Info(divider);
                logger.Info(row);
            }

            if (!Options.EnableCount)
            {
                return;
            }

            logger.Info(string.Empty);
            logger.Info(" Count: {0}", Rows.Count);
        }
Exemple #16
0
        public virtual void CheckPossibilityToCancelApprovement()
        {
            ValidationUtils.Assert(IsApproved, "Невозможно отменить согласование несогласованной накладной.");

            // Отменить окончательное согласование можно, только если ни по одной из позиций накладной не было сформировано других документов
            // со статусом "Отгружено" или "Принято".
            ValidationUtils.Assert(!Rows.Any(x => x.ShippedCount + x.FinallyMovedCount > 0),
                                   "Невозможно отменить согласование накладной, так как товар из нее используется в других документах.");
        }
Exemple #17
0
        /// <summary>
        ///     Mean of all measurement points with taking the time into account
        /// </summary>
        /// <returns></returns>
        private T?MeanByTime(bool includePreviousAndNext)
        {
            var notAnyRows = !Rows.Any();

            if (notAnyRows && (!includePreviousAndNext || (PreviousRow == null && NextRow == null)))
            {
                return(null);
            }
            if (notAnyRows)
            {
                return(PreviousRow?.Value ?? NextRow.Value);
            }

            double   valueSum         = 0;
            var      rows             = Rows;
            DateTime start            = DateTime.MinValue;
            DateTime stop             = rows.Last().TimeUtc;
            DateTime?currentTimeStamp = null;


            double currentValue = 0;

            if (PreviousRow != null && StartTime != null)
            {
                start            = StartTime.Value;
                currentValue     = PreviousRow.Value.ToDouble();
                currentTimeStamp = start;
            }

            for (int i = 0; i < rows.Count; i++)
            {
                var newRow = rows[i];
                if (currentTimeStamp != null)
                {
                    valueSum += (newRow.TimeUtc - currentTimeStamp.Value).Ticks * currentValue;
                }
                else
                {
                    start = newRow.TimeUtc;
                }
                currentValue     = newRow.Value.ToDouble();
                currentTimeStamp = newRow.TimeUtc;
            }

            if (NextRow != null && EndTime != null)
            {
                stop = EndTime.Value;
                if (currentTimeStamp != null)
                {
                    valueSum += (stop - currentTimeStamp.Value).Ticks * currentValue;
                }
            }

            double result = valueSum / (stop - start).Ticks;

            return(result.ToType <T>());
        }
Exemple #18
0
        public override string ToString()
        {
            var builder = new StringBuilder();

            // find the longest column by searching each row
            var columnLengths = ColumnLengths();

            // create the string format with padding
            var format = Enumerable.Range(0, Columns.Count)
                         .Select(i => " | {" + i + ",-" + columnLengths[i] + "}")
                         .Aggregate((s, a) => s + a) + " |";

            string f(object[] obj)
            {
                return(Enumerable.Range(0, Columns.Count)
                       .Select(i => {
                    var floating = obj[i].ToString().Where(FloatingCharacter.Glyph.IgnoreCharacters.Contains).Count();
                    var k = " | {" + i + ",-" + (columnLengths[i] + floating) + "}";
                    return k;
                })
                       .Aggregate((s, a) => s + a) + " |");
            }

            // find the longest formatted line
            var maxRowLength  = Math.Max(0, Rows.Any() ? Rows.Max(row => string.Format(format, row).Length) : 0);
            var columnHeaders = string.Format(format, Columns.ToArray());

            // longest line is greater of formatted columnHeader and longest row
            var longestLine = Math.Max(maxRowLength, columnHeaders.Length);

            // add each row
            //var results = Rows.Select((row, i) => string.Format(format, row)).ToList();
            var results = Rows.Select((row, i) => string.Format(f(row), row)).ToList();

            // create the divider
            var divider = " " + string.Join("", Enumerable.Repeat("-", longestLine - 1)) + " ";

            builder.AppendLine(divider);
            builder.AppendLine(columnHeaders);

            foreach (var row in results)
            {
                builder.AppendLine(divider);
                builder.AppendLine(row);
            }

            builder.AppendLine(divider);

            if (Options.EnableCount)
            {
                builder.AppendLine("");
                builder.AppendFormat(" Count: {0}", Rows.Count);
            }

            return(builder.ToString());
        }
Exemple #19
0
 public T?Difference()
 {
     if (!Rows.Any())
     {
         return(null);
     }
     return
         ((Rows.Last().Value.ToDouble() - (PreviousRow?.Value.ToDouble() ?? Rows.First().Value.ToDouble()))
          .ToType <T>());
 }
Exemple #20
0
 void calc()
 {
     if (Rows.Any())
     {
         for (int i = 0; i < Rows.First().Count; i++)
         {
             dict[i] = Rows.Max(r => r[i].MyLength());
         }
     }
 }
        /// <summary>
        /// Добавление позиции в накладную
        /// </summary>
        public virtual void AddRow(ReturnFromClientWaybillRow row)
        {
            ValidationUtils.Assert(IsDraft, String.Format("Невозможно добавить позицию в накладную со статусом «{0}».", State.GetDisplayName()));
            ValidationUtils.NotNull(row.SaleWaybillRow.SaleWaybill, "Невозможно добавить позицию со ссылкой на позицию накладной реализации без указанной реализации.");
            ValidationUtils.Assert(row.SaleWaybillRow.SaleWaybill.Sender == Recipient, "Организация-приемщик и организация-продавец товара должны совпадать.");
            ValidationUtils.Assert(!Rows.Any(x => x.SaleWaybillRow.Id == row.SaleWaybillRow.Id), "Позиция накладной по данной позиции накладной реализации уже добавлена.");
            ValidationUtils.Assert(row.SaleWaybillRow.SaleWaybill.Team == Team, "Команда накладной возврата должна совпадать с командой накладной реализации.");

            rows.Add(row);
            row.ReturnFromClientWaybill = this;
        }
Exemple #22
0
        /// <summary>
        /// Добавление позиции в накладную
        /// </summary>
        public virtual void AddRow(WriteoffWaybillRow row)
        {
            ValidationUtils.Assert(IsDraft, String.Format("Невозможно добавить позицию в накладную со статусом «{0}».", State.GetDisplayName()));

            if (Rows.Any(x => x.ReceiptWaybillRow == row.ReceiptWaybillRow))
            {
                throw new Exception("Позиция накладной по данной партии и товару уже добавлена.");
            }

            rows.Add(row);
            row.WriteoffWaybill = this;
        }
Exemple #23
0
        /// <summary>
        /// Есть ли возможность отменить проведение прихода
        /// </summary>
        /// <param name="checkIfCreatedFromProductionOrderBatch">true - операция запрещается, если приход создан по партии заказа</param>
        public virtual void CheckPossibilityToCancelAcceptance(bool checkIfCreatedFromProductionOrderBatch)
        {
            ValidationUtils.Assert(!IsReceipted, "Невозможно отменить проводку принятой накладной.");
            ValidationUtils.Assert(IsAccepted, "Невозможно отменить проводку непроведенной накладной.");
            ValidationUtils.Assert(!Rows.Any(x => x.AreOutgoingWaybills), "Невозможно отменить проводку накладной, т.к. ее позиции участвуют в дальнейшем товародвижении.");

            if (checkIfCreatedFromProductionOrderBatch)
            {
                ValidationUtils.Assert(!IsCreatedFromProductionOrderBatch,
                                       "Невозможно отменить проводку накладной, созданной по партии заказа, возможна только автоматическая отмена при удалении прихода из деталей партии заказа.");
            }
        }
Exemple #24
0
        /// <summary>
        /// Добавление позиции в накладную
        /// </summary>
        public virtual void AddRow(MovementWaybillRow row)
        {
            ValidationUtils.Assert(!IsAccepted, String.Format("Невозможно добавить позицию в накладную со статусом «{0}».", State.GetDisplayName()));

            ValidationUtils.Assert(!Rows.Any(x => x.ReceiptWaybillRow.Id == row.ReceiptWaybillRow.Id), "Позиция накладной по данной партии и товару уже добавлена.");

            ValidationUtils.Assert(row.ValueAddedTax.Value == 0M || Sender != Recipient,
                                   "Организации-отправитель и получатель совпадают. Невозможно установить ненулевой НДС для позиции.");

            rows.Add(row);
            row.MovementWaybill = this;
        }
Exemple #25
0
        public bool HasWon()
        {
            if (won)
            {
                return(won);
            }

            won = Rows.Any(row => row.All(c => c.HasBeenCalled)) ||
                  Columns.Any(column => column.All(c => c.HasBeenCalled));

            return(won);
        }
Exemple #26
0
 public void WaitUntilRowAppear(Func <TrRow, bool> condition)
 {
     try
     {
         Wait.WaitUntil((d) =>
         {
             Refresh();
             return(Rows.Any(condition));
         });
     }
     catch (WebDriverTimeoutException) { }
 }
Exemple #27
0
        public override string ToString()
        {
            var builder = new StringBuilder();

            // find the longest column by searching each row
            var columnLengths = ColumnLengths();

            // set right alinment if is a number
            var columnAlignment = Enumerable.Range(0, Columns.Count)
                                  .Select(GetNumberAlignment)
                                  .ToList();

            // create the string format with padding
            var format = Enumerable.Range(0, Columns.Count)
                         .Select(i => " | {" + i + "," + columnAlignment[i] + columnLengths[i] + "}")
                         .Aggregate((s, a) => s + a) + " |";

            // find the longest formatted line
            var maxRowLength  = Math.Max(0, Rows.Any() ? Rows.Max(row => string.Format(format, row).Length) : 0);
            var columnHeaders = string.Format(format, Columns.ToArray());

            // longest line is greater of formatted columnHeader and longest row
            var longestLine = Math.Max(maxRowLength, columnHeaders.Length);

            // add each row
            var results = Rows.Select(row => string.Format(format, row)).ToList();

            // create the divider
            var divider = " " + string.Join("", Enumerable.Repeat("-", longestLine - 1)) + " ";

            builder.AppendLine(divider);

            if (Options.ShowHeader)
            {
                builder.AppendLine(columnHeaders);
            }

            foreach (var row in results)
            {
                builder.AppendLine(divider);
                builder.AppendLine(row);
            }

            builder.AppendLine(divider);

            if (Options.EnableCount)
            {
                builder.AppendLine("");
                builder.AppendFormat(" Count: {0}", Rows.Count);
            }

            return(builder.ToString());
        }
Exemple #28
0
        public void CreateUser(string username, string passwordHash)
        {
            RFStatic.Log.Debug(this, "CreateUser {0}", username);
            username = username.Trim().ToLower();
            if (HasUser(username))
            {
                throw new RFSystemException(this, "User {0} already present in key vault.");
            }

            var firstUserEver = !Rows.Any(r => r.Key.KeyID == LOGIN_KEY_ID);

            ResetLogin(username, passwordHash);
        }
Exemple #29
0
        public virtual void CheckPossibilityToCancelReceipt()
        {
            if (!IsReceipted)
            {
                throw new Exception(String.Format("Отменить приемку можно только для накладной со статусами «{0}», «{1}» или «{2}».",
                                                  MovementWaybillState.ReceiptedWithoutDivergences.GetDisplayName(), MovementWaybillState.ReceiptedWithDivergences.GetDisplayName(), MovementWaybillState.ReceiptedAfterDivergences.GetDisplayName()));
            }

            if (Rows.Any(x => x.ShippedCount + x.FinallyMovedCount > 0))
            {
                throw new Exception("Невозможно отменить приемку, так как товар по накладной уже был отгружен.");
            }
        }
Exemple #30
0
        public T?Derivative(TimeSpan timeSpan)
        {
            if (!Rows.Any())
            {
                return(null);
            }
            var    firstValue = PreviousRow ?? Rows.First();
            var    lastValue  = Rows.Last();
            var    diffTime   = lastValue.TimeUtc - firstValue.TimeUtc;
            double diffValue  = lastValue.Value.ToDouble() - firstValue.Value.ToDouble();
            var    result     = diffValue * timeSpan.Ticks / diffTime.Ticks;

            return(result.ToType <T>());
        }