PushResults ProcessPriceFiles()
        {
            var result = new PushResults();

            var readyFiles = _readyDirectory.GetReadyFiles(FileTypes.Price);

            if (!readyFiles.Any())
            {
                _logger.Information("Found no {FileType} files to process.", FileTypes.Price);
            }

            foreach (var readyfile in readyFiles)
            {
                var vendors = _fileHelpersCache.Get<VendorPriceEntry>()
                    .ReadString(readyfile.ReadToEnd())
                    .GroupBy(x => x.Vendor);

                foreach (var v in vendors)
                {
                    _costsUpdater.Update(new UpdateRequest<PriceHeader, VendorPriceEntry>
                    {
                        Header = new PriceHeader(),
                        Details = v.ToList()
                    });
                }

                _archiveDirectory.ArchiveFile(readyfile);
            }

            return result;
        }
        PushResults ProcessFiles(PushOptions options)
        {
            var result = new PushResults();

            if (options.ProcessPrices)
            {
                var r = ProcessPriceFiles();
                result.Merge(r);
            }

            if (options.ProcessQty)
            {
                var r = ProcessQtyFiles();
                result.Merge(r);
            }

            return result;
        }
        PushResults ProcessQtyFiles()
        {
            var result = new PushResults();

            var readyFiles = _readyDirectory.GetReadyFiles(FileTypes.Qty);

            if (!readyFiles.Any())
            {
                _logger.Information("Found no {FileType} files to process.", FileTypes.Qty);
            }

            foreach (var readyfile in readyFiles)
            {
                var vendors = _fileHelpersCache.Get<VendorQtyEntry>()
                    .ReadString(readyfile.ReadToEnd())
                    .GroupBy(x => x.VendorJdeId);

                //convert rows into a request to update
                //batch based
                foreach (var v in vendors)
                {
                    var timeOfDay = _systemClock.Now();

                    var header = new UpdateQuantityHeader
                    {
                        EffectiveDate = timeOfDay,

                        //TODO: Convert to supplier address number
                        VendorJdeId = v.Key,

                        //TODO: populate
                        DocumentNumber = timeOfDay.Millisecond,

                        //TODO: populate
                        RecordSequence = timeOfDay.DayOfYear,

                        //"164635"
                        TimeOfDay = JdeDate.ToJdeTime(timeOfDay),
                    };
                    var request = new UpdateRequest<UpdateQuantityHeader, VendorQtyEntry>
                    {
                        Header = header,
                        Details = v.ToList()
                    };

                    var r = _inventoryUpdater.Value.Update(request);
                    result.AddMessages(r.Messages);
                }

                _archiveDirectory.ArchiveFile(readyfile);
            }

            return result;
        }
 public void Merge(PushResults pushResults)
 {
     Messages.AddRange(pushResults.Messages);
 }