Insert R2 data into GSheet

This commit is contained in:
Michał Zieliski
2024-08-07 20:18:55 +02:00
parent 945a227473
commit bfea657f22
2 changed files with 152 additions and 3 deletions

View File

@@ -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<object>();
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<IList<object>> { 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<object>();
var emptyRow = new List<object>();
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<IList<object>> { 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<IList<object>> { 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<object>
{
r2!.ModifiedAt.ToString(CultureInfo.InvariantCulture)
};
var valueRangeUtcTime = new ValueRange
{
Values = new List<IList<object>> { 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<object>
{
warsawTime.ToString(CultureInfo.InvariantCulture)
};
var valueRangeWarsawTime = new ValueRange
{
Values = new List<IList<object>> { 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<IList<object>>();
foreach (var invoice in invoices)
{
var invoiceDate =
DateTime.ParseExact(invoice.Code!.Substring(0, 8), "yyyyMMdd", CultureInfo.InvariantCulture)
.ToString("d");
var invoiceRow = new List<object>
{
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();
}
}