diff --git a/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.html b/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.html index bac4b73..e5495f1 100644 --- a/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.html +++ b/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.html @@ -4,26 +4,25 @@ Layer details - - + Name - + Source - + Created @@ -50,6 +49,7 @@ + Checksum: {{valueSum}} diff --git a/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.ts b/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.ts index 55b48b2..2219d4a 100644 --- a/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.ts +++ b/Frontend/src/app/modules/layers/layer-detail/layer-detail.component.ts @@ -5,7 +5,6 @@ import { UntypedFormGroup, UntypedFormBuilder, FormsModule, ReactiveFormsModule import { MatSort, MatSortable, MatSortModule } from '@angular/material/sort'; import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { ActivatedRoute } from '@angular/router'; -import { AuthService } from 'src/app/auth/auth.service'; import { Layer } from 'src/app/models/layer.model'; import { Record } from 'src/app/models/record.model'; import { NotificationsService } from 'src/app/services/notifications.service'; @@ -32,6 +31,8 @@ export class LayerDetailComponent implements OnInit { public form!: UntypedFormGroup; public document!: Layer; + valueSum = 0; + displayedColumns = environment.views.layers.recordColumns.split("|"); dataSource!: MatTableDataSource; @@ -54,6 +55,7 @@ export class LayerDetailComponent implements OnInit { this.form.disable(); this.document.created = `${this.datePipe.transform(this.document.createdAt?.toDate(), 'short')}, ${this.document.createdBy?.userName}`; this.dataSource.sort.sort({ id: 'code', start: 'desc' } as MatSortable); + this.valueSum = this.document.records.map(t => t.value || 0).reduce((acc, value) => acc + value, 0); } private async load(): Promise { return await Layer.getById(this.route$.snapshot.paramMap.get('id') || "", this.http$); diff --git a/Frontend/src/environments/environment.ts b/Frontend/src/environments/environment.ts index 972a8b7..4933ee1 100644 --- a/Frontend/src/environments/environment.ts +++ b/Frontend/src/environments/environment.ts @@ -6,15 +6,15 @@ export const environment = { appEnvironment: "local", production: false, api: { - //url: "http://localhost:5400/api" - url: "https://diunabi-morska.bim-it.pl/api" + url: "http://localhost:5400/api" + //url: "https://diunabi-morska.bim-it.pl/api" }, google: { clientId: "107631825312-bkfe438ehr9k9ecb2h76g802tj6advma.apps.googleusercontent.com" }, views: { layers: { - recordColumns: "code|value|desc1" + recordColumns: "code|value" } } }; diff --git a/WebAPI/Controllers/LayersController.cs b/WebAPI/Controllers/LayersController.cs index 981b09c..67220ce 100644 --- a/WebAPI/Controllers/LayersController.cs +++ b/WebAPI/Controllers/LayersController.cs @@ -141,6 +141,25 @@ namespace WebAPI.Controllers layer.Name = $"W{layer.Number}-I-{sheetName}-{parsedSheet.date}-{DateTime.Now.ToString("yyyyMMddHHmm")}"; AddLayer(layer, Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D")); + return Ok("OK"); + } + + [HttpGet] + [Route("autoImportMorska/{apiKey}")] + [AllowAnonymous] + public IActionResult autoImportMorska(string apiKey) + { + if (Request.Host.Value != "localhost:5400" || apiKey != configuration["apiKey"]) + { + return Unauthorized(); + } + + morskaK5Parser parser = new morskaK5Parser(googleSheetValues, db); + Layer layer = parser.parse(); + + + AddLayer(layer, Guid.Parse("F392209E-123E-4651-A5A4-0B1D6CF9FF9D")); + return Ok("OK"); } diff --git a/WebAPI/appsettings.Development.json b/WebAPI/appsettings.Development.json index bc0bcd1..8a7314a 100644 --- a/WebAPI/appsettings.Development.json +++ b/WebAPI/appsettings.Development.json @@ -12,7 +12,7 @@ }, "GoogleClientId": "107631825312-bkfe438ehr9k9ecb2h76g802tj6advma.apps.googleusercontent.com", "Secret": "8393AF8EAEF8478CB738D44858690F9C7E2D19F65896DD9FBAA3EB2A6F493E80", - "apiKey": "9ecb2h76g802tF65896DD9FBAA3EB2A6F493", + "apiKey": "10763478CB738D4ecb2h76g803478CB738D4e", "Kestrel": { "Endpoints": { "Http": { diff --git a/WebAPI/dataParsers/morskaK5.parser.cs b/WebAPI/dataParsers/morskaK5.parser.cs new file mode 100644 index 0000000..97273c9 --- /dev/null +++ b/WebAPI/dataParsers/morskaK5.parser.cs @@ -0,0 +1,61 @@ +using Google.Apis.Sheets.v4; +using System.Globalization; +using WebAPI.Models; + +namespace WebAPI.dataParsers +{ + public class morskaK5Parser + { + private SpreadsheetsResource.ValuesResource googleSheetValues; + private AppDbContext db; + + public morskaK5Parser( + SpreadsheetsResource.ValuesResource _googleSheetValues, + AppDbContext _db) + { + googleSheetValues = _googleSheetValues; + db = _db; + } + + public Layer parse() + { + Layer layer = new Layer(); + layer.Source = "GoogleSheet"; + + string sheetId = "1ZzndU8HjYqz5VKCcrVHBOFW8fqpYfwquclznX9q39Yk"; + + var range = "Sierpien_2023!B3:AR5"; + + var request = googleSheetValues.Get(sheetId, range); + var response = request.Execute(); + var data = response.Values; + + layer.Source = "GoogleSheet"; + layer.Number = db.Layers.Count() + 1; + layer.Name = $"L{layer.Number}-I-{data[0][1]}-{data[0][2]}/{data[0][3]}-{DateTime.Now.ToString("yyyyMMddHHmm")}"; + + List records = new List(); + + for (int i = 1; i < data[1].Count; i++) + { + float value; + + if ( + data[1][i].ToString()?.Length > 0 && + float.TryParse(data[2][i].ToString(), CultureInfo.GetCultureInfo("pl-PL"), out value)) + { + Record record = new Record(); + record.Id = Guid.NewGuid(); + record.Code = data[1][i].ToString(); + record.Value = value; + record.CreatedAt = DateTime.UtcNow; + record.ModifiedAt = DateTime.UtcNow; + records.Add(record); + }; + + } + layer.Records = records; + return layer; + } + } +}