Implemetato databese locale con EntityFramework
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
# Specific to the EFCore-Blazor sample app
|
# Specific to the EFCore-Blazor sample app
|
||||||
*.db
|
*.db
|
||||||
|
*.db3
|
||||||
*.db-shm
|
*.db-shm
|
||||||
*.db-wal
|
*.db-wal
|
||||||
|
|
||||||
|
|||||||
12
.idea/.idea.SteUp/.idea/dataSources.xml
generated
Normal file
12
.idea/.idea.SteUp/.idea/dataSources.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||||
|
<data-source source="LOCAL" name="design-time" uuid="3ba1249b-165e-400b-a102-6ea88e0757ff">
|
||||||
|
<driver-ref>sqlite.xerial</driver-ref>
|
||||||
|
<synchronize>true</synchronize>
|
||||||
|
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
|
||||||
|
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/SteUp.Data/design-time.db3</jdbc-url>
|
||||||
|
<working-dir>$ProjectFileDir$</working-dir>
|
||||||
|
</data-source>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
27
SteUp.Data/LocalDb/AppDbContext.cs
Normal file
27
SteUp.Data/LocalDb/AppDbContext.cs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SteUp.Shared.Core.Entities;
|
||||||
|
|
||||||
|
namespace SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
|
||||||
|
{
|
||||||
|
public DbSet<Ispezione> Ispezioni => Set<Ispezione>();
|
||||||
|
public DbSet<Scheda> Schede => Set<Scheda>();
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Ispezione>()
|
||||||
|
.HasKey(x => new { x.CodMdep, x.Data, x.Rilevatore });
|
||||||
|
|
||||||
|
modelBuilder.Entity<Scheda>()
|
||||||
|
.HasOne(x => x.Ispezione)
|
||||||
|
.WithMany(x => x.Schede)
|
||||||
|
.HasForeignKey(x => new { x.CodMdep, x.Data, x.Rilevatore })
|
||||||
|
.OnDelete(DeleteBehavior.Cascade);
|
||||||
|
|
||||||
|
modelBuilder.Entity<Scheda>()
|
||||||
|
.HasIndex(x => new { x.CodMdep, x.Data, x.Rilevatore });
|
||||||
|
}
|
||||||
|
}
|
||||||
16
SteUp.Data/LocalDb/AppDbContextFactory.cs
Normal file
16
SteUp.Data/LocalDb/AppDbContextFactory.cs
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Design;
|
||||||
|
|
||||||
|
namespace SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
|
||||||
|
{
|
||||||
|
public AppDbContext CreateDbContext(string[] args)
|
||||||
|
{
|
||||||
|
var options = new DbContextOptionsBuilder<AppDbContext>()
|
||||||
|
.UseSqlite("Data Source=design-time.db3")
|
||||||
|
.Options;
|
||||||
|
|
||||||
|
return new AppDbContext(options);
|
||||||
|
}
|
||||||
|
}
|
||||||
12
SteUp.Data/LocalDb/DbInitializer.cs
Normal file
12
SteUp.Data/LocalDb/DbInitializer.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SteUp.Shared.Core.Interface.LocalDb;
|
||||||
|
|
||||||
|
namespace SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
public class DbInitializer(AppDbContext db) : IDbInitializer
|
||||||
|
{
|
||||||
|
public async Task InitializeAsync()
|
||||||
|
{
|
||||||
|
await db.Database.MigrateAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
17
SteUp.Data/LocalDb/DbPathProvider.cs
Normal file
17
SteUp.Data/LocalDb/DbPathProvider.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using Microsoft.Maui.Storage;
|
||||||
|
|
||||||
|
namespace SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IDbPathProvider
|
||||||
|
{
|
||||||
|
string GetDbPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DbPathProvider : IDbPathProvider
|
||||||
|
{
|
||||||
|
private const string DbName = "steup_db.db3";
|
||||||
|
|
||||||
|
public string GetDbPath() =>
|
||||||
|
Path.Combine(FileSystem.AppDataDirectory, DbName);
|
||||||
|
}
|
||||||
127
SteUp.Data/LocalDb/EntityServices/IspezioniService.cs
Normal file
127
SteUp.Data/LocalDb/EntityServices/IspezioniService.cs
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SteUp.Shared.Core.Entities;
|
||||||
|
using SteUp.Shared.Core.Interface.LocalDb;
|
||||||
|
|
||||||
|
namespace SteUp.Data.LocalDb.EntityServices;
|
||||||
|
|
||||||
|
public class IspezioniService(AppDbContext db) : IIspezioniService
|
||||||
|
{
|
||||||
|
public Task<Ispezione?> GetIspezioneAsync(string codMdep, DateOnly data, string rilevatore) =>
|
||||||
|
db.Ispezioni
|
||||||
|
.Include(x => x.Schede)
|
||||||
|
.FirstOrDefaultAsync(x =>
|
||||||
|
x.CodMdep == codMdep &&
|
||||||
|
x.Data == data &&
|
||||||
|
x.Rilevatore == rilevatore);
|
||||||
|
|
||||||
|
public Task<List<Ispezione>> GetAllIspezioniWithSchedeAsync() =>
|
||||||
|
db.Ispezioni
|
||||||
|
.Include(x => x.Schede)
|
||||||
|
.AsNoTracking()
|
||||||
|
.OrderByDescending(x => x.Data)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
public async Task AddIspezioneAsync(Ispezione ispezione)
|
||||||
|
{
|
||||||
|
db.Ispezioni.Add(ispezione);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Ispezione> GetOrCreateIspezioneAsync(string codMdep, DateOnly data, string rilevatore)
|
||||||
|
{
|
||||||
|
var existing = await db.Ispezioni
|
||||||
|
.Include(x => x.Schede)
|
||||||
|
.FirstOrDefaultAsync(x =>
|
||||||
|
x.CodMdep == codMdep &&
|
||||||
|
x.Data == data &&
|
||||||
|
x.Rilevatore == rilevatore);
|
||||||
|
|
||||||
|
if (existing != null)
|
||||||
|
return existing;
|
||||||
|
|
||||||
|
var created = new Ispezione
|
||||||
|
{
|
||||||
|
CodMdep = codMdep,
|
||||||
|
Data = data,
|
||||||
|
Rilevatore = rilevatore
|
||||||
|
};
|
||||||
|
|
||||||
|
db.Ispezioni.Add(created);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cancella l'ispezione e tutte le schede collegate.
|
||||||
|
/// </summary>
|
||||||
|
public async Task<bool> DeleteIspezioneAsync(string codMdep, DateOnly data, string rilevatore)
|
||||||
|
{
|
||||||
|
var ispezione = await db.Ispezioni
|
||||||
|
.FirstOrDefaultAsync(x =>
|
||||||
|
x.CodMdep == codMdep &&
|
||||||
|
x.Data == data &&
|
||||||
|
x.Rilevatore == rilevatore);
|
||||||
|
|
||||||
|
if (ispezione is null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
db.Ispezioni.Remove(ispezione);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task AddSchedaAsync(string codMdep, DateOnly data, string rilevatore, Scheda scheda)
|
||||||
|
{
|
||||||
|
// assicura che il parent esista
|
||||||
|
await GetOrCreateIspezioneAsync(codMdep, data, rilevatore);
|
||||||
|
|
||||||
|
scheda.CodMdep = codMdep;
|
||||||
|
scheda.Data = data;
|
||||||
|
scheda.Rilevatore = rilevatore;
|
||||||
|
|
||||||
|
db.Schede.Add(scheda);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<Scheda?> GetSchedaAsync(int schedaId) =>
|
||||||
|
db.Schede
|
||||||
|
.AsNoTracking()
|
||||||
|
.FirstOrDefaultAsync(x => x.Id == schedaId);
|
||||||
|
|
||||||
|
public Task<Scheda?> GetSchedaWithIspezioneAsync(int schedaId) =>
|
||||||
|
db.Schede
|
||||||
|
.Include(x => x.Ispezione)
|
||||||
|
.AsNoTracking()
|
||||||
|
.FirstOrDefaultAsync(x => x.Id == schedaId);
|
||||||
|
|
||||||
|
public async Task<bool> DeleteSchedaAsync(int schedaId)
|
||||||
|
{
|
||||||
|
var scheda = await db.Schede.FirstOrDefaultAsync(x => x.Id == schedaId);
|
||||||
|
if (scheda is null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
db.Schede.Remove(scheda);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cancella tutte le schede di una ispezione senza cancellare l'ispezione.
|
||||||
|
/// </summary>
|
||||||
|
public async Task<int> DeleteAllSchedeOfIspezioneAsync(string codMdep, DateOnly data, string rilevatore)
|
||||||
|
{
|
||||||
|
var schede = await db.Schede
|
||||||
|
.Where(s =>
|
||||||
|
s.CodMdep == codMdep &&
|
||||||
|
s.Data == data &&
|
||||||
|
s.Rilevatore == rilevatore)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (schede.Count == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
db.Schede.RemoveRange(schede);
|
||||||
|
return await db.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
102
SteUp.Data/Migrations/20260217143326_InitialCreate.Designer.cs
generated
Normal file
102
SteUp.Data/Migrations/20260217143326_InitialCreate.Designer.cs
generated
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace SteUp.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(AppDbContext))]
|
||||||
|
[Migration("20260217143326_InitialCreate")]
|
||||||
|
partial class InitialCreate
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.13");
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Ispezione", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("CodMdep")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateOnly>("Data")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Rilevatore")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Stato")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("CodMdep", "Data", "Rilevatore");
|
||||||
|
|
||||||
|
b.ToTable("Ispezioni");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Scheda", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("ActivityTypeId")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("CodJfas")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("CodMdep")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateOnly>("Data")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("DescrizioneReparto")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Note")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Responsabile")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Rilevatore")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Scadenza")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CodMdep", "Data", "Rilevatore");
|
||||||
|
|
||||||
|
b.ToTable("Schede");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Scheda", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("SteUp.Shared.Core.Entities.Ispezione", "Ispezione")
|
||||||
|
.WithMany("Schede")
|
||||||
|
.HasForeignKey("CodMdep", "Data", "Rilevatore")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Ispezione");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Ispezione", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Schede");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
71
SteUp.Data/Migrations/20260217143326_InitialCreate.cs
Normal file
71
SteUp.Data/Migrations/20260217143326_InitialCreate.cs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace SteUp.Data.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class InitialCreate : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Ispezioni",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
CodMdep = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Data = table.Column<DateOnly>(type: "TEXT", nullable: false),
|
||||||
|
Rilevatore = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Stato = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Ispezioni", x => new { x.CodMdep, x.Data, x.Rilevatore });
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Schede",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Id = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
.Annotation("Sqlite:Autoincrement", true),
|
||||||
|
CodJfas = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
CodMdep = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
Data = table.Column<DateOnly>(type: "TEXT", nullable: false),
|
||||||
|
Rilevatore = table.Column<string>(type: "TEXT", nullable: false),
|
||||||
|
DescrizioneReparto = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
ActivityTypeId = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Note = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Responsabile = table.Column<string>(type: "TEXT", nullable: true),
|
||||||
|
Scadenza = table.Column<int>(type: "INTEGER", nullable: false)
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
table.PrimaryKey("PK_Schede", x => x.Id);
|
||||||
|
table.ForeignKey(
|
||||||
|
name: "FK_Schede_Ispezioni_CodMdep_Data_Rilevatore",
|
||||||
|
columns: x => new { x.CodMdep, x.Data, x.Rilevatore },
|
||||||
|
principalTable: "Ispezioni",
|
||||||
|
principalColumns: new[] { "CodMdep", "Data", "Rilevatore" },
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Schede_CodMdep_Data_Rilevatore",
|
||||||
|
table: "Schede",
|
||||||
|
columns: new[] { "CodMdep", "Data", "Rilevatore" });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Schede");
|
||||||
|
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Ispezioni");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
99
SteUp.Data/Migrations/AppDbContextModelSnapshot.cs
Normal file
99
SteUp.Data/Migrations/AppDbContextModelSnapshot.cs
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
using SteUp.Data.LocalDb;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace SteUp.Data.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(AppDbContext))]
|
||||||
|
partial class AppDbContextModelSnapshot : ModelSnapshot
|
||||||
|
{
|
||||||
|
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder.HasAnnotation("ProductVersion", "9.0.13");
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Ispezione", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("CodMdep")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateOnly>("Data")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Rilevatore")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Stato")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("CodMdep", "Data", "Rilevatore");
|
||||||
|
|
||||||
|
b.ToTable("Ispezioni");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Scheda", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.Property<string>("ActivityTypeId")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("CodJfas")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("CodMdep")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<DateOnly>("Data")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("DescrizioneReparto")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Note")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Responsabile")
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<string>("Rilevatore")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("TEXT");
|
||||||
|
|
||||||
|
b.Property<int>("Scadenza")
|
||||||
|
.HasColumnType("INTEGER");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CodMdep", "Data", "Rilevatore");
|
||||||
|
|
||||||
|
b.ToTable("Schede");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Scheda", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("SteUp.Shared.Core.Entities.Ispezione", "Ispezione")
|
||||||
|
.WithMany("Schede")
|
||||||
|
.HasForeignKey("CodMdep", "Data", "Rilevatore")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.Navigation("Ispezione");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("SteUp.Shared.Core.Entities.Ispezione", b =>
|
||||||
|
{
|
||||||
|
b.Navigation("Schede");
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
SteUp.Data/SteUp.Data.csproj
Normal file
23
SteUp.Data/SteUp.Data.csproj
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net9.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.13" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.13">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.13" />
|
||||||
|
<PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.1.11" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SteUp.Shared\SteUp.Shared.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
using Microsoft.AspNetCore.Components.Authorization;
|
using System.Data;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using SteUp.Data.LocalDb;
|
||||||
|
using SteUp.Data.LocalDb.EntityServices;
|
||||||
using SteUp.Maui.Core.Services;
|
using SteUp.Maui.Core.Services;
|
||||||
using SteUp.Maui.Core.System;
|
using SteUp.Maui.Core.System;
|
||||||
using SteUp.Maui.Core.System.Network;
|
using SteUp.Maui.Core.System.Network;
|
||||||
@@ -6,6 +10,7 @@ using SteUp.Shared.Core.Data;
|
|||||||
using SteUp.Shared.Core.Data.Contracts;
|
using SteUp.Shared.Core.Data.Contracts;
|
||||||
using SteUp.Shared.Core.Interface;
|
using SteUp.Shared.Core.Interface;
|
||||||
using SteUp.Shared.Core.Interface.IntegryApi;
|
using SteUp.Shared.Core.Interface.IntegryApi;
|
||||||
|
using SteUp.Shared.Core.Interface.LocalDb;
|
||||||
using SteUp.Shared.Core.Interface.System;
|
using SteUp.Shared.Core.Interface.System;
|
||||||
using SteUp.Shared.Core.Interface.System.Network;
|
using SteUp.Shared.Core.Interface.System.Network;
|
||||||
using SteUp.Shared.Core.Services;
|
using SteUp.Shared.Core.Services;
|
||||||
@@ -40,4 +45,16 @@ public static class CoreModule
|
|||||||
builder.Services.AddScoped<AuthenticationStateProvider>(provider =>
|
builder.Services.AddScoped<AuthenticationStateProvider>(provider =>
|
||||||
provider.GetRequiredService<AppAuthenticationStateProvider>());
|
provider.GetRequiredService<AppAuthenticationStateProvider>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void RegisterDbServices(this MauiAppBuilder builder)
|
||||||
|
{
|
||||||
|
builder.Services.AddSingleton<IDbPathProvider, DbPathProvider>();
|
||||||
|
builder.Services.AddDbContext<AppDbContext>((sp, options) =>
|
||||||
|
{
|
||||||
|
var dbPath = sp.GetRequiredService<IDbPathProvider>().GetDbPath();
|
||||||
|
options.UseSqlite($"Filename={dbPath}");
|
||||||
|
});
|
||||||
|
builder.Services.AddSingleton<IDbInitializer, DbInitializer>();
|
||||||
|
builder.Services.AddSingleton<IIspezioniService, IspezioniService>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -46,6 +46,7 @@ namespace SteUp.Maui
|
|||||||
builder.RegisterAppServices();
|
builder.RegisterAppServices();
|
||||||
builder.RegisterIntegryServices();
|
builder.RegisterIntegryServices();
|
||||||
builder.RegisterSystemService();
|
builder.RegisterSystemService();
|
||||||
|
builder.RegisterDbServices();
|
||||||
|
|
||||||
return builder.Build();
|
return builder.Build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,36 +95,37 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<!-- App Icon -->
|
<!-- App Icon -->
|
||||||
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#FDECEA"/>
|
<MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#FDECEA" />
|
||||||
|
|
||||||
<!-- Splash Screen -->
|
<!-- Splash Screen -->
|
||||||
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#FDECEA" BaseSize="128,128"/>
|
<MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#FDECEA" BaseSize="128,128" />
|
||||||
|
|
||||||
<!-- Images -->
|
<!-- Images -->
|
||||||
<MauiImage Include="Resources\Images\*"/>
|
<MauiImage Include="Resources\Images\*" />
|
||||||
<MauiImage Update="Resources\Images\dotnet_bot.svg" BaseSize="168,208"/>
|
<MauiImage Update="Resources\Images\dotnet_bot.svg" BaseSize="168,208" />
|
||||||
|
|
||||||
<!-- Custom Fonts -->
|
<!-- Custom Fonts -->
|
||||||
<MauiFont Include="Resources\Fonts\*"/>
|
<MauiFont Include="Resources\Fonts\*" />
|
||||||
|
|
||||||
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
|
<!-- Raw Assets (also remove the "Resources\Raw" prefix) -->
|
||||||
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)"/>
|
<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CommunityToolkit.Maui" Version="12.2.0"/>
|
<PackageReference Include="CommunityToolkit.Maui" Version="12.2.0" />
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0"/>
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||||
<PackageReference Include="IntegryApiClient.MAUI" Version="1.2.3"/>
|
<PackageReference Include="IntegryApiClient.MAUI" Version="1.2.3" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.12" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="9.0.13" />
|
||||||
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.120"/>
|
<PackageReference Include="Microsoft.Maui.Controls" Version="9.0.120" />
|
||||||
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="9.0.120"/>
|
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="9.0.120" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="9.0.120"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="9.0.120" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.12" />
|
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="9.0.13" />
|
||||||
<PackageReference Include="Sentry.Maui" Version="5.16.1" />
|
<PackageReference Include="Sentry.Maui" Version="5.16.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\SteUp.Shared\SteUp.Shared.csproj"/>
|
<ProjectReference Include="..\SteUp.Shared\SteUp.Shared.csproj" />
|
||||||
|
<ProjectReference Include="..\SteUp.Data\SteUp.Data.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
@page "/ispezione"
|
|
||||||
@using SteUp.Shared.Components.Layout
|
|
||||||
|
|
||||||
<HeaderLayout Title="Ispezione" BackTo="Indietro" Back="true"/>
|
|
||||||
|
|
||||||
<div class="container content pb-safe-area">
|
|
||||||
|
|
||||||
<div class="container-primary-info">
|
|
||||||
<div class="section-primary-info">
|
|
||||||
<div class="inspection-info">
|
|
||||||
<span class="info-title">
|
|
||||||
@SteupDataService.Inspection.PuntoVendita!.CodMdep - @SteupDataService.Inspection.PuntoVendita.Descrizione
|
|
||||||
</span>
|
|
||||||
<span class="info-subtitle">
|
|
||||||
@SteupDataService.Inspection.PuntoVendita.Indirizzo
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="divider"></div>
|
|
||||||
|
|
||||||
<div class="section-info">
|
|
||||||
<div class="section-inspection-info">
|
|
||||||
<div>
|
|
||||||
<span class="info-inspection-title">Data ispezione</span>
|
|
||||||
<MudChip T="string" Size="Size.Small" Color="Color.Default">
|
|
||||||
@SteupDataService.Inspection.DateInspection.ToString("d")
|
|
||||||
</MudChip>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="section-inspection-info">
|
|
||||||
<div>
|
|
||||||
<span class="info-inspection-title">Stato ispezione</span>
|
|
||||||
<MudChip T="string" Size="Size.Small" Color="Color.Warning">
|
|
||||||
IN CORSO
|
|
||||||
</MudChip>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@code {
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
17
SteUp.Shared/Components/Pages/IspezionePage.razor
Normal file
17
SteUp.Shared/Components/Pages/IspezionePage.razor
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
@page "/ispezione"
|
||||||
|
@using SteUp.Shared.Components.Layout
|
||||||
|
@using SteUp.Shared.Components.SingleElements.Card
|
||||||
|
|
||||||
|
<HeaderLayout Title="Ispezione" BackTo="Indietro" Back="true"/>
|
||||||
|
|
||||||
|
<div class="container content pb-safe-area">
|
||||||
|
<InspectionCard Ispezione="SteupDataService.InspectionPageState.Ispezione"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
@page "/ispezioni"
|
|
||||||
@attribute [Authorize]
|
|
||||||
@using SteUp.Shared.Components.Layout
|
|
||||||
|
|
||||||
<HeaderLayout Title="Ispezioni"/>
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
52
SteUp.Shared/Components/Pages/IspezioniPage.razor
Normal file
52
SteUp.Shared/Components/Pages/IspezioniPage.razor
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
@page "/ispezioni"
|
||||||
|
@attribute [Authorize]
|
||||||
|
@using SteUp.Shared.Components.Layout
|
||||||
|
@using SteUp.Shared.Components.Layout.Overlay
|
||||||
|
@using SteUp.Shared.Components.SingleElements
|
||||||
|
@using SteUp.Shared.Components.SingleElements.Card
|
||||||
|
@using SteUp.Shared.Core.Entities
|
||||||
|
@using SteUp.Shared.Core.Interface.LocalDb
|
||||||
|
@inject IIspezioniService IspezioniService
|
||||||
|
|
||||||
|
<HeaderLayout Title="Ispezioni"/>
|
||||||
|
|
||||||
|
<div class="container ispezioni">
|
||||||
|
@if (Ispezioni.IsNullOrEmpty())
|
||||||
|
{
|
||||||
|
<NoDataAvailable Text="Nessuna ispezione effettuata" ImageSource="_content/SteUp.Shared/images/undraw_file-search_cbur.svg"/>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<Virtualize Items="Ispezioni" Context="ispezione">
|
||||||
|
<InspectionCard Ispezione="ispezione" CompactView="true" OnClick="@OnClickIspezione"/>
|
||||||
|
</Virtualize>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<SpinnerOverlay VisibleOverlay="VisibleOverlay"/>
|
||||||
|
|
||||||
|
@code{
|
||||||
|
private List<Ispezione> Ispezioni { get; set; } = [];
|
||||||
|
|
||||||
|
private bool VisibleOverlay { get; set; } = true;
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await LoadData();
|
||||||
|
|
||||||
|
VisibleOverlay = false;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task LoadData()
|
||||||
|
{
|
||||||
|
Ispezioni = await IspezioniService.GetAllIspezioniWithSchedeAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnClickIspezione(Ispezione ispezione)
|
||||||
|
{
|
||||||
|
SteupDataService.InspectionPageState.Ispezione = ispezione;
|
||||||
|
NavigationManager.NavigateTo("/ispezione");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
1
SteUp.Shared/Components/Pages/IspezioniPage.razor.css
Normal file
1
SteUp.Shared/Components/Pages/IspezioniPage.razor.css
Normal file
@@ -0,0 +1 @@
|
|||||||
|
|
||||||
@@ -36,7 +36,7 @@ else
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="my-4 login-footer">
|
<div class="my-4 login-footer">
|
||||||
<span>@GenericSystemService.GetCurrentAppVersion() | Powered by")</span>
|
<span>@GenericSystemService.GetCurrentAppVersion() | Powered by</span>
|
||||||
<img src="_content/SteUp.Shared/images/logoIntegry.svg" class="img-fluid" alt="Integry">
|
<img src="_content/SteUp.Shared/images/logoIntegry.svg" class="img-fluid" alt="Integry">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
104
SteUp.Shared/Components/SingleElements/Card/InspectionCard.razor
Normal file
104
SteUp.Shared/Components/SingleElements/Card/InspectionCard.razor
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
@using SteUp.Shared.Core.Dto
|
||||||
|
@using SteUp.Shared.Core.Entities
|
||||||
|
|
||||||
|
<div class="container-primary-info @(OnClick.HasDelegate ? "ripple-container" : "")" @onclick="OnCardClick">
|
||||||
|
<div class="section-primary-info">
|
||||||
|
<div class="inspection-info">
|
||||||
|
@if (CompactView)
|
||||||
|
{
|
||||||
|
if (OnLoading)
|
||||||
|
{
|
||||||
|
<MudSkeleton Width="40vw"/>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span class="info-title compactView">
|
||||||
|
@PuntoVendita.CodMdep - @PuntoVendita.Descrizione
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (OnLoading)
|
||||||
|
{
|
||||||
|
<MudSkeleton Width="40vw"/>
|
||||||
|
<MudSkeleton Width="55vw"/>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span class="info-title">
|
||||||
|
@PuntoVendita.CodMdep - @PuntoVendita.Descrizione
|
||||||
|
</span>
|
||||||
|
<span class="info-subtitle">
|
||||||
|
@PuntoVendita.Indirizzo
|
||||||
|
</span>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="divider"></div>
|
||||||
|
|
||||||
|
<div class="section-info">
|
||||||
|
<div class="section-inspection-info">
|
||||||
|
<div>
|
||||||
|
<span class="info-inspection-title">Data ispezione</span>
|
||||||
|
@if (OnLoading)
|
||||||
|
{
|
||||||
|
<MudSkeleton Width="100%"/>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<MudChip T="string" Size="Size.Small" Color="Color.Default">
|
||||||
|
@Ispezione.Data.ToString("d")
|
||||||
|
</MudChip>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="section-inspection-info">
|
||||||
|
<div>
|
||||||
|
<span class="info-inspection-title">Stato ispezione</span>
|
||||||
|
@if (OnLoading)
|
||||||
|
{
|
||||||
|
<MudSkeleton Width="100%"/>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<MudChip T="string" Size="Size.Small" Color="@Ispezione.Stato.GetColor()">
|
||||||
|
@Ispezione.Stato.ConvertToHumanReadable()
|
||||||
|
</MudChip>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@code
|
||||||
|
{
|
||||||
|
[Parameter] public Ispezione Ispezione { get; set; } = new();
|
||||||
|
[Parameter] public bool CompactView { get; set; }
|
||||||
|
[Parameter] public EventCallback<Ispezione> OnClick { get; set; }
|
||||||
|
|
||||||
|
private PuntoVenditaDto PuntoVendita { get; set; } = new();
|
||||||
|
|
||||||
|
private bool OnLoading { get; set; } = true;
|
||||||
|
|
||||||
|
protected override async Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
OnLoading = true;
|
||||||
|
StateHasChanged();
|
||||||
|
|
||||||
|
var puntoVendita = SteupDataService.PuntiVenditaList.Find(x =>
|
||||||
|
x.CodMdep != null && x.CodMdep.EqualsIgnoreCase(Ispezione.CodMdep)
|
||||||
|
);
|
||||||
|
await Task.Delay(750);
|
||||||
|
|
||||||
|
PuntoVendita = puntoVendita ?? throw new Exception("Punto vendita non trovato");
|
||||||
|
OnLoading = false;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Task OnCardClick() =>
|
||||||
|
OnClick.HasDelegate ? OnClick.InvokeAsync(Ispezione) : Task.CompletedTask;
|
||||||
|
}
|
||||||
@@ -38,6 +38,11 @@
|
|||||||
line-height: normal;
|
line-height: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.info-title.compactView{
|
||||||
|
font-size: medium;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.section-info {
|
.section-info {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
@using SteUp.Shared.Core.Dto
|
@using SteUp.Shared.Components.Layout.Overlay
|
||||||
@using SteUp.Shared.Core.Dto.PageState
|
@using SteUp.Shared.Core.Dto
|
||||||
|
@using SteUp.Shared.Core.Interface.LocalDb
|
||||||
|
@inject IIspezioniService IspezioniService
|
||||||
|
|
||||||
<div class="shop-card ripple-container" @onclick="StartInspection">
|
<div class="shop-card ripple-container" @onclick="StartInspection">
|
||||||
<div class="shop-body-section">
|
<div class="shop-body-section">
|
||||||
@@ -31,16 +33,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<SpinnerOverlay VisibleOverlay="VisibleOverlay"/>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[Parameter] public PuntoVenditaDto PuntoVendita { get; set; } = null!;
|
[Parameter] public PuntoVenditaDto PuntoVendita { get; set; } = null!;
|
||||||
|
|
||||||
private void StartInspection()
|
private bool VisibleOverlay { get; set; }
|
||||||
|
|
||||||
|
private async Task StartInspection()
|
||||||
{
|
{
|
||||||
SteupDataService.Inspection = new InspectionPageState
|
VisibleOverlay = true;
|
||||||
{
|
StateHasChanged();
|
||||||
DateInspection = DateTime.Today,
|
|
||||||
PuntoVendita = PuntoVendita
|
SteupDataService.InspectionPageState.Ispezione = await IspezioniService.GetOrCreateIspezioneAsync(
|
||||||
};
|
PuntoVendita.CodMdep!,
|
||||||
|
DateOnly.FromDateTime(DateTime.Today),
|
||||||
|
UserSession.User.Username
|
||||||
|
);
|
||||||
|
|
||||||
|
VisibleOverlay = false;
|
||||||
|
StateHasChanged();
|
||||||
|
|
||||||
NavigationManager.NavigateTo("/ispezione");
|
NavigationManager.NavigateTo("/ispezione");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
@using SteUp.Shared.Components.Layout
|
@using SteUp.Shared.Components.Layout
|
||||||
@using SteUp.Shared.Components.Layout.Overlay
|
@using SteUp.Shared.Components.Layout.Overlay
|
||||||
@using SteUp.Shared.Core.Dto
|
@using SteUp.Shared.Core.Dto
|
||||||
|
@using SteUp.Shared.Core.Entities
|
||||||
@using SteUp.Shared.Core.Interface.IntegryApi
|
@using SteUp.Shared.Core.Interface.IntegryApi
|
||||||
@using SteUp.Shared.Core.Interface.System.Network
|
@using SteUp.Shared.Core.Interface.System.Network
|
||||||
@inject INetworkService NetworkService
|
@inject INetworkService NetworkService
|
||||||
@@ -24,7 +25,7 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="JtbFasiDto?" Variant="Variant.Text"
|
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="JtbFasiDto?" Variant="Variant.Text"
|
||||||
@bind-Value="SchedaDto.Reparto" AdornmentIcon="@Icons.Material.Filled.Code"
|
@bind-Value="Scheda.Reparto" AdornmentIcon="@Icons.Material.Filled.Code"
|
||||||
ToStringFunc="@(x => x?.Descrizione)"
|
ToStringFunc="@(x => x?.Descrizione)"
|
||||||
@bind-Value:after="OnAfterChangeValue" Class="customIcon-select">
|
@bind-Value:after="OnAfterChangeValue" Class="customIcon-select">
|
||||||
@foreach (var fasi in SteupDataService.Reparti)
|
@foreach (var fasi in SteupDataService.Reparti)
|
||||||
@@ -49,7 +50,7 @@
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="string?" Variant="Variant.Text"
|
<MudSelectExtended ReadOnly="IsView" FullWidth="true" T="string?" Variant="Variant.Text"
|
||||||
@bind-Value="SchedaDto.ActivityTypeId" Class="customIcon-select"
|
@bind-Value="Scheda.ActivityTypeId" Class="customIcon-select"
|
||||||
AdornmentIcon="@Icons.Material.Filled.Code"
|
AdornmentIcon="@Icons.Material.Filled.Code"
|
||||||
@bind-Value:after="OnAfterChangeValue">
|
@bind-Value:after="OnAfterChangeValue">
|
||||||
@foreach (var type in SteupDataService.TipiAttività)
|
@foreach (var type in SteupDataService.TipiAttività)
|
||||||
@@ -123,7 +124,7 @@
|
|||||||
<span class="disable-full-width">Scadenza</span>
|
<span class="disable-full-width">Scadenza</span>
|
||||||
|
|
||||||
<MudSelectExtended FullWidth="true" ReadOnly="@IsView" T="int" Variant="Variant.Text"
|
<MudSelectExtended FullWidth="true" ReadOnly="@IsView" T="int" Variant="Variant.Text"
|
||||||
@bind-Value="@SchedaDto.Scadenza" @bind-Value:after="OnAfterChangeValue"
|
@bind-Value="@Scheda.Scadenza" @bind-Value:after="OnAfterChangeValue"
|
||||||
Class="customIcon-select" AdornmentIcon="@Icons.Material.Filled.Code">
|
Class="customIcon-select" AdornmentIcon="@Icons.Material.Filled.Code">
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="24H" Value="24" />
|
<MudSelectItemExtended Class="custom-item-select" Text="24H" Value="24" />
|
||||||
<MudSelectItemExtended Class="custom-item-select" Text="1 Settimana" Value="168" />
|
<MudSelectItemExtended Class="custom-item-select" Text="1 Settimana" Value="168" />
|
||||||
@@ -135,13 +136,13 @@
|
|||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
|
|
||||||
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Responsabile" Variant="Variant.Text"
|
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Responsabile" Variant="Variant.Text"
|
||||||
@bind-Value="SchedaDto.Responsabile" @bind-Value:after="OnAfterChangeValue"
|
@bind-Value="Scheda.Responsabile" @bind-Value:after="OnAfterChangeValue"
|
||||||
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
|
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
|
|
||||||
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Note" Variant="Variant.Text" Lines="3"
|
<MudTextField ReadOnly="IsView" T="string?" Placeholder="Note" Variant="Variant.Text" Lines="3"
|
||||||
@bind-Value="SchedaDto.Note" @bind-Value:after="OnAfterChangeValue"
|
@bind-Value="Scheda.Note" @bind-Value:after="OnAfterChangeValue"
|
||||||
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
DebounceInterval="500" OnDebounceIntervalElapsed="OnAfterChangeValue"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -159,12 +160,12 @@
|
|||||||
</DialogContent>
|
</DialogContent>
|
||||||
</MudDialog>
|
</MudDialog>
|
||||||
|
|
||||||
<SaveOverlay VisibleOverlay="VisibleOverlay" SuccessAnimation="SuccessAnimation"/>
|
<SpinnerOverlay VisibleOverlay="VisibleOverlay" SuccessAnimation="SuccessAnimation"/>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
[CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!;
|
[CascadingParameter] private IMudDialogInstance MudDialog { get; set; } = null!;
|
||||||
|
|
||||||
private SchedaDto SchedaDto { get; set; } = new();
|
private Scheda Scheda { get; set; } = new();
|
||||||
|
|
||||||
private bool IsNew { get; set; }
|
private bool IsNew { get; set; }
|
||||||
private bool IsLoading { get; set; }
|
private bool IsLoading { get; set; }
|
||||||
@@ -211,7 +212,7 @@
|
|||||||
|
|
||||||
private void SuggestActivityDescription()
|
private void SuggestActivityDescription()
|
||||||
{
|
{
|
||||||
if (SchedaDto.ActivityTypeId == null)
|
if (Scheda.ActivityTypeId == null)
|
||||||
{
|
{
|
||||||
Snackbar.Add("Indicare prima il motivo", Severity.Error);
|
Snackbar.Add("Indicare prima il motivo", Severity.Error);
|
||||||
return;
|
return;
|
||||||
@@ -222,12 +223,12 @@
|
|||||||
|
|
||||||
_ = Task.Run(async () =>
|
_ = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
var activityDescriptions = await IntegryApiService.SuggestActivityDescription(SchedaDto.ActivityTypeId);
|
var activityDescriptions = await IntegryApiService.SuggestActivityDescription(Scheda.ActivityTypeId);
|
||||||
|
|
||||||
var modal = await ModalHelper.OpenSuggestActivityDescription(Dialog, activityDescriptions);
|
var modal = await ModalHelper.OpenSuggestActivityDescription(Dialog, activityDescriptions);
|
||||||
|
|
||||||
if (modal is { Canceled: false, Data: not null })
|
if (modal is { Canceled: false, Data: not null })
|
||||||
SchedaDto.Note = modal.Data!.ToString();
|
Scheda.Note = modal.Data!.ToString();
|
||||||
|
|
||||||
VisibleOverlay = false;
|
VisibleOverlay = false;
|
||||||
await InvokeAsync(StateHasChanged);
|
await InvokeAsync(StateHasChanged);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<div class="no-data opacity-75 d-flex flex-column align-items-center">
|
<div class="no-data opacity-75 d-flex flex-column align-items-center">
|
||||||
<img
|
<img src="@ImageSource" alt=""/>
|
||||||
src="@ImageSource"/>
|
|
||||||
|
|
||||||
<p class="mt-3">@Text</p>
|
<p class="mt-3">@Text</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ public interface ISteupDataService
|
|||||||
Task Init();
|
Task Init();
|
||||||
|
|
||||||
List<PuntoVenditaDto> PuntiVenditaList { get; }
|
List<PuntoVenditaDto> PuntiVenditaList { get; }
|
||||||
InspectionPageState Inspection { get; set; }
|
InspectionPageState InspectionPageState { get; set; }
|
||||||
List<JtbFasiDto> Reparti { get; }
|
List<JtbFasiDto> Reparti { get; }
|
||||||
List<StbActivityTypeDto> TipiAttività { get; }
|
List<StbActivityTypeDto> TipiAttività { get; }
|
||||||
}
|
}
|
||||||
@@ -3,16 +3,19 @@ using SteUp.Shared.Core.Data.Contracts;
|
|||||||
using SteUp.Shared.Core.Dto;
|
using SteUp.Shared.Core.Dto;
|
||||||
using SteUp.Shared.Core.Dto.PageState;
|
using SteUp.Shared.Core.Dto.PageState;
|
||||||
using SteUp.Shared.Core.Interface.IntegryApi;
|
using SteUp.Shared.Core.Interface.IntegryApi;
|
||||||
|
using SteUp.Shared.Core.Interface.LocalDb;
|
||||||
|
|
||||||
namespace SteUp.Shared.Core.Data;
|
namespace SteUp.Shared.Core.Data;
|
||||||
|
|
||||||
public class SteupDataService(
|
public class SteupDataService(
|
||||||
IIntegrySteupService integrySteupService,
|
IIntegrySteupService integrySteupService,
|
||||||
IUserSession userSession) : ISteupDataService
|
IUserSession userSession,
|
||||||
|
IDbInitializer dbInitializer) : ISteupDataService
|
||||||
{
|
{
|
||||||
public Task Init()
|
public async Task Init()
|
||||||
{
|
{
|
||||||
return LoadDataAsync();
|
await dbInitializer.InitializeAsync();
|
||||||
|
await LoadDataAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadDataAsync()
|
private async Task LoadDataAsync()
|
||||||
@@ -24,7 +27,7 @@ public class SteupDataService(
|
|||||||
TipiAttività = await integrySteupService.RetrieveActivityType();
|
TipiAttività = await integrySteupService.RetrieveActivityType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public InspectionPageState Inspection { get; set; } = new();
|
public InspectionPageState InspectionPageState { get; set; } = new();
|
||||||
public List<PuntoVenditaDto> PuntiVenditaList { get; private set; } = [];
|
public List<PuntoVenditaDto> PuntiVenditaList { get; private set; } = [];
|
||||||
public List<JtbFasiDto> Reparti { get; private set; } = [];
|
public List<JtbFasiDto> Reparti { get; private set; } = [];
|
||||||
public List<StbActivityTypeDto> TipiAttività { get; private set; } = [];
|
public List<StbActivityTypeDto> TipiAttività { get; private set; } = [];
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
namespace SteUp.Shared.Core.Dto.PageState;
|
using SteUp.Shared.Core.Entities;
|
||||||
|
|
||||||
|
namespace SteUp.Shared.Core.Dto.PageState;
|
||||||
|
|
||||||
public class InspectionPageState
|
public class InspectionPageState
|
||||||
{
|
{
|
||||||
public DateTime DateInspection {get; set;}
|
public Ispezione Ispezione { get; set; } = new();
|
||||||
|
|
||||||
public PuntoVenditaDto? PuntoVendita {get; set;}
|
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace SteUp.Shared.Core.Dto;
|
|
||||||
|
|
||||||
public class SchedaDto
|
|
||||||
{
|
|
||||||
public JtbFasiDto? Reparto { get; set; }
|
|
||||||
public string? ActivityTypeId { get; set; }
|
|
||||||
public string? Note { get; set; }
|
|
||||||
public string? Responsabile { get; set; }
|
|
||||||
public int Scadenza { get; set; } = 24;
|
|
||||||
}
|
|
||||||
17
SteUp.Shared/Core/Entities/Ispezione.cs
Normal file
17
SteUp.Shared/Core/Entities/Ispezione.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using SteUp.Shared.Core.Enum;
|
||||||
|
|
||||||
|
namespace SteUp.Shared.Core.Entities;
|
||||||
|
|
||||||
|
public class Ispezione
|
||||||
|
{
|
||||||
|
[Required]
|
||||||
|
public string CodMdep { get; set; } = string.Empty;
|
||||||
|
public DateOnly Data { get; set; }
|
||||||
|
[Required]
|
||||||
|
public string Rilevatore { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public StatusEnum Stato { get; set; } = StatusEnum.InCorso;
|
||||||
|
|
||||||
|
public List<Scheda> Schede { get; set; } = [];
|
||||||
|
}
|
||||||
51
SteUp.Shared/Core/Entities/Scheda.cs
Normal file
51
SteUp.Shared/Core/Entities/Scheda.cs
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using SteUp.Shared.Core.Dto;
|
||||||
|
|
||||||
|
namespace SteUp.Shared.Core.Entities;
|
||||||
|
|
||||||
|
public class Scheda
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string? CodJfas { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string CodMdep { get; set; } = string.Empty;
|
||||||
|
public DateOnly Data { get; set; }
|
||||||
|
[Required]
|
||||||
|
public string Rilevatore { get; set; } = string.Empty;
|
||||||
|
public Ispezione? Ispezione { get; set; }
|
||||||
|
|
||||||
|
public string? DescrizioneReparto { get; set; }
|
||||||
|
public string? ActivityTypeId { get; set; }
|
||||||
|
public string? Note { get; set; }
|
||||||
|
public string? Responsabile { get; set; }
|
||||||
|
public int Scadenza { get; set; } = 24;
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public JtbFasiDto? Reparto
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_reparto == null && CodJfas != null)
|
||||||
|
{
|
||||||
|
_reparto = new JtbFasiDto
|
||||||
|
{
|
||||||
|
CodJfas = CodJfas,
|
||||||
|
Descrizione = DescrizioneReparto
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return _reparto;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_reparto = value;
|
||||||
|
if (value == null) return;
|
||||||
|
|
||||||
|
CodJfas = value.CodJfas;
|
||||||
|
DescrizioneReparto = value.Descrizione;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private JtbFasiDto? _reparto;
|
||||||
|
}
|
||||||
8
SteUp.Shared/Core/Enum/StatusEnum.cs
Normal file
8
SteUp.Shared/Core/Enum/StatusEnum.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace SteUp.Shared.Core.Enum;
|
||||||
|
|
||||||
|
public enum StatusEnum
|
||||||
|
{
|
||||||
|
InCorso = 0,
|
||||||
|
Completata = 1,
|
||||||
|
Esporta = 2
|
||||||
|
}
|
||||||
29
SteUp.Shared/Core/Helpers/StatusEnumHelper.cs
Normal file
29
SteUp.Shared/Core/Helpers/StatusEnumHelper.cs
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
using MudBlazor;
|
||||||
|
using SteUp.Shared.Core.Enum;
|
||||||
|
|
||||||
|
namespace SteUp.Shared.Core.Helpers;
|
||||||
|
|
||||||
|
public static class StatusEnumHelper
|
||||||
|
{
|
||||||
|
public static string ConvertToHumanReadable(this StatusEnum enumValue)
|
||||||
|
{
|
||||||
|
return enumValue switch
|
||||||
|
{
|
||||||
|
StatusEnum.InCorso => "IN CORSO",
|
||||||
|
StatusEnum.Completata => "COMPLETATA",
|
||||||
|
StatusEnum.Esporta => "ESPORTATA",
|
||||||
|
_ => throw new ArgumentOutOfRangeException(nameof(enumValue), enumValue, null)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Color GetColor(this StatusEnum enumValue)
|
||||||
|
{
|
||||||
|
return enumValue switch
|
||||||
|
{
|
||||||
|
StatusEnum.InCorso => Color.Warning,
|
||||||
|
StatusEnum.Completata or
|
||||||
|
StatusEnum.Esporta => Color.Success,
|
||||||
|
_ => Color.Default
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
6
SteUp.Shared/Core/Interface/LocalDb/IDbInitializer.cs
Normal file
6
SteUp.Shared/Core/Interface/LocalDb/IDbInitializer.cs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
namespace SteUp.Shared.Core.Interface.LocalDb;
|
||||||
|
|
||||||
|
public interface IDbInitializer
|
||||||
|
{
|
||||||
|
Task InitializeAsync();
|
||||||
|
}
|
||||||
20
SteUp.Shared/Core/Interface/LocalDb/IIspezioniService.cs
Normal file
20
SteUp.Shared/Core/Interface/LocalDb/IIspezioniService.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using SteUp.Shared.Core.Entities;
|
||||||
|
|
||||||
|
namespace SteUp.Shared.Core.Interface.LocalDb;
|
||||||
|
|
||||||
|
public interface IIspezioniService
|
||||||
|
{
|
||||||
|
// ISPEZIONI
|
||||||
|
Task<Ispezione?> GetIspezioneAsync(string codMdep, DateOnly data, string rilevatore);
|
||||||
|
Task<List<Ispezione>> GetAllIspezioniWithSchedeAsync();
|
||||||
|
Task AddIspezioneAsync(Ispezione ispezione);
|
||||||
|
Task<Ispezione> GetOrCreateIspezioneAsync(string codMdep, DateOnly data, string rilevatore);
|
||||||
|
Task<bool> DeleteIspezioneAsync(string codMdep, DateOnly data, string rilevatore);
|
||||||
|
|
||||||
|
// SCHEDE
|
||||||
|
Task AddSchedaAsync(string codMdep, DateOnly data, string rilevatore, Scheda scheda);
|
||||||
|
Task<Scheda?> GetSchedaAsync(int schedaId);
|
||||||
|
Task<Scheda?> GetSchedaWithIspezioneAsync(int schedaId);
|
||||||
|
Task<bool> DeleteSchedaAsync(int schedaId);
|
||||||
|
Task<int> DeleteAllSchedeOfIspezioneAsync(string codMdep, DateOnly data, string rilevatore);
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="8.2.4" />
|
<PackageReference Include="CodeBeam.MudBlazor.Extensions" Version="8.2.4" />
|
||||||
<PackageReference Include="Sentry" Version="5.16.1" />
|
<PackageReference Include="Sentry" Version="5.16.1" />
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0"/>
|
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.12"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.13" />
|
||||||
<PackageReference Include="Microsoft.Maui.Essentials" Version="9.0.120"/>
|
<PackageReference Include="Microsoft.Maui.Essentials" Version="9.0.120"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -23,3 +23,7 @@
|
|||||||
.mud-picker-popover-paper {
|
.mud-picker-popover-paper {
|
||||||
border-radius: 1em !important;
|
border-radius: 1em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mud-skeleton{
|
||||||
|
border-radius: .5em !important;
|
||||||
|
}
|
||||||
43
SteUp.Shared/wwwroot/images/undraw_file-search_cbur.svg
Normal file
43
SteUp.Shared/wwwroot/images/undraw_file-search_cbur.svg
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="748.974" height="457.275" viewBox="0 0 748.974 457.275" xmlns:xlink="http://www.w3.org/1999/xlink" role="img" artist="Katerina Limpitsouni" source="https://undraw.co/">
|
||||||
|
<g id="Group_201" data-name="Group 201" transform="translate(-382.003 -195.455)">
|
||||||
|
<g id="Group_200" data-name="Group 200" transform="translate(382.003 195.455)">
|
||||||
|
<path id="Path_3120-313" data-name="Path 3120" d="M695.225,508.82,433.394,576.244a34.622,34.622,0,0,1-42.114-24.866L312.1,243.879a34.622,34.622,0,0,1,24.866-42.114l243.591-62.727L642.9,166.948l77.191,299.757A34.622,34.622,0,0,1,695.225,508.82Z" transform="translate(-311.003 -139.037)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_3121-314" data-name="Path 3121" d="M338.989,210.925a24.655,24.655,0,0,0-17.708,29.99l79.185,307.5a24.655,24.655,0,0,0,29.99,17.708L692.287,498.7a24.655,24.655,0,0,0,17.708-29.99L634,173.595l-54.792-24.529Z" transform="translate(-310.548 -138.556)" fill="#fff"/>
|
||||||
|
<path id="Path_3122-315" data-name="Path 3122" d="M629.927,168.5l-40.522,10.435a11.518,11.518,0,0,1-14.026-8.282l-7.707-29.929a.72.72,0,0,1,.989-.837l61.379,27.258a.72.72,0,0,1-.113,1.355Z" transform="translate(-298.695 -139)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_3123-316" data-name="Path 3123" d="M612.519,418.284l-119.208,30.7a5.759,5.759,0,0,1-2.872-11.154l119.208-30.7a5.759,5.759,0,1,1,2.872,11.154Z" transform="translate(-302.605 -126.189)" fill="#ccc"/>
|
||||||
|
<path id="Path_3124-317" data-name="Path 3124" d="M640.149,430.592,497.936,467.214a5.759,5.759,0,1,1-2.872-11.154l142.213-36.622a5.759,5.759,0,0,1,2.872,11.154Z" transform="translate(-302.384 -125.599)" fill="#ccc"/>
|
||||||
|
<circle id="Ellipse_44" data-name="Ellipse 44" cx="20.355" cy="20.355" r="20.355" transform="translate(121.697 319.055)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_3125-318" data-name="Path 3125" d="M604.421,374.437,446.1,415.191a17.835,17.835,0,0,1-21.694-12.812L391.229,273.49A17.835,17.835,0,0,1,404.041,251.8l158.32-40.754a17.835,17.835,0,0,1,21.694,12.812l33.178,128.889A17.835,17.835,0,0,1,604.421,374.437Z" transform="translate(-307.183 -135.611)" fill="#fff"/>
|
||||||
|
<path id="Path_3126-319" data-name="Path 3126" d="M604.421,374.437,446.1,415.191a17.835,17.835,0,0,1-21.694-12.812L391.229,273.49A17.835,17.835,0,0,1,404.041,251.8l158.32-40.754a17.835,17.835,0,0,1,21.694,12.812l33.178,128.889A17.835,17.835,0,0,1,604.421,374.437ZM404.563,253.826a15.737,15.737,0,0,0-11.3,19.142l33.178,128.889a15.737,15.737,0,0,0,19.142,11.3L603.9,372.407a15.737,15.737,0,0,0,11.3-19.142L582.025,224.376a15.737,15.737,0,0,0-19.142-11.3Z" transform="translate(-307.183 -135.611)" fill="#e6e6e6"/>
|
||||||
|
<path id="Path_411-320" data-name="Path 411" d="M550.66,252.63l-79.9,20.568a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l81.335-20.937c3.286,1.665,2.421,5.07.091,5.67Z" transform="translate(-303.514 -133.861)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_412-321" data-name="Path 412" d="M554.1,266l-79.9,20.568a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l81.335-20.937c3.286,1.665,2.421,5.07.091,5.67Z" transform="translate(-303.349 -133.22)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_413-322" data-name="Path 413" d="M461.146,298.825,436.761,305.1a3.1,3.1,0,0,1-3.776-2.23L425.577,274.1a3.1,3.1,0,0,1,2.23-3.776l24.385-6.277a3.105,3.105,0,0,1,3.776,2.23l7.408,28.777a3.1,3.1,0,0,1-2.23,3.776Z" transform="translate(-305.513 -133.047)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_414-323" data-name="Path 414" d="M562.854,293.445,440.909,324.835a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l123.38-31.76c3.286,1.665,2.421,5.07.091,5.67Z" transform="translate(-304.946 -131.904)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_415-324" data-name="Path 415" d="M566.3,306.822,444.353,338.213a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l123.38-31.76c3.286,1.665,2.421,5.07.091,5.67Z" transform="translate(-304.781 -131.263)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_416-325" data-name="Path 416" d="M569.739,320.192,447.794,351.582a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l123.379-31.76c3.286,1.665,2.421,5.07.091,5.67Z" transform="translate(-304.616 -130.621)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_417-326" data-name="Path 417" d="M573.183,333.569,451.237,364.959a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l123.38-31.76C576.377,329.564,575.513,332.969,573.183,333.569Z" transform="translate(-304.45 -129.98)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_418-327" data-name="Path 418" d="M576.624,346.939,454.679,378.329a2.862,2.862,0,0,1-3.467-1.8,2.757,2.757,0,0,1,1.942-3.5l123.38-31.76C579.819,342.934,578.954,346.339,576.624,346.939Z" transform="translate(-304.285 -129.339)" fill="#f2f2f2"/>
|
||||||
|
<path id="Path_395-328" data-name="Path 395" d="M448.363,470.511a2.111,2.111,0,0,1-1.335-.092l-.026-.011-5.545-2.351a2.126,2.126,0,1,1,1.664-3.913l3.593,1.528,4.708-11.076a2.125,2.125,0,0,1,2.787-1.124h0l-.028.072.029-.073a2.127,2.127,0,0,1,1.124,2.788l-5.539,13.023a2.126,2.126,0,0,1-1.431,1.224Z" transform="translate(-304.809 -123.966)" fill="#fff"/>
|
||||||
|
</g>
|
||||||
|
<g id="Group_199" data-name="Group 199" transform="translate(673.007 225.872) rotate(-8)">
|
||||||
|
<g id="Group_198" data-name="Group 198" transform="translate(125.896 0) rotate(19)">
|
||||||
|
<path id="Path_3127-329" data-name="Path 3127" d="M304.956,386.7H34.583A34.622,34.622,0,0,1,0,352.114V34.583A34.622,34.622,0,0,1,34.583,0H286.121l53.418,42.577V352.114A34.622,34.622,0,0,1,304.956,386.7Z" transform="translate(0 0)" fill="#e6e6e6"/>
|
||||||
|
<path id="Path_3128-330" data-name="Path 3128" d="M24.627,0A24.655,24.655,0,0,0,0,24.627V342.158a24.655,24.655,0,0,0,24.627,24.627H295a24.655,24.655,0,0,0,24.627-24.627V37.418L272.683,0Z" transform="translate(9.956 9.956)" fill="#fff"/>
|
||||||
|
<path id="Path_3129-331" data-name="Path 3129" d="M128.856,11.518H5.759A5.759,5.759,0,0,1,5.759,0h123.1a5.759,5.759,0,0,1,0,11.518Z" transform="translate(123.512 90.767)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_3130-332" data-name="Path 3130" d="M152.612,11.518H5.759A5.759,5.759,0,0,1,5.759,0H152.612a5.759,5.759,0,1,1,0,11.518Z" transform="translate(123.512 110.204)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_3131-333" data-name="Path 3131" d="M128.852,0H5.758a5.758,5.758,0,1,0,0,11.517H128.852a5.759,5.759,0,0,0,0-11.517Z" transform="translate(123.517 177.868)" fill="#ccc"/>
|
||||||
|
<path id="Path_3132-334" data-name="Path 3132" d="M152.609,0H5.758a5.759,5.759,0,1,0,0,11.517h146.85a5.759,5.759,0,1,0,0-11.517Z" transform="translate(123.517 197.307)" fill="#ccc"/>
|
||||||
|
<path id="Path_3133-335" data-name="Path 3133" d="M128.856,11.518H5.759A5.759,5.759,0,0,1,5.759,0h123.1a5.759,5.759,0,0,1,0,11.518Z" transform="translate(123.512 264.975)" fill="#ccc"/>
|
||||||
|
<path id="Path_3134-336" data-name="Path 3134" d="M152.612,11.518H5.759A5.759,5.759,0,0,1,5.759,0H152.612a5.759,5.759,0,1,1,0,11.518Z" transform="translate(123.512 284.411)" fill="#ccc"/>
|
||||||
|
<circle id="Ellipse_44-2" data-name="Ellipse 44" cx="20.355" cy="20.355" r="20.355" transform="translate(57.655 85.89)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_395-2-337" data-name="Path 395" d="M6.909,15.481a2.111,2.111,0,0,1-1.27-.422l-.023-.017L.832,11.382A2.126,2.126,0,0,1,3.419,8.008l3.1,2.376L13.839.832A2.125,2.125,0,0,1,16.819.439h0L16.774.5l.047-.063a2.127,2.127,0,0,1,.393,2.98L8.6,14.649a2.126,2.126,0,0,1-1.691.829Z" transform="translate(69.085 98.528)" fill="#fff"/>
|
||||||
|
<path id="Path_3135-338" data-name="Path 3135" d="M40.707,20.359A20.354,20.354,0,0,1,20.356,40.721a4.372,4.372,0,0,1-.524-.021A20.353,20.353,0,1,1,40.707,20.359Z" transform="translate(59.75 172.987)" fill="#ec4c41"/>
|
||||||
|
<circle id="Ellipse_44-3" data-name="Ellipse 44" cx="20.355" cy="20.355" r="20.355" transform="translate(57.655 260.097)" fill="#ec4c41"/>
|
||||||
|
<path id="Path_3136-339" data-name="Path 3136" d="M53.362,43.143H11.518A11.518,11.518,0,0,1,0,31.625V.72A.72.72,0,0,1,1.167.156l52.642,41.7a.72.72,0,0,1-.447,1.284Z" transform="translate(285.137 0.805)" fill="#ccc"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<path id="Path_3140-340" data-name="Path 3140" d="M754.518,518.049a9.158,9.158,0,0,1-12.587,3.05L635.078,455.923a9.158,9.158,0,0,1,9.538-15.637l106.852,65.176a9.158,9.158,0,0,1,3.049,12.587Z" transform="translate(123.58 101.359)" fill="#3f3d56"/>
|
||||||
|
<path id="Path_3141-341" data-name="Path 3141" d="M688.648,486.5a73.265,73.265,0,1,1-24.4-100.7A73.265,73.265,0,0,1,688.648,486.5ZM579.19,419.73a54.949,54.949,0,1,0,75.524-18.3,54.949,54.949,0,0,0-75.524,18.3Z" transform="translate(82.597 67.737)" fill="#3f3d56"/>
|
||||||
|
<circle id="Ellipse_44-4" data-name="Ellipse 44" cx="57.007" cy="57.007" r="57.007" transform="translate(672.542 442.858) rotate(19)" fill="#ec4c41"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.5 KiB |
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="IntegryApiClient.Blazor" Version="1.2.3"/>
|
<PackageReference Include="IntegryApiClient.Blazor" Version="1.2.3"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.12"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="9.0.13" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.12"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.12"/>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.12"/>
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.12"/>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
42
SteUp.sln
42
SteUp.sln
@@ -9,26 +9,68 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteUp.Shared", "SteUp.Share
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteUp.Web", "SteUp.Web\SteUp.Web.csproj", "{A813A640-4535-4024-8FD9-1EE6B76FB2AE}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteUp.Web", "SteUp.Web\SteUp.Web.csproj", "{A813A640-4535-4024-8FD9-1EE6B76FB2AE}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteUp.Data", "SteUp.Data\SteUp.Data.csproj", "{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.Build.0 = Release|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|Any CPU.Deploy.0 = Release|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{765F13F2-2E97-4912-B774-DA38B78DC032}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{868BF270-578F-4618-9238-C41861F379DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{868BF270-578F-4618-9238-C41861F379DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{868BF270-578F-4618-9238-C41861F379DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{868BF270-578F-4618-9238-C41861F379DF}.Release|Any CPU.Build.0 = Release|Any CPU
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{868BF270-578F-4618-9238-C41861F379DF}.Release|x86.Build.0 = Release|Any CPU
|
||||||
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{A813A640-4535-4024-8FD9-1EE6B76FB2AE}.Release|x86.Build.0 = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|x64.Build.0 = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Debug|x86.Build.0 = Debug|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|x64.ActiveCfg = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|x64.Build.0 = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|x86.ActiveCfg = Release|Any CPU
|
||||||
|
{A1AB9749-A367-4E5C-8A80-2D4CEF68DA59}.Release|x86.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
Reference in New Issue
Block a user