diff --git a/WebAPI/dataProcessors/t3.SingleSource.processor.cs b/WebAPI/dataProcessors/t3.SingleSource.processor.cs index 470cb38..208e6b8 100644 --- a/WebAPI/dataProcessors/t3.SingleSource.processor.cs +++ b/WebAPI/dataProcessors/t3.SingleSource.processor.cs @@ -1,48 +1,53 @@ -using DiunaBIWebAPI.dataProcessors; -using Google.Apis.Sheets.v4; +using DiunaBIWebAPI.dataProcessors; +using Google.Apis.Sheets.v4; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System; -using System.Globalization; +using System.Globalization; using WebAPI.Controllers; -using WebAPI.Models; - -namespace WebAPI.dataProcessors -{ - public class T3SingleSourceProcessor - { +using WebAPI.Models; + +namespace WebAPI.dataProcessors +{ + public class T3SingleSourceProcessor + { private readonly AppDbContext db; - private readonly SpreadsheetsResource.ValuesResource googleSheetValues; - private readonly LayersController controller; - - public T3SingleSourceProcessor( - AppDbContext _db, - SpreadsheetsResource.ValuesResource _googleSheetValues, - LayersController _controller) - { - db = _db; - googleSheetValues = _googleSheetValues; - controller = _controller; - } - + private readonly SpreadsheetsResource.ValuesResource googleSheetValues; + private readonly LayersController controller; + + public T3SingleSourceProcessor( + AppDbContext _db, + SpreadsheetsResource.ValuesResource _googleSheetValues, + LayersController _controller) + { + db = _db; + googleSheetValues = _googleSheetValues; + controller = _controller; + } + public void process(Layer processWorker) { int year = int.Parse(processWorker?.Records?.SingleOrDefault(x => x.Code == "Year")?.Desc1!); int month = int.Parse(processWorker?.Records?.SingleOrDefault(x => x.Code == "Month")?.Desc1!); - string? source = processWorker?.Records?.SingleOrDefault(x => x.Code == "Source")?.Desc1; - if (source == null) + string? sourceLayer = processWorker?.Records?.SingleOrDefault(x => x.Code == "SourceLayer")?.Desc1; + if (sourceLayer == null) { - throw new Exception("Source record not found"); + throw new Exception("SourceLayer record not found"); } - Layer? sourceImportWorker = db.Layers.SingleOrDefault(x => x.Name == source); + Layer? sourceImportWorker = db.Layers.SingleOrDefault(x => x.Name == sourceLayer); if (sourceImportWorker == null) { throw new Exception("SourceImportWorkerL layer not found"); } + string? source= processWorker?.Records?.SingleOrDefault(x => x.Code == "Source")?.Desc1; + if (sourceLayer == null) + { + throw new Exception("Source record not found"); + } - Layer? processedLayer = db.Layers - .Where(x => x.ParentId == processWorker!.Id) - .OrderByDescending(x => x.CreatedAt) + Layer? processedLayer = db.Layers + .Where(x => x.ParentId == processWorker!.Id) + .OrderByDescending(x => x.CreatedAt) .FirstOrDefault(); bool isNew = false; @@ -64,48 +69,48 @@ namespace WebAPI.dataProcessors processedLayer.ModifiedAt = DateTime.UtcNow; } processedLayer.Sources = new List(); - processedLayer.ModifiedById = Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D"); - processedLayer.ModifiedAt = DateTime.UtcNow; - - - List newRecords = new List(); - + processedLayer.ModifiedById = Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D"); + processedLayer.ModifiedAt = DateTime.UtcNow; + + + List newRecords = new List(); + List dataSources = db.Layers - .Include(x => x.Records) - .Where(x => x.ParentId == sourceImportWorker.Id - && !x.IsDeleted) - .OrderBy(x => x.CreatedAt) - .ToList(); + .Include(x => x.Records) + .Where(x => x.ParentId == sourceImportWorker.Id + && !x.IsDeleted) + .OrderBy(x => x.CreatedAt) + .ToList(); if (dataSources.Count == 0) - { + { throw new Exception($"DataSources are empty, {sourceImportWorker.Name}"); - } - - - List allRecords = dataSources.SelectMany(x => x.Records!).ToList(); - + } + + + List allRecords = dataSources.SelectMany(x => x.Records!).ToList(); + foreach (Record baseRecord in dataSources.Last()?.Records!) - { - List codeRecords = allRecords.Where(x => x.Code == baseRecord.Code).ToList(); - + { + List codeRecords = allRecords.Where(x => x.Code == baseRecord.Code).ToList(); + Record processedRecord = new Record - { + { Id = Guid.NewGuid(), Code = baseRecord.Code, CreatedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow - }; - - int lastDayInMonth = DateTime.DaysInMonth(year, month); - float previousValue = 0; - //day 1 - float firstVal = codeRecords - .Where(x => x.CreatedAt.Date <= new DateTime(year, month, 1)) - .OrderByDescending(x => x.CreatedAt) - .FirstOrDefault()?.Value1 ?? 0; - ProcessHelper.setValue(processedRecord, 1, firstVal); - previousValue = firstVal; - //days 2-29/30 + }; + + int lastDayInMonth = DateTime.DaysInMonth(year, month); + float previousValue = 0; + //day 1 + float firstVal = codeRecords + .Where(x => x.CreatedAt.Date <= new DateTime(year, month, 1)) + .OrderByDescending(x => x.CreatedAt) + .FirstOrDefault()?.Value1 ?? 0; + ProcessHelper.setValue(processedRecord, 1, firstVal); + previousValue = firstVal; + //days 2-29/30 for (int i=2; i