diff --git a/WebAPI/Controllers/LayersController.cs b/WebAPI/Controllers/LayersController.cs index e2ba6c6..fcbdcdb 100644 --- a/WebAPI/Controllers/LayersController.cs +++ b/WebAPI/Controllers/LayersController.cs @@ -507,7 +507,7 @@ public class LayersController : Controller } case "T4-R2": { - var processor = new T4R2Processor(_db, this, _logsController); + var processor = new T4R2Processor(_db, this, _logsController, _googleSheetValues); processor.Process(processWorker); _logsController.AddEntry(new LogEntry diff --git a/WebAPI/dataProcessors/t4.r2.processor.cs b/WebAPI/dataProcessors/t4.r2.processor.cs index 1a3a0aa..15abee3 100644 --- a/WebAPI/dataProcessors/t4.r2.processor.cs +++ b/WebAPI/dataProcessors/t4.r2.processor.cs @@ -1,4 +1,7 @@ -using DiunaBIWebAPI.dataProcessors; +using System.Globalization; +using DiunaBIWebAPI.dataProcessors; +using Google.Apis.Sheets.v4; +using Google.Apis.Sheets.v4.Data; using Microsoft.EntityFrameworkCore; using WebAPI.Controllers; using WebAPI.Models; @@ -11,15 +14,19 @@ public class T4R2Processor private readonly AppDbContext _db; private readonly LayersController _controller; private readonly LogsController _logsController; + private readonly SpreadsheetsResource.ValuesResource _googleSheetValues; public T4R2Processor( AppDbContext db, LayersController controller, - LogsController logsController) + LogsController logsController, + SpreadsheetsResource.ValuesResource googleSheetValues + ) { _db = db; _controller = controller; _logsController = logsController; + _googleSheetValues = googleSheetValues; } public void Process(Layer processWorker) @@ -199,5 +206,147 @@ public class T4R2Processor _controller.SaveRecords(processedLayer.Id, newRecords, Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D")); _db.SaveChanges(); + + UpdateReport(); + } + + private void UpdateReport() + { + const string sheetId = "1FsUmk_YRIeeGzFCX9tuUJCaLyRtjutX2ZGAEU1DMfJQ"; + const string reportSheetName = "Raport_R2_Sprzedaz"; + const string invoicesSheetName = "Raport_R2_Faktury"; + var request = _googleSheetValues.Get(sheetId, "C4:Z4"); + var response = request.Execute(); + + var r2 = _db.Layers + .Where(x => x.Number == 1501) + .Include(x => x.Records) + .FirstOrDefault(); + + const int startRow = 6; + + var codesRow = response.Values[0]; + for (var i = 1; i <= 12; i++) + { + var values = new List(); + var month = i < 10 ? $"0{i}" : i.ToString(); + var row = (startRow + i).ToString(); + foreach (string code in codesRow) + { + var record = r2!.Records?.SingleOrDefault(x => x.Code == $"{code}{month}"); + if (record != null) + { + values.Add(record.Value1!.Value); + } + else + { + values.Add("0"); + } + } + var valueRange = new ValueRange + { + Values = new List> { values } + }; + var update = _googleSheetValues.Update(valueRange, sheetId, $"{reportSheetName}!C{row}:XZ{row}"); + update.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + update.Execute(); + } + + // sum + var valuesSum = new List(); + var emptyRow = new List(); + var rowEmpty = (startRow + 13).ToString(); + var rowSum = (startRow + 14).ToString(); + foreach (string code in codesRow) + { + var record = r2!.Records?.SingleOrDefault(x => x.Code == $"{code}13"); + emptyRow.Add(""); + if (record != null) + { + valuesSum.Add(record.Value1!.Value); + } + else + { + valuesSum.Add("0"); + } + } + // insert empty row before sum + var valueRangeEmpty = new ValueRange + { + Values = new List> { emptyRow } + }; + var updateEmpty = _googleSheetValues.Update(valueRangeEmpty, sheetId, $"{reportSheetName}!C{rowEmpty}:XZ{rowEmpty}"); + updateEmpty.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateEmpty.Execute(); + + var valueRangeSum = new ValueRange + { + Values = new List> { valuesSum } + }; + var updateSum = _googleSheetValues.Update(valueRangeSum, sheetId, $"{reportSheetName}!C{rowSum}:XZ{rowSum}"); + updateSum.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateSum.Execute(); + + // update time + var timeUtc = new List + { + r2!.ModifiedAt.ToString(CultureInfo.InvariantCulture) + }; + var valueRangeUtcTime = new ValueRange + { + Values = new List> { timeUtc } + }; + var updateTimeUtc = _googleSheetValues.Update(valueRangeUtcTime, sheetId, $"{reportSheetName}!G1"); + updateTimeUtc.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateTimeUtc.Execute(); + + var updateTimeUtc2 = _googleSheetValues.Update(valueRangeUtcTime, sheetId, $"{invoicesSheetName}!G1"); + updateTimeUtc2.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateTimeUtc2.Execute(); + + var warsawTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); + var warsawTime = TimeZoneInfo.ConvertTimeFromUtc(r2.ModifiedAt.ToUniversalTime(), warsawTimeZone); + var timeWarsaw = new List + { + warsawTime.ToString(CultureInfo.InvariantCulture) + }; + var valueRangeWarsawTime = new ValueRange + { + Values = new List> { timeWarsaw } + }; + var updateTimeWarsaw = _googleSheetValues.Update(valueRangeWarsawTime, sheetId, $"{reportSheetName}!G2"); + updateTimeWarsaw.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateTimeWarsaw.Execute(); + + var updateTimeWarsaw2 = _googleSheetValues.Update(valueRangeWarsawTime, sheetId, $"{invoicesSheetName}!G2"); + updateTimeWarsaw2.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateTimeWarsaw2.Execute(); + + //invoices + + var invoices = r2.Records!.Where(x => x.Code!.Length == 12) + .OrderByDescending(x => x.Code); + + var invoicesValues = new List>(); + foreach (var invoice in invoices) + { + var invoiceDate = + DateTime.ParseExact(invoice.Code!.Substring(0, 8), "yyyyMMdd", CultureInfo.InvariantCulture) + .ToString("d"); + var invoiceRow = new List + { + invoiceDate, + "", + invoice.Desc1!, + invoice.Value1! + }; + invoicesValues.Add(invoiceRow); + } + + var invoicesValueRange = new ValueRange { Values = invoicesValues }; + var updateInvoices = _googleSheetValues.Update(invoicesValueRange, sheetId, $"{invoicesSheetName}!A6:E"); + updateInvoices.ValueInputOption = + SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED; + updateInvoices.Execute(); } } \ No newline at end of file