public List <Specification> GetSpecificationData()
        {
            int rowCounter = 1;
            List <Specification> specification = new List <Specification>();
            CultureInfo          culture       = CultureInfo.CreateSpecificCulture("en-US");

            var recalculatedTimeReportRows = new List <TimeReportRow>();

            foreach (var row in _timeReport.TimeReportRows.OrderByDescending(x => x.RegularLabor.Value))
            {
                if (recalculatedTimeReportRows.Sum(x => x.RegularLabor.Value) >= _paymentData.HoursInvoiced)
                {
                    break;
                }

                recalculatedTimeReportRows.Add(new TimeReportRow()
                {
                    Date          = row.Date,
                    Task          = row.Task,
                    RegularLabor  = row.RegularLabor,
                    Description   = row.Description,
                    OffHours      = row.OffHours,
                    OvertimeLabor = row.OvertimeLabor,
                    ProjectName   = row.ProjectName
                });
            }

            if (recalculatedTimeReportRows.Sum(x => x.RegularLabor.Value) != _paymentData.HoursInvoiced)
            {
                decimal hoursDiff = recalculatedTimeReportRows.Sum(x => x.RegularLabor.Value) - _paymentData.HoursInvoiced;

                var firstRow = recalculatedTimeReportRows.FirstOrDefault();

                if (firstRow == null)
                {
                    return(new List <Specification>());
                }

                firstRow.RegularLabor = firstRow.RegularLabor - hoursDiff;
            }

            var groupedTasksData = recalculatedTimeReportRows.OrderBy(x => x.Date).GroupBy(x => x.Description);

            foreach (var task in groupedTasksData.ToList())
            {
                specification.Add(new Specification()
                {
                    Hours              = (task.Sum(x => x.RegularLabor) ?? 0),
                    Number             = rowCounter,
                    DeliverDate        = string.Format("'{0}", _dateTo.ToString("dd MMM yyyy")),
                    TaskName           = task.Key,
                    AmountUsd          = (task.Sum(x => x.RegularLabor.Value) * this._hourlyRate).ToString("N", CultureInfo.InvariantCulture),
                    TranslatedTaskName = TranslateTextUsingGoogle.GetTranslateWebRequest(task.Key, "ru")
                });

                rowCounter++;
            }

            return(specification);
        }
        public Employee GetData()
        {
            ///бессмысленный функционал
            ///string[] name = _timeReport.Name.Split(' ').ToArray();

            ///this._invoicerName = name;

            /// находим из Time репорта чисто по имени?

            var contractorsAndContractsDataRow = _contractorsAndContractsData;

            if (contractorsAndContractsDataRow == null)
            {
                throw new Exception("Не найдена строка в контрактах для работника из указанного Time Report. Перепроверьте файлы. (Для корректной работы программмы файлы должны соответсвовать шаблону)");
            }

            var paymentDataRow = _paymentData;

            if (paymentDataRow == null)
            {
                throw new Exception("Не найдена строка в таблице Payment Data для работника из указанного Time Report. Перепроверьте файлы. (Для корректной работы программмы файлы должны соответсвовать шаблону)");
            }

            CultureInfo ci = new CultureInfo("ru-RU");

            _hourlyRate = paymentDataRow.InvoiceAmount / paymentDataRow.HoursInvoiced;
            string amountInwords = NumberToEnglish.ChangeNumericToWords(paymentDataRow.InvoiceAmount);

            var result = new Employee()
            {
                NameEng                = contractorsAndContractsDataRow.NameEng,
                NameRus                = contractorsAndContractsDataRow.NameRus,
                ContractId             = contractorsAndContractsDataRow.ContractId,
                DocSetNumber           = paymentDataRow.DocSetNumber,
                ContractDate           = string.Format("'{0}", contractorsAndContractsDataRow.ContractStartDate.ToString("dd MMM yyyy")),
                ContractDateTranslated = string.Format("'{0}", contractorsAndContractsDataRow.ContractStartDate.ToString("dd MMM yyyy", ci)),
                HoursInvoiced          = paymentDataRow.HoursInvoiced,
                Phone                     = contractorsAndContractsDataRow.Phone,
                ProjectName               = paymentDataRow.ProjectName,
                TotalAmount               = paymentDataRow.InvoiceAmount,
                DocumentSetDate           = string.Format("'{0}", _dateTo.ToString("dd MMM yyyy")),
                DocumentSetDateTranslated = string.Format("'{0}", _dateTo.ToString("dd MMM yyyy", ci)),
                DatesCovered              = GetDatesRange(),
                AmountInwords             = amountInwords,
                AmountInWordsTranslated   = TranslateTextUsingGoogle.GetTranslateForAmount(amountInwords, "ru")
            };

            return(result);
        }