Compare commits
87 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c848168552 | |||
| d95a19af32 | |||
| c5e4f95b94 | |||
| 35e00bdb71 | |||
| 8948984b44 | |||
| 58f8d2aee3 | |||
| 951a704b52 | |||
| d518861228 | |||
| 32a0fa1287 | |||
| 33212941c8 | |||
| 59975a335d | |||
| 390046a0c7 | |||
| 149f6251f7 | |||
| 46a0efe748 | |||
| ace620b09d | |||
| 3d87f28004 | |||
| b7071dcbe1 | |||
| fdf937131c | |||
| 1b8a19b036 | |||
| 86bd0f375c | |||
| 9e1d437563 | |||
| 6bd54468dd | |||
| 52a71d236d | |||
| c2fd4870c7 | |||
| b67fae281b | |||
| 22f4455356 | |||
| 8107ba51b9 | |||
| b3062b04fc | |||
| 3739225a28 | |||
| 2db1fbc8d6 | |||
| 85944da9ed | |||
| a598c6793a | |||
| bf30e006c3 | |||
| e799fdf10a | |||
| 34ce093ca9 | |||
| c1d39b73e9 | |||
| 567b966157 | |||
| e076bc3f6b | |||
| fd027e424f | |||
| 3bd8ee233b | |||
| bb9e9ce7d5 | |||
| a5f5a55e34 | |||
| 2ecc7338e6 | |||
| 66c069fb35 | |||
| 361d4338a6 | |||
| 9a964330e3 | |||
| 0e65410340 | |||
| b0e5d54061 | |||
| 9c979582d4 | |||
| 11cae94995 | |||
| 05ca047b5c | |||
| cd533c190b | |||
| efd84437b5 | |||
| 1c36305304 | |||
| f1f1e784da | |||
| 512d25f513 | |||
| f1628818f3 | |||
| b57d20420b | |||
| cbf97a2eb6 | |||
| 284f7ff241 | |||
| 888c7398f7 | |||
| 4926cb4715 | |||
| e2c7615826 | |||
| dc8ce10b51 | |||
| ffb4c9872d | |||
| a415d175d9 | |||
| 60b069cd28 | |||
| 7a63caa377 | |||
| df970e0a69 | |||
| c5c40f67cd | |||
| f8d2212ff3 | |||
| 38bcffe135 | |||
| 02e7224736 | |||
| 820ae5ce11 | |||
| 1f645b3aa2 | |||
| 9ff00ce0b6 | |||
| 586d281736 | |||
| 9441ee0e66 | |||
| be61e174c0 | |||
| 46f70964f0 | |||
| c337bbb7da | |||
| c007abe4a5 | |||
| 74ffe5983b | |||
| a6642512c3 | |||
| f5389907f0 | |||
| 37ca1d9a70 | |||
| a52199d4e3 |
+11
-1
@@ -70,6 +70,8 @@ stages:
|
|||||||
|
|
||||||
build:
|
build:
|
||||||
stage: build
|
stage: build
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
- dotnet restore GWMS.sln
|
- dotnet restore GWMS.sln
|
||||||
@@ -78,6 +80,8 @@ build:
|
|||||||
|
|
||||||
test:
|
test:
|
||||||
stage: test
|
stage: test
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
only:
|
only:
|
||||||
- develop
|
- develop
|
||||||
needs: ["build"]
|
needs: ["build"]
|
||||||
@@ -110,6 +114,8 @@ test:
|
|||||||
|
|
||||||
installer:
|
installer:
|
||||||
stage: installer
|
stage: installer
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
only:
|
only:
|
||||||
- develop
|
- develop
|
||||||
- master
|
- master
|
||||||
@@ -118,13 +124,17 @@ installer:
|
|||||||
# - *nuget-fix
|
# - *nuget-fix
|
||||||
# - dotnet restore
|
# - dotnet restore
|
||||||
script:
|
script:
|
||||||
- dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release GWMS.UI/GWMS.UI.csproj -o:publish
|
# - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release GWMS.UI/GWMS.UI.csproj -o:publish
|
||||||
|
# pubblico solo installer Linux x64: https://docs.microsoft.com/en-us/dotnet/core/deploying/
|
||||||
|
- dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release GWMS.UI/GWMS.UI.csproj -o:publish -r linux-x64 --self-contained false
|
||||||
# qui il deploy su nexus...
|
# qui il deploy su nexus...
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
|
|
||||||
release:
|
release:
|
||||||
stage: release
|
stage: release
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
only:
|
only:
|
||||||
#- feature/Deploy_CI_CD
|
#- feature/Deploy_CI_CD
|
||||||
# - master
|
# - master
|
||||||
|
|||||||
@@ -26,117 +26,11 @@ namespace GWMS.Data.Controllers
|
|||||||
{
|
{
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
dbCtx = new GWMSContext(configuration);
|
dbCtx = new GWMSContext(configuration);
|
||||||
Log.Info("Avviata classe GWMSController");
|
//Log.Info("Avviata classe GWMSController");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private void CreateSimData(int numDays, int stepMin, int maxHourRate)
|
|
||||||
{
|
|
||||||
// disattivazione per sicurezza
|
|
||||||
#if false
|
|
||||||
ResetController();
|
|
||||||
// generazione dati casuale
|
|
||||||
Random rnd = new Random();
|
|
||||||
foreach (var plant in GetPlants())
|
|
||||||
{
|
|
||||||
var currPlant = GetPlant(plant.PlantId);
|
|
||||||
// imposto limiti e valori attuali...
|
|
||||||
//currPlant.LevelMax = rnd.Next(24, 28) * 1000;
|
|
||||||
int simLevel = rnd.Next(1, (int)currPlant.LevelMax);
|
|
||||||
double simPress = (double)rnd.Next((int)(currPlant.PressMax - 50) * 10, (int)currPlant.PressMax * 10) / 10;
|
|
||||||
double simPressH = (double)rnd.Next((int)(currPlant.PressBHMax - 70) * 10, (int)currPlant.PressBHMax * 10) / 10;
|
|
||||||
double simPressL = (double)rnd.Next((int)(currPlant.PressBLMax - 70) * 10, (int)currPlant.PressBLMax * 10) / 10;
|
|
||||||
currPlant.LevelAct = simLevel;
|
|
||||||
currPlant.PressAct = simPress;
|
|
||||||
currPlant.PressBHAct = simPressH;
|
|
||||||
currPlant.PressBLAct = simPressL;
|
|
||||||
dbCtx.SaveChanges();
|
|
||||||
|
|
||||||
// genero random le soglie x simulare rilievi e ordini
|
|
||||||
int soglia01 = rnd.Next((int)currPlant.LevelMax * 60 / 100, (int)currPlant.LevelMax * 75 / 100);
|
|
||||||
int soglia02 = rnd.Next((int)currPlant.LevelMax * 5 / 100, (int)currPlant.LevelMax * 35 / 100);
|
|
||||||
|
|
||||||
List<PlantLogModel> LogLevels = new List<PlantLogModel>();
|
|
||||||
List<PlantLogModel> LogPressures = new List<PlantLogModel>();
|
|
||||||
List<OrderModel> LogOrders = new List<OrderModel>();
|
|
||||||
|
|
||||||
DateTime adesso = DateTime.Now;
|
|
||||||
int lastLevel = simLevel;
|
|
||||||
int lastOrder = 0;
|
|
||||||
int anticipo = 0;
|
|
||||||
double lastPress = simPress;
|
|
||||||
double lastPressH = simPressH;
|
|
||||||
double lastPressL = simPressL;
|
|
||||||
// simulo numDays gg...
|
|
||||||
for (int i = numDays * 24 * (60 / stepMin); i > 0; i--)
|
|
||||||
{
|
|
||||||
anticipo = i * stepMin;
|
|
||||||
lastLevel = lastLevel - rnd.Next(0, maxHourRate / (60 / stepMin));
|
|
||||||
// se inferiore a soglia 1 --> ordine
|
|
||||||
if (lastLevel + lastOrder < soglia01)
|
|
||||||
{
|
|
||||||
lastOrder = rnd.Next((int)currPlant.LevelMax - soglia01, (int)currPlant.LevelMax - soglia02);
|
|
||||||
LogOrders.Add(new OrderModel() { DtOrder = adesso.AddMinutes(-anticipo), OrderQty = lastOrder, PlantId = plant.PlantId, OrderCode = $"ORD{i:000000}", OrderDesc = "SIM Order", SupplierId = 1, TransporterId = 1 });
|
|
||||||
}
|
|
||||||
|
|
||||||
// se inferiore a soglia 2 --> refill
|
|
||||||
if (lastLevel < soglia02)
|
|
||||||
{
|
|
||||||
lastLevel += lastOrder;
|
|
||||||
lastOrder = 0;
|
|
||||||
}
|
|
||||||
LogLevels.Add(new PlantLogModel() { DtEvent = adesso.AddMinutes(-anticipo), FluxType = "Level", PlantId = plant.PlantId, ValNumber = lastLevel });
|
|
||||||
|
|
||||||
// pressioni!
|
|
||||||
lastPress = lastPress - (double)rnd.Next(-30, 25) / 10;
|
|
||||||
lastPressH = lastPressH - (double)rnd.Next(-25, 20) / 10;
|
|
||||||
lastPressL = lastPressL - (double)rnd.Next(-25, 20) / 10;
|
|
||||||
LogPressures.Add(new PlantLogModel() { DtEvent = adesso.AddMinutes(-anticipo), FluxType = "MainPress", PlantId = plant.PlantId, ValNumber = lastPress });
|
|
||||||
LogPressures.Add(new PlantLogModel() { DtEvent = adesso.AddMinutes(-anticipo), FluxType = "PressBH", PlantId = plant.PlantId, ValNumber = lastPressH });
|
|
||||||
LogPressures.Add(new PlantLogModel() { DtEvent = adesso.AddMinutes(-anticipo), FluxType = "PressBL", PlantId = plant.PlantId, ValNumber = lastPressL });
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
dbCtx
|
|
||||||
.DbSetPlantLog
|
|
||||||
.AddRange(LogLevels);
|
|
||||||
|
|
||||||
dbCtx
|
|
||||||
.DbSetPlantLog
|
|
||||||
.AddRange(LogPressures);
|
|
||||||
|
|
||||||
// salvo sul DB!
|
|
||||||
dbCtx.SaveChanges();
|
|
||||||
Log.Info($"Effettuato inserimento {LogLevels.Count} record PlantLog");
|
|
||||||
}
|
|
||||||
catch (Exception exc)
|
|
||||||
{
|
|
||||||
Log.Error($"Eccezione in salvataggio PlantLog{Environment.NewLine}{exc}");
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
dbCtx
|
|
||||||
.DbSetOrders
|
|
||||||
.AddRange(LogOrders);
|
|
||||||
|
|
||||||
// salvo sul DB!
|
|
||||||
dbCtx.SaveChanges();
|
|
||||||
Log.Info($"Effettuato inserimento {LogOrders.Count} record Orders");
|
|
||||||
}
|
|
||||||
catch (Exception exc)
|
|
||||||
{
|
|
||||||
Log.Error($"Eccezione in salvataggio Orders{Environment.NewLine}{exc}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -156,6 +50,7 @@ namespace GWMS.Data.Controllers
|
|||||||
{
|
{
|
||||||
// Clear database context
|
// Clear database context
|
||||||
dbCtx.Dispose();
|
dbCtx.Dispose();
|
||||||
|
//Log.Info("Dispose di GWMSController");
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ConfigModel> GetConfig()
|
public List<ConfigModel> GetConfig()
|
||||||
@@ -261,9 +156,9 @@ namespace GWMS.Data.Controllers
|
|||||||
public List<PlantDTO> GetPlantsDTO(int maxRecords)
|
public List<PlantDTO> GetPlantsDTO(int maxRecords)
|
||||||
{
|
{
|
||||||
List<PlantDTO> dbResult = new List<PlantDTO>();
|
List<PlantDTO> dbResult = new List<PlantDTO>();
|
||||||
using (GWMSContext dbCtxMult = new GWMSContext(_configuration))
|
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
|
||||||
{
|
{
|
||||||
var plantList = dbCtxMult
|
var plantList = localDbCtx
|
||||||
.DbSetPlant
|
.DbSetPlant
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
@@ -330,7 +225,7 @@ namespace GWMS.Data.Controllers
|
|||||||
List<WeekPlanModel> dbResult = new List<WeekPlanModel>();
|
List<WeekPlanModel> dbResult = new List<WeekPlanModel>();
|
||||||
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
|
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
|
||||||
{
|
{
|
||||||
dbResult = dbCtx
|
dbResult = localDbCtx
|
||||||
.DbSetPlantSupplWeekPlan
|
.DbSetPlantSupplWeekPlan
|
||||||
.Include(p => p.Plant)
|
.Include(p => p.Plant)
|
||||||
.Include(s => s.Supplier)
|
.Include(s => s.Supplier)
|
||||||
@@ -451,6 +346,7 @@ namespace GWMS.Data.Controllers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public PlantDTO PlantDTO(int PlantId, int maxRecords)
|
public PlantDTO PlantDTO(int PlantId, int maxRecords)
|
||||||
{
|
{
|
||||||
|
DateTime lastRec = DateTime.Today;
|
||||||
var currPlant = GetPlant(PlantId);
|
var currPlant = GetPlant(PlantId);
|
||||||
PlantDTO answ = new PlantDTO();
|
PlantDTO answ = new PlantDTO();
|
||||||
List<TSData> LevelTS = new List<TSData>();
|
List<TSData> LevelTS = new List<TSData>();
|
||||||
@@ -461,42 +357,47 @@ namespace GWMS.Data.Controllers
|
|||||||
List<TSData> PressBLTS = new List<TSData>();
|
List<TSData> PressBLTS = new List<TSData>();
|
||||||
List<TSData> OrderTS = new List<TSData>();
|
List<TSData> OrderTS = new List<TSData>();
|
||||||
|
|
||||||
using (GWMSContext dbCtxMult = new GWMSContext(_configuration))
|
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
|
||||||
{
|
{
|
||||||
// recupero dal DB
|
// recupero dal DB
|
||||||
var rawLevelData = dbCtxMult
|
var rawLevelData = localDbCtx
|
||||||
.DbSetPlantLog
|
.DbSetPlantLog
|
||||||
.Where(x => x.FluxType == "Level" && x.PlantId == PlantId)
|
.Where(x => x.FluxType == "Level" && x.PlantId == PlantId)
|
||||||
.OrderByDescending(x => x.DtEvent)
|
.OrderByDescending(x => x.DtEvent)
|
||||||
.Take(maxRecords)
|
.Take(maxRecords)
|
||||||
|
.OrderBy(x => x.DtEvent)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var rawMainPressData = dbCtxMult
|
var rawMainPressData = localDbCtx
|
||||||
.DbSetPlantLog
|
.DbSetPlantLog
|
||||||
.Where(x => x.FluxType == "MainPress" && x.PlantId == PlantId)
|
.Where(x => x.FluxType == "MainPress" && x.PlantId == PlantId)
|
||||||
.OrderByDescending(x => x.DtEvent)
|
.OrderByDescending(x => x.DtEvent)
|
||||||
.Take(maxRecords)
|
.Take(maxRecords)
|
||||||
|
.OrderBy(x => x.DtEvent)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var rawBHPressData = dbCtxMult
|
var rawBHPressData = localDbCtx
|
||||||
.DbSetPlantLog
|
.DbSetPlantLog
|
||||||
.Where(x => x.FluxType == "PressBH" && x.PlantId == PlantId)
|
.Where(x => x.FluxType == "PressBH" && x.PlantId == PlantId)
|
||||||
.OrderByDescending(x => x.DtEvent)
|
.OrderByDescending(x => x.DtEvent)
|
||||||
.Take(maxRecords)
|
.Take(maxRecords)
|
||||||
|
.OrderBy(x => x.DtEvent)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var rawBLPressData = dbCtxMult
|
var rawBLPressData = localDbCtx
|
||||||
.DbSetPlantLog
|
.DbSetPlantLog
|
||||||
.Where(x => x.FluxType == "PressBL" && x.PlantId == PlantId)
|
.Where(x => x.FluxType == "PressBL" && x.PlantId == PlantId)
|
||||||
.OrderByDescending(x => x.DtEvent)
|
.OrderByDescending(x => x.DtEvent)
|
||||||
.Take(maxRecords)
|
.Take(maxRecords)
|
||||||
|
.OrderBy(x => x.DtEvent)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var rawOrderData = dbCtxMult
|
var rawOrderData = localDbCtx
|
||||||
.DbSetOrders
|
.DbSetOrders
|
||||||
.Where(x => x.PlantId == PlantId && x.ExecutionQty == 0)
|
.Where(x => x.PlantId == PlantId && x.ExecutionQty == 0)
|
||||||
.OrderByDescending(x => x.DtOrder)
|
.OrderByDescending(x => x.DtOrder)
|
||||||
.Take(maxRecords)
|
.Take(maxRecords)
|
||||||
|
.OrderBy(x => x.DtOrder)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
LevelTS = rawLevelData
|
LevelTS = rawLevelData
|
||||||
@@ -523,6 +424,8 @@ namespace GWMS.Data.Controllers
|
|||||||
double valBH = PressBHTS.Count > 0 ? PressBHTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
|
double valBH = PressBHTS.Count > 0 ? PressBHTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
|
||||||
double valBL = PressBLTS.Count > 0 ? PressBLTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
|
double valBL = PressBLTS.Count > 0 ? PressBLTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
|
||||||
|
|
||||||
|
lastRec = LevelTS.Count > 0 ? LevelTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().DtEvent : DateTime.Today;
|
||||||
|
|
||||||
PressAct.Add("Main", valMain);
|
PressAct.Add("Main", valMain);
|
||||||
PressAct.Add("BH", valBH);
|
PressAct.Add("BH", valBH);
|
||||||
PressAct.Add("BL", valBL);
|
PressAct.Add("BL", valBL);
|
||||||
@@ -530,6 +433,7 @@ namespace GWMS.Data.Controllers
|
|||||||
// popolo valolri
|
// popolo valolri
|
||||||
answ = new PlantDTO()
|
answ = new PlantDTO()
|
||||||
{
|
{
|
||||||
|
LastUpdate = lastRec,
|
||||||
PlantId = PlantId,
|
PlantId = PlantId,
|
||||||
PlantCode = currPlant.PlantCode,
|
PlantCode = currPlant.PlantCode,
|
||||||
PlantDesc = currPlant.PlantDesc,
|
PlantDesc = currPlant.PlantDesc,
|
||||||
@@ -604,30 +508,6 @@ namespace GWMS.Data.Controllers
|
|||||||
return done;
|
return done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Rigenera intero DB se riceve ID di un plant SIM...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="PlantId"></param>
|
|
||||||
public bool RegenDB(int PlantId, int numDays, int stepMin, int maxHourRate)
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
var currPlant = GetPlant(PlantId);
|
|
||||||
if (currPlant.PlantCode.StartsWith("PIZ"))
|
|
||||||
{
|
|
||||||
Log.Info("Inizio RegenDB");
|
|
||||||
|
|
||||||
DbAdmin.resetPlantLogTable();
|
|
||||||
|
|
||||||
ResetController();
|
|
||||||
|
|
||||||
CreateSimData(numDays, stepMin, maxHourRate);
|
|
||||||
Log.Info("Dati SIM generati");
|
|
||||||
|
|
||||||
answ = true;
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ResetController()
|
public void ResetController()
|
||||||
{
|
{
|
||||||
dbCtx = new GWMSContext(_configuration);
|
dbCtx = new GWMSContext(_configuration);
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ namespace GWMS.Data.DTO
|
|||||||
public string PlantCode { get; set; } = "";
|
public string PlantCode { get; set; } = "";
|
||||||
public string PlantDesc { get; set; } = "";
|
public string PlantDesc { get; set; } = "";
|
||||||
|
|
||||||
|
public DateTime LastUpdate { get; set; } = DateTime.Today.AddDays(DateTime.Today.DayOfYear);
|
||||||
|
|
||||||
public double LevelMax { get; set; } = 99999;
|
public double LevelMax { get; set; } = 99999;
|
||||||
|
|
||||||
public double LevelAct { get; set; } = 0;
|
public double LevelAct { get; set; } = 0;
|
||||||
|
|||||||
@@ -0,0 +1,326 @@
|
|||||||
|
// <auto-generated />
|
||||||
|
using System;
|
||||||
|
using GWMS.Data;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
namespace GWMS.User.Migrations
|
||||||
|
{
|
||||||
|
[DbContext(typeof(UserIdentityDbContext))]
|
||||||
|
[Migration("20210826102940_AddTransporterRule")]
|
||||||
|
partial class AddTransporterRule
|
||||||
|
{
|
||||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
#pragma warning disable 612, 618
|
||||||
|
modelBuilder
|
||||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 64)
|
||||||
|
.HasAnnotation("ProductVersion", "5.0.7");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GWMS.Data.DatabaseModels.TableCount", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Count")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("TableName")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.ToTable("DbSetCounts");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("Id")
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.Property<string>("ConcurrencyStamp")
|
||||||
|
.IsConcurrencyToken()
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.Property<string>("NormalizedName")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("NormalizedName")
|
||||||
|
.IsUnique()
|
||||||
|
.HasDatabaseName("RoleNameIndex");
|
||||||
|
|
||||||
|
b.ToTable("AspNetRoles");
|
||||||
|
|
||||||
|
b.HasData(
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "339a7ac3-4fcd-4baa-bd19-a6a09d1b7c5d",
|
||||||
|
ConcurrencyStamp = "3caf0732-df97-4b81-ba2c-9fb51e34532a",
|
||||||
|
Name = "Undef",
|
||||||
|
NormalizedName = "UNDEF"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "47c8d4fb-6925-4ef0-a830-5df33e705d7a",
|
||||||
|
ConcurrencyStamp = "9671ece6-f70a-4ca6-88db-64562e007c72",
|
||||||
|
Name = "ExtUser",
|
||||||
|
NormalizedName = "EXTUSER"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "2d87821f-5c6d-4d9e-98d7-7ae801030100",
|
||||||
|
ConcurrencyStamp = "9ee56f2f-558f-4579-9ad7-4a6150e3d822",
|
||||||
|
Name = "ExtTransp",
|
||||||
|
NormalizedName = "EXTTRANSP"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "db1d1ac5-905d-46a5-bcf4-ef8a5f3f715c",
|
||||||
|
ConcurrencyStamp = "3244e9d3-ab0e-45ae-97b6-c8c74f57cf64",
|
||||||
|
Name = "User",
|
||||||
|
NormalizedName = "USER"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "7e3dc53b-c152-440f-a49d-6c3a2f6bf6eb",
|
||||||
|
ConcurrencyStamp = "a0a109e5-ab8e-4e20-9aa8-eba3c429fd12",
|
||||||
|
Name = "Admin",
|
||||||
|
NormalizedName = "ADMIN"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "2fcd8455-143a-4ebc-b41c-e9bdf6a0315b",
|
||||||
|
ConcurrencyStamp = "549b8a8d-ba83-4b79-be88-fde0bd4cc60f",
|
||||||
|
Name = "SuperAdmin",
|
||||||
|
NormalizedName = "SUPERADMIN"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ClaimType")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("ClaimValue")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("RoleId")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("RoleId");
|
||||||
|
|
||||||
|
b.ToTable("AspNetRoleClaims");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("Id")
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.Property<int>("AccessFailedCount")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ConcurrencyStamp")
|
||||||
|
.IsConcurrencyToken()
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("Email")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.Property<bool>("EmailConfirmed")
|
||||||
|
.HasColumnType("tinyint(1)");
|
||||||
|
|
||||||
|
b.Property<bool>("LockoutEnabled")
|
||||||
|
.HasColumnType("tinyint(1)");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset?>("LockoutEnd")
|
||||||
|
.HasColumnType("datetime(6)");
|
||||||
|
|
||||||
|
b.Property<string>("NormalizedEmail")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.Property<string>("NormalizedUserName")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.Property<string>("PasswordHash")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("PhoneNumber")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<bool>("PhoneNumberConfirmed")
|
||||||
|
.HasColumnType("tinyint(1)");
|
||||||
|
|
||||||
|
b.Property<string>("SecurityStamp")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<bool>("TwoFactorEnabled")
|
||||||
|
.HasColumnType("tinyint(1)");
|
||||||
|
|
||||||
|
b.Property<string>("UserName")
|
||||||
|
.HasMaxLength(256)
|
||||||
|
.HasColumnType("varchar(256)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("NormalizedEmail")
|
||||||
|
.HasDatabaseName("EmailIndex");
|
||||||
|
|
||||||
|
b.HasIndex("NormalizedUserName")
|
||||||
|
.IsUnique()
|
||||||
|
.HasDatabaseName("UserNameIndex");
|
||||||
|
|
||||||
|
b.ToTable("AspNetUsers");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("ClaimType")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("ClaimValue")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("UserId")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("UserId");
|
||||||
|
|
||||||
|
b.ToTable("AspNetUserClaims");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("LoginProvider")
|
||||||
|
.HasMaxLength(128)
|
||||||
|
.HasColumnType("varchar(128)");
|
||||||
|
|
||||||
|
b.Property<string>("ProviderKey")
|
||||||
|
.HasMaxLength(128)
|
||||||
|
.HasColumnType("varchar(128)");
|
||||||
|
|
||||||
|
b.Property<string>("ProviderDisplayName")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.Property<string>("UserId")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.HasKey("LoginProvider", "ProviderKey");
|
||||||
|
|
||||||
|
b.HasIndex("UserId");
|
||||||
|
|
||||||
|
b.ToTable("AspNetUserLogins");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("UserId")
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.Property<string>("RoleId")
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.HasKey("UserId", "RoleId");
|
||||||
|
|
||||||
|
b.HasIndex("RoleId");
|
||||||
|
|
||||||
|
b.ToTable("AspNetUserRoles");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||||
|
{
|
||||||
|
b.Property<string>("UserId")
|
||||||
|
.HasColumnType("varchar(255)");
|
||||||
|
|
||||||
|
b.Property<string>("LoginProvider")
|
||||||
|
.HasMaxLength(128)
|
||||||
|
.HasColumnType("varchar(128)");
|
||||||
|
|
||||||
|
b.Property<string>("Name")
|
||||||
|
.HasMaxLength(128)
|
||||||
|
.HasColumnType("varchar(128)");
|
||||||
|
|
||||||
|
b.Property<string>("Value")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.HasKey("UserId", "LoginProvider", "Name");
|
||||||
|
|
||||||
|
b.ToTable("AspNetUserTokens");
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("RoleId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<string>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<string>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<string>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("RoleId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<string>", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null)
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("UserId")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
});
|
||||||
|
#pragma warning restore 612, 618
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace GWMS.User.Migrations
|
||||||
|
{
|
||||||
|
public partial class AddTransporterRule : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "00e6b3ed-dd0e-4cd5-8d3d-f88d8ae5e145");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "5287113c-6493-4419-bbc9-2cb2f6455006");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "5b928219-a530-49c6-be33-f65253865a98");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "e9befc87-9732-4c21-b91e-7aea6a289d35");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "f27a0416-02cc-4e4c-8983-29cb51eb4f9a");
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "DbSetCounts",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
Count = table.Column<int>(type: "int", nullable: false),
|
||||||
|
TableName = table.Column<string>(type: "longtext", nullable: true)
|
||||||
|
.Annotation("MySql:CharSet", "utf8mb4")
|
||||||
|
},
|
||||||
|
constraints: table =>
|
||||||
|
{
|
||||||
|
})
|
||||||
|
.Annotation("MySql:CharSet", "utf8mb4");
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ "339a7ac3-4fcd-4baa-bd19-a6a09d1b7c5d", "3caf0732-df97-4b81-ba2c-9fb51e34532a", "Undef", "UNDEF" },
|
||||||
|
{ "47c8d4fb-6925-4ef0-a830-5df33e705d7a", "9671ece6-f70a-4ca6-88db-64562e007c72", "ExtUser", "EXTUSER" },
|
||||||
|
{ "2d87821f-5c6d-4d9e-98d7-7ae801030100", "9ee56f2f-558f-4579-9ad7-4a6150e3d822", "ExtTransp", "EXTTRANSP" },
|
||||||
|
{ "db1d1ac5-905d-46a5-bcf4-ef8a5f3f715c", "3244e9d3-ab0e-45ae-97b6-c8c74f57cf64", "User", "USER" },
|
||||||
|
{ "7e3dc53b-c152-440f-a49d-6c3a2f6bf6eb", "a0a109e5-ab8e-4e20-9aa8-eba3c429fd12", "Admin", "ADMIN" },
|
||||||
|
{ "2fcd8455-143a-4ebc-b41c-e9bdf6a0315b", "549b8a8d-ba83-4b79-be88-fde0bd4cc60f", "SuperAdmin", "SUPERADMIN" }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "DbSetCounts");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "2d87821f-5c6d-4d9e-98d7-7ae801030100");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "2fcd8455-143a-4ebc-b41c-e9bdf6a0315b");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "339a7ac3-4fcd-4baa-bd19-a6a09d1b7c5d");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "47c8d4fb-6925-4ef0-a830-5df33e705d7a");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "7e3dc53b-c152-440f-a49d-6c3a2f6bf6eb");
|
||||||
|
|
||||||
|
migrationBuilder.DeleteData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
keyColumn: "Id",
|
||||||
|
keyValue: "db1d1ac5-905d-46a5-bcf4-ef8a5f3f715c");
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "AspNetRoles",
|
||||||
|
columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" },
|
||||||
|
values: new object[,]
|
||||||
|
{
|
||||||
|
{ "5287113c-6493-4419-bbc9-2cb2f6455006", "00059b0a-3e8c-406e-a578-2ae40c52435a", "Undef", "UNDEF" },
|
||||||
|
{ "f27a0416-02cc-4e4c-8983-29cb51eb4f9a", "b58874fc-02b5-4efa-b4d5-61bfda8b7c67", "ExtUser", "EXTUSER" },
|
||||||
|
{ "00e6b3ed-dd0e-4cd5-8d3d-f88d8ae5e145", "cd1f0ba9-9f42-42f3-8271-1627ef55d36f", "User", "USER" },
|
||||||
|
{ "5b928219-a530-49c6-be33-f65253865a98", "6de09bee-9a83-416a-90c4-27bb643519f6", "Admin", "ADMIN" },
|
||||||
|
{ "e9befc87-9732-4c21-b91e-7aea6a289d35", "f2bf6c1c-4043-4344-8b68-c8b2122ab88f", "SuperAdmin", "SUPERADMIN" }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,18 @@ namespace GWMS.User.Migrations
|
|||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 64)
|
.HasAnnotation("Relational:MaxIdentifierLength", 64)
|
||||||
.HasAnnotation("ProductVersion", "5.0.8");
|
.HasAnnotation("ProductVersion", "5.0.7");
|
||||||
|
|
||||||
|
modelBuilder.Entity("GWMS.Data.DatabaseModels.TableCount", b =>
|
||||||
|
{
|
||||||
|
b.Property<int>("Count")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<string>("TableName")
|
||||||
|
.HasColumnType("longtext");
|
||||||
|
|
||||||
|
b.ToTable("DbSetCounts");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
|
||||||
{
|
{
|
||||||
@@ -45,36 +56,43 @@ namespace GWMS.User.Migrations
|
|||||||
b.HasData(
|
b.HasData(
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = "5287113c-6493-4419-bbc9-2cb2f6455006",
|
Id = "339a7ac3-4fcd-4baa-bd19-a6a09d1b7c5d",
|
||||||
ConcurrencyStamp = "00059b0a-3e8c-406e-a578-2ae40c52435a",
|
ConcurrencyStamp = "3caf0732-df97-4b81-ba2c-9fb51e34532a",
|
||||||
Name = "Undef",
|
Name = "Undef",
|
||||||
NormalizedName = "UNDEF"
|
NormalizedName = "UNDEF"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = "f27a0416-02cc-4e4c-8983-29cb51eb4f9a",
|
Id = "47c8d4fb-6925-4ef0-a830-5df33e705d7a",
|
||||||
ConcurrencyStamp = "b58874fc-02b5-4efa-b4d5-61bfda8b7c67",
|
ConcurrencyStamp = "9671ece6-f70a-4ca6-88db-64562e007c72",
|
||||||
Name = "ExtUser",
|
Name = "ExtUser",
|
||||||
NormalizedName = "EXTUSER"
|
NormalizedName = "EXTUSER"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = "00e6b3ed-dd0e-4cd5-8d3d-f88d8ae5e145",
|
Id = "2d87821f-5c6d-4d9e-98d7-7ae801030100",
|
||||||
ConcurrencyStamp = "cd1f0ba9-9f42-42f3-8271-1627ef55d36f",
|
ConcurrencyStamp = "9ee56f2f-558f-4579-9ad7-4a6150e3d822",
|
||||||
|
Name = "ExtTransp",
|
||||||
|
NormalizedName = "EXTTRANSP"
|
||||||
|
},
|
||||||
|
new
|
||||||
|
{
|
||||||
|
Id = "db1d1ac5-905d-46a5-bcf4-ef8a5f3f715c",
|
||||||
|
ConcurrencyStamp = "3244e9d3-ab0e-45ae-97b6-c8c74f57cf64",
|
||||||
Name = "User",
|
Name = "User",
|
||||||
NormalizedName = "USER"
|
NormalizedName = "USER"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = "5b928219-a530-49c6-be33-f65253865a98",
|
Id = "7e3dc53b-c152-440f-a49d-6c3a2f6bf6eb",
|
||||||
ConcurrencyStamp = "6de09bee-9a83-416a-90c4-27bb643519f6",
|
ConcurrencyStamp = "a0a109e5-ab8e-4e20-9aa8-eba3c429fd12",
|
||||||
Name = "Admin",
|
Name = "Admin",
|
||||||
NormalizedName = "ADMIN"
|
NormalizedName = "ADMIN"
|
||||||
},
|
},
|
||||||
new
|
new
|
||||||
{
|
{
|
||||||
Id = "e9befc87-9732-4c21-b91e-7aea6a289d35",
|
Id = "2fcd8455-143a-4ebc-b41c-e9bdf6a0315b",
|
||||||
ConcurrencyStamp = "f2bf6c1c-4043-4344-8b68-c8b2122ab88f",
|
ConcurrencyStamp = "549b8a8d-ba83-4b79-be88-fde0bd4cc60f",
|
||||||
Name = "SuperAdmin",
|
Name = "SuperAdmin",
|
||||||
NormalizedName = "SUPERADMIN"
|
NormalizedName = "SUPERADMIN"
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace GWMS.Data
|
|||||||
builder.HasData(
|
builder.HasData(
|
||||||
new IdentityRole { Name = "Undef", NormalizedName = "UNDEF" },
|
new IdentityRole { Name = "Undef", NormalizedName = "UNDEF" },
|
||||||
new IdentityRole { Name = "ExtUser", NormalizedName = "EXTUSER" },
|
new IdentityRole { Name = "ExtUser", NormalizedName = "EXTUSER" },
|
||||||
|
new IdentityRole { Name = "ExtTransp", NormalizedName = "EXTTRANSP" },
|
||||||
new IdentityRole { Name = "User", NormalizedName = "USER" },
|
new IdentityRole { Name = "User", NormalizedName = "USER" },
|
||||||
new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" },
|
new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" },
|
||||||
new IdentityRole { Name = "SuperAdmin", NormalizedName = "SUPERADMIN" }
|
new IdentityRole { Name = "SuperAdmin", NormalizedName = "SUPERADMIN" }
|
||||||
|
|||||||
@@ -1,7 +1,21 @@
|
|||||||
@page
|
@page
|
||||||
@model ConfirmEmailModel
|
@model ConfirmEmailModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Confirm email";
|
ViewData["Title"] = "Conferma Effettuata";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="alert alert-success">
|
||||||
|
<p>L'email è stata confermata! ora puoi effettuare il login all'applicazione</p>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-6">
|
||||||
|
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-sm btn-success btn-block"><i class="fas fa-sign-in-alt"></i> Login Page</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -1,26 +1,30 @@
|
|||||||
@page
|
@page
|
||||||
@model ForgotPasswordModel
|
@model ForgotPasswordModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Forgot your password?";
|
ViewData["Title"] = "Password dimenticata?";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
<h4>Enter your email.</h4>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
<hr />
|
<div class="card-body">
|
||||||
<div class="row">
|
<h4>Inserire l'account email registrato</h4>
|
||||||
<div class="col-md-4">
|
<hr />
|
||||||
<form method="post">
|
<div class="row">
|
||||||
<div asp-validation-summary="All" class="text-danger"></div>
|
<div class="col-md-4">
|
||||||
<div class="form-group">
|
<form method="post">
|
||||||
<label asp-for="Input.Email"></label>
|
<div asp-validation-summary="All" class="text-danger"></div>
|
||||||
<input asp-for="Input.Email" class="form-control" />
|
<div class="form-group">
|
||||||
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
<label asp-for="Input.Email"></label>
|
||||||
|
<input asp-for="Input.Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary btn-block"><i class="fas fa-envelope"></i> Inoltra richiesta reset password</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary">Submit</button>
|
</div>
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<partial name="_ValidationScriptsPartial" />
|
<partial name="_ValidationScriptsPartial" />
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,21 @@
|
|||||||
@page
|
@page
|
||||||
@model ForgotPasswordConfirmation
|
@model ForgotPasswordConfirmation
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Forgot password confirmation";
|
ViewData["Title"] = "Password dimenticata";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
<p>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
Please check your email to reset your password.
|
<div class="card-body">
|
||||||
</p>
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<p>
|
||||||
|
Prego verificare l'account email per le istruzioni relative alla reimpostazione della password.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-4">
|
||||||
|
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-primary btn-block"><i class="fas fa-sign-in-alt"></i> Login Page</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -4,18 +4,37 @@
|
|||||||
ViewData["Title"] = "Log out";
|
ViewData["Title"] = "Log out";
|
||||||
}
|
}
|
||||||
|
|
||||||
<header>
|
<div class="card">
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
@{
|
<div class="card-body">
|
||||||
if (User.Identity.IsAuthenticated)
|
@{
|
||||||
{
|
if (User.Identity.IsAuthenticated)
|
||||||
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/", new { area = "" })" method="post">
|
{
|
||||||
<button type="submit" class="nav-link btn btn-warning">Click here to Logout</button>
|
<form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/", new { area = "" })" method="post">
|
||||||
</form>
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<p>Premendo sul pulsante effettuerai il logout dal sistema.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<button type="submit" class="nav-link btn btn-warning"><i class="fas fa-sign-out-alt"></i> Clicca per Logout</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<p>Disconnesisone effettuata.</p>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<a title="Home" href="~/" class="btn btn-sm btn-primary btn-block"><i class="fas fa-home"></i> Home Page</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-6">
|
||||||
|
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-sm btn-success btn-block"><i class="fas fa-sign-in-alt"></i> Login Page</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
</div>
|
||||||
{
|
</div>
|
||||||
<p>You have successfully logged out of the application.</p>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</header>
|
|
||||||
@@ -4,82 +4,87 @@
|
|||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Log in";
|
ViewData["Title"] = "Log in";
|
||||||
}
|
}
|
||||||
|
<div class="card">
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
<div class="row">
|
<div class="card-body">
|
||||||
<div class="col-md-6">
|
<div class="row">
|
||||||
<section>
|
<div class="col-md-6">
|
||||||
<form id="account" method="post">
|
<section>
|
||||||
<h4>Use a local account to log in.</h4>
|
<form id="account" method="post">
|
||||||
<hr />
|
<h4>Effettuare login con l'account registrato.</h4>
|
||||||
<div asp-validation-summary="All" class="text-danger"></div>
|
<hr />
|
||||||
<div class="form-group">
|
<div asp-validation-summary="All" class="text-danger"></div>
|
||||||
<label asp-for="Input.Email"></label>
|
<div class="form-group">
|
||||||
<input asp-for="Input.Email" class="form-control" />
|
<label asp-for="Input.Email"></label>
|
||||||
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
<input asp-for="Input.Email" class="form-control" />
|
||||||
</div>
|
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
||||||
<div class="form-group">
|
|
||||||
<label asp-for="Input.Password"></label>
|
|
||||||
<input asp-for="Input.Password" class="form-control" />
|
|
||||||
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<div class="checkbox">
|
|
||||||
<label asp-for="Input.RememberMe">
|
|
||||||
<input asp-for="Input.RememberMe" />
|
|
||||||
@Html.DisplayNameFor(m => m.Input.RememberMe)
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<button type="submit" class="btn btn-primary">Log in</button>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<p>
|
|
||||||
<a id="forgot-password" asp-page="./ForgotPassword">Forgot your password?</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a id="resend-confirmation" asp-page="./ResendEmailConfirmation">Resend email confirmation</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</section>
|
|
||||||
</div>
|
|
||||||
@*<div class="col-md-6 col-md-offset-2">
|
|
||||||
<section>
|
|
||||||
<h4>Use another service to log in.</h4>
|
|
||||||
<hr />
|
|
||||||
@{
|
|
||||||
if ((Model.ExternalLogins?.Count ?? 0) == 0)
|
|
||||||
{
|
|
||||||
<div>
|
|
||||||
<p>
|
|
||||||
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
|
|
||||||
for details on setting up this ASP.NET application to support logging in via external services.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
<div class="form-group">
|
||||||
else
|
<label asp-for="Input.Password"></label>
|
||||||
{
|
<input asp-for="Input.Password" class="form-control" />
|
||||||
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
|
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
||||||
<div>
|
</div>
|
||||||
<p>
|
<div class="form-group">
|
||||||
@foreach (var provider in Model.ExternalLogins)
|
<div class="checkbox">
|
||||||
{
|
<label asp-for="Input.RememberMe">
|
||||||
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
|
<input asp-for="Input.RememberMe" />
|
||||||
}
|
@Html.DisplayNameFor(m => m.Input.RememberMe)
|
||||||
</p>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</div>
|
||||||
}
|
|
||||||
}
|
|
||||||
</section>
|
|
||||||
</div>*@
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<div class="form-row">
|
||||||
|
<div class="col">
|
||||||
|
<button type="submit" class="btn btn-block btn-primary"><i class="fas fa-sign-in-alt"></i> Log in</button>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<a asp-page="./Register" class="btn btn-block btn-outline-primary" asp-route-returnUrl="@Model.ReturnUrl"><i class="fas fa-edit"></i> Registra account</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-row mt-2">
|
||||||
|
<div class="col">
|
||||||
|
<a id="forgot-password" class="btn btn-block btn-outline-info" asp-page="./ForgotPassword"><i class="far fa-life-ring"></i> Password dimenticata?</a>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<a id="resend-confirmation" class="btn btn-block btn-outline-dark" asp-page="./ResendEmailConfirmation"><i class="far fa-envelope"></i> (Re)Invia email conferma</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
@*<div class="col-md-6 col-md-offset-2">
|
||||||
|
<section>
|
||||||
|
<h4>Use another service to log in.</h4>
|
||||||
|
<hr />
|
||||||
|
@{
|
||||||
|
if ((Model.ExternalLogins?.Count ?? 0) == 0)
|
||||||
|
{
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
|
||||||
|
for details on setting up this ASP.NET application to support logging in via external services.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
@foreach (var provider in Model.ExternalLogins)
|
||||||
|
{
|
||||||
|
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
|
||||||
|
}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
</div>*@
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<partial name="_ValidationScriptsPartial" />
|
<partial name="_ValidationScriptsPartial" />
|
||||||
}
|
}
|
||||||
@@ -81,16 +81,18 @@ namespace GWMS.UI.Areas.Identity.Pages.Account
|
|||||||
// verifico ruoli...
|
// verifico ruoli...
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
{
|
||||||
|
bool needCreate = true;
|
||||||
// Gestione salvataggio ruoli... SE VARIATO...
|
// Gestione salvataggio ruoli... SE VARIATO...
|
||||||
var UserRoles = await _userManager.GetRolesAsync(user);
|
var UserRoles = await _userManager.GetRolesAsync(user);
|
||||||
if (UserRoles != null && UserRoles.Count > 0)
|
if (UserRoles != null && UserRoles.Count > 0)
|
||||||
{
|
{
|
||||||
var oldRole = UserRoles.Where(x => x == ADMIN_ROLE).FirstOrDefault();
|
var oldRole = UserRoles.Where(x => x == ADMIN_ROLE).FirstOrDefault();
|
||||||
if (oldRole == null)
|
needCreate = (oldRole == null);
|
||||||
{
|
}
|
||||||
// aggiungo a ruolo admin
|
if (needCreate)
|
||||||
await _userManager.AddToRoleAsync(user, ADMIN_ROLE);
|
{
|
||||||
}
|
// aggiungo a ruolo admin
|
||||||
|
await _userManager.AddToRoleAsync(user, ADMIN_ROLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,7 +103,7 @@ namespace GWMS.UI.Areas.Identity.Pages.Account
|
|||||||
|
|
||||||
public async Task OnGetAsync(string returnUrl = null)
|
public async Task OnGetAsync(string returnUrl = null)
|
||||||
{
|
{
|
||||||
CheckSuperAdmin();
|
await CheckSuperAdmin();
|
||||||
if (!string.IsNullOrEmpty(ErrorMessage))
|
if (!string.IsNullOrEmpty(ErrorMessage))
|
||||||
{
|
{
|
||||||
ModelState.AddModelError(string.Empty, ErrorMessage);
|
ModelState.AddModelError(string.Empty, ErrorMessage);
|
||||||
|
|||||||
@@ -1,67 +1,70 @@
|
|||||||
@page
|
@page
|
||||||
@model RegisterModel
|
@model RegisterModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Register";
|
ViewData["Title"] = "Registrazione";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
<div class="row">
|
<div class="card-body">
|
||||||
<div class="col-md-4">
|
<div class="row">
|
||||||
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
|
<div class="col-md-4">
|
||||||
<h4>Create a new account.</h4>
|
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
|
||||||
<hr />
|
<h4>Creazione nuovo account.</h4>
|
||||||
<div asp-validation-summary="All" class="text-danger"></div>
|
<hr />
|
||||||
<div class="form-group">
|
<div asp-validation-summary="All" class="text-danger"></div>
|
||||||
<label asp-for="Input.Email"></label>
|
<div class="form-group">
|
||||||
<input asp-for="Input.Email" class="form-control" />
|
<label asp-for="Input.Email"></label>
|
||||||
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
<input asp-for="Input.Email" class="form-control" />
|
||||||
</div>
|
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
||||||
<div class="form-group">
|
|
||||||
<label asp-for="Input.Password"></label>
|
|
||||||
<input asp-for="Input.Password" class="form-control" />
|
|
||||||
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label asp-for="Input.ConfirmPassword"></label>
|
|
||||||
<input asp-for="Input.ConfirmPassword" class="form-control" />
|
|
||||||
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-primary">Register</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 col-md-offset-2">
|
|
||||||
<section>
|
|
||||||
<h4>Use another service to register.</h4>
|
|
||||||
<hr />
|
|
||||||
@{
|
|
||||||
if ((Model.ExternalLogins?.Count ?? 0) == 0)
|
|
||||||
{
|
|
||||||
<div>
|
|
||||||
<p>
|
|
||||||
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
|
|
||||||
for details on setting up this ASP.NET application to support logging in via external services.
|
|
||||||
</p>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
<div class="form-group">
|
||||||
else
|
<label asp-for="Input.Password"></label>
|
||||||
{
|
<input asp-for="Input.Password" class="form-control" />
|
||||||
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
|
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
||||||
<div>
|
</div>
|
||||||
<p>
|
<div class="form-group">
|
||||||
@foreach (var provider in Model.ExternalLogins)
|
<label asp-for="Input.ConfirmPassword"></label>
|
||||||
{
|
<input asp-for="Input.ConfirmPassword" class="form-control" />
|
||||||
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
|
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
|
||||||
}
|
</div>
|
||||||
</p>
|
<button type="submit" class="btn btn-success btn-block"><i class="far fa-save"></i> Registra Account</button>
|
||||||
</div>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
}
|
@*<div class="col-md-6 col-md-offset-2">
|
||||||
}
|
<section>
|
||||||
</section>
|
<h4>Use another service to register.</h4>
|
||||||
|
<hr />
|
||||||
|
@{
|
||||||
|
if ((Model.ExternalLogins?.Count ?? 0) == 0)
|
||||||
|
{
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
|
||||||
|
for details on setting up this ASP.NET application to support logging in via external services.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
@foreach (var provider in Model.ExternalLogins)
|
||||||
|
{
|
||||||
|
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
|
||||||
|
}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</section>
|
||||||
|
</div>*@
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<partial name="_ValidationScriptsPartial" />
|
<partial name="_ValidationScriptsPartial" />
|
||||||
}
|
}
|
||||||
@@ -83,8 +83,8 @@ namespace GWMS.UI.Areas.Identity.Pages.Account
|
|||||||
values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
|
values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
|
||||||
protocol: Request.Scheme);
|
protocol: Request.Scheme);
|
||||||
|
|
||||||
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
|
await _emailSender.SendEmailAsync(Input.Email, "GWMS: Richiesta conferma email",
|
||||||
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
|
$"Prego cliccare sul <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>seguente link</a> per confermare l'account registrato con questa email.");
|
||||||
|
|
||||||
if (_userManager.Options.SignIn.RequireConfirmedAccount)
|
if (_userManager.Options.SignIn.RequireConfirmedAccount)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,22 +1,24 @@
|
|||||||
@page
|
@page
|
||||||
@model RegisterConfirmationModel
|
@model RegisterConfirmationModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Register confirmation";
|
ViewData["Title"] = "Conferma richiesta";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
@{
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
if (@Model.DisplayConfirmAccountLink)
|
<div class="card-body">
|
||||||
{
|
<div class="alert alert-warning">
|
||||||
<p>
|
<h4>Account creato!</h4>
|
||||||
This app does not currently have a real email sender registered, see <a href="https://aka.ms/aspaccountconf">these docs</a> for how to configure a real email sender.
|
<p>Ora è necessario effettuare la verifica dell'email registrata</p>
|
||||||
Normally this would be emailed: <a id="confirm-link" href="@Model.EmailConfirmationUrl">Click here to confirm your account</a>
|
</div>
|
||||||
</p>
|
<b>Prego verifica la posta ricevuta all'account registrato per effettuare la conferma.</b>
|
||||||
}
|
<p>Riceverai un email da steamwarebot at gmail.com con un link da cliccare per completare la registrazione. Dopo la conferma potrai effettuare il login all'applicazione.</p>
|
||||||
else
|
</div>
|
||||||
{
|
<div class="card-footer">
|
||||||
<p>
|
<div class="row">
|
||||||
Please check your email to confirm your account.
|
<div class="col-6">
|
||||||
</p>
|
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-sm btn-success btn-block"><i class="fas fa-sign-in-alt"></i> Login Page</a>
|
||||||
}
|
</div>
|
||||||
}
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -31,7 +31,6 @@ namespace GWMS.UI.Areas.Identity.Pages.Account
|
|||||||
|
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
public bool DisplayConfirmAccountLink { get; set; }
|
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
public string EmailConfirmationUrl { get; set; }
|
public string EmailConfirmationUrl { get; set; }
|
||||||
|
|
||||||
@@ -53,19 +52,6 @@ namespace GWMS.UI.Areas.Identity.Pages.Account
|
|||||||
}
|
}
|
||||||
|
|
||||||
Email = email;
|
Email = email;
|
||||||
// Once you add a real email sender, you should remove this code that lets you confirm the account
|
|
||||||
DisplayConfirmAccountLink = false;
|
|
||||||
if (DisplayConfirmAccountLink)
|
|
||||||
{
|
|
||||||
var userId = await _userManager.GetUserIdAsync(user);
|
|
||||||
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
|
|
||||||
code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
|
|
||||||
EmailConfirmationUrl = Url.Page(
|
|
||||||
"/Account/ConfirmEmail",
|
|
||||||
pageHandler: null,
|
|
||||||
values: new { area = "Identity", userId = userId, code = code, returnUrl = returnUrl },
|
|
||||||
protocol: Request.Scheme);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,30 @@
|
|||||||
@page
|
@page
|
||||||
@model ResendEmailConfirmationModel
|
@model ResendEmailConfirmationModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Resend email confirmation";
|
ViewData["Title"] = "Reinvia email di conferma";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
<h4>Enter your email.</h4>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
<hr />
|
<div class="card-body">
|
||||||
<div class="row">
|
<h4>Inserire l'account email registrato.</h4>
|
||||||
<div class="col-md-4">
|
<hr />
|
||||||
<form method="post">
|
<div class="row">
|
||||||
<div asp-validation-summary="All" class="text-danger"></div>
|
<div class="col-md-4">
|
||||||
<div class="form-group">
|
<form method="post">
|
||||||
<label asp-for="Input.Email"></label>
|
<div asp-validation-summary="All" class="text-danger"></div>
|
||||||
<input asp-for="Input.Email" class="form-control" />
|
<div class="form-group">
|
||||||
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
<label asp-for="Input.Email"></label>
|
||||||
|
<input asp-for="Input.Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary btn-block"><i class="fas fa-envelope"></i> Invia nuovamente email</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-primary">Resend</button>
|
</div>
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<partial name="_ValidationScriptsPartial" />
|
<partial name="_ValidationScriptsPartial" />
|
||||||
}
|
}
|
||||||
@@ -1,37 +1,41 @@
|
|||||||
@page
|
@page
|
||||||
@model ResetPasswordModel
|
@model ResetPasswordModel
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Reset password";
|
ViewData["Title"] = "Reset Password";
|
||||||
}
|
}
|
||||||
|
|
||||||
<h1>@ViewData["Title"]</h1>
|
<div class="card">
|
||||||
<h4>Reset your password.</h4>
|
<div class="card-header"><h1>@ViewData["Title"]</h1></div>
|
||||||
<hr />
|
<div class="card-body">
|
||||||
<div class="row">
|
<h4>Reset password.</h4>
|
||||||
<div class="col-md-4">
|
<hr />
|
||||||
<form method="post">
|
<div class="row">
|
||||||
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
<div class="col-md-4">
|
||||||
<input asp-for="Input.Code" type="hidden" />
|
<form method="post">
|
||||||
<div class="form-group">
|
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
|
||||||
<label asp-for="Input.Email"></label>
|
<input asp-for="Input.Code" type="hidden" />
|
||||||
<input asp-for="Input.Email" class="form-control" />
|
<div class="form-group">
|
||||||
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
<label asp-for="Input.Email"></label>
|
||||||
|
<input asp-for="Input.Email" class="form-control" />
|
||||||
|
<span asp-validation-for="Input.Email" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Input.Password"></label>
|
||||||
|
<input asp-for="Input.Password" class="form-control" />
|
||||||
|
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label asp-for="Input.ConfirmPassword"></label>
|
||||||
|
<input asp-for="Input.ConfirmPassword" class="form-control" />
|
||||||
|
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-primary btn-block"><i class="fas fa-envelope"></i> Reset Password</button>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
</div>
|
||||||
<label asp-for="Input.Password"></label>
|
|
||||||
<input asp-for="Input.Password" class="form-control" />
|
|
||||||
<span asp-validation-for="Input.Password" class="text-danger"></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label asp-for="Input.ConfirmPassword"></label>
|
|
||||||
<input asp-for="Input.ConfirmPassword" class="form-control" />
|
|
||||||
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-primary">Reset</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@section Scripts {
|
@section Scripts {
|
||||||
<partial name="_ValidationScriptsPartial" />
|
<partial name="_ValidationScriptsPartial" />
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<div class="row px-1 text-light">
|
<div class="form-row text-light">
|
||||||
<div class="col-5 pr-0 text-left">
|
<div class="col-5 pr-0 text-left">
|
||||||
GWMS <span class="small">v.@version</span>
|
GWMS <span class="small">v.@version</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,14 +6,14 @@
|
|||||||
@inject MessageService AppMessages
|
@inject MessageService AppMessages
|
||||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||||
|
|
||||||
<div class="row pt-3">
|
<div class="form-row pt-3">
|
||||||
<div class="col-6 col-md-5 col-lg-4 col-xl-3 px-0 text-truncate">
|
<div class="col-7 col-md-6 col-lg-4 col-xl-3">
|
||||||
<LoginDisplay></LoginDisplay>
|
<LoginDisplay></LoginDisplay>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-md-2 col-lg-4 col-xl-6 d-none d-lg-block text-center h4 px-1 text-truncate">
|
<div class="col-12 col-lg-4 col-xl-6 d-none d-lg-block text-center h4 text-truncate">
|
||||||
<span class="@PageIcon" aria-hidden="true"></span> @PageName
|
<span class="@PageIcon" aria-hidden="true"></span> @PageName
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 col-md-5 col-lg-4 col-xl-3 text-right pl-0">
|
<div class="col-5 col-md-6 col-lg-4 col-xl-3 text-right">
|
||||||
@if (ShowSearch)
|
@if (ShowSearch)
|
||||||
{
|
{
|
||||||
<SearchMod></SearchMod>
|
<SearchMod></SearchMod>
|
||||||
|
|||||||
@@ -4,26 +4,28 @@
|
|||||||
|
|
||||||
<AuthorizeView>
|
<AuthorizeView>
|
||||||
<Authorized>
|
<Authorized>
|
||||||
<div class="input-group">
|
<div class="input-group text-truncate">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<a title="LogOut" href="Identity/Account/LogOut" class="btn btn-sm btn-danger ml-3"><i class="fas fa-sign-out-alt"></i></a>
|
<a title="LogOut" href="Identity/Account/LogOut" class="btn btn-sm btn-danger"><i class="fas fa-sign-out-alt"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<a title="Manage" href="Identity/Account/Manage" class="btn btn-sm btn-outline-dark mx-0 px-1">
|
<a title="Gestione account @userName" href="Identity/Account/Manage" class="btn btn-sm btn-outline-dark mx-0 px-1">
|
||||||
<i class="fas fa-user-alt"></i> @userName
|
<div class="d-none d-sm-block">
|
||||||
|
<i class="fas fa-user-alt"></i> @StringLim(userName, 30)
|
||||||
|
</div>
|
||||||
|
<div class="d-block d-sm-none">
|
||||||
|
<i class="fas fa-user-alt"></i> @StringLim(userName, 15)
|
||||||
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</Authorized>
|
</Authorized>
|
||||||
<NotAuthorized>
|
<NotAuthorized>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-sm btn-success ml-3"><i class="fas fa-sign-in-alt"></i></a>
|
<a title="LogIn" href="Identity/Account/LogIn" class="btn btn-sm btn-success"><i class="fas fa-sign-in-alt"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-control form-control-sm">
|
<div class="form-control form-control-sm">
|
||||||
<i class="fas fa-user-alt"></i> @userName
|
<i class="fas fa-user-alt"></i> @userName
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group-append">
|
|
||||||
<a title="Register" href="Identity/Account/Register" class="btn btn-sm btn-primary ml-0"><i class="fas fa-edit"></i></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</NotAuthorized>
|
</NotAuthorized>
|
||||||
</AuthorizeView>
|
</AuthorizeView>
|
||||||
@@ -51,4 +53,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected string StringLim(string original, int maxLen)
|
||||||
|
{
|
||||||
|
return original.Length <= maxLen ? original : $"{original.Substring(0, maxLen - 3)}...";
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -20,7 +20,8 @@
|
|||||||
<DataAnnotationsValidator />
|
<DataAnnotationsValidator />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-1">
|
<div class="col-12 col-lg-1">
|
||||||
<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" width="85" />
|
<div id="qrCodeImg"></div>
|
||||||
|
@*<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" width="85" />*@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-9 align-items-center">
|
<div class="col-12 col-lg-9 align-items-center">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -266,6 +267,20 @@
|
|||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
|
await JSRuntime.InvokeVoidAsync("displayQr", "qrCodeImg", rawCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string rawCode
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (_currItem != null)
|
||||||
|
{
|
||||||
|
answ = _currItem.OrderCode;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
@@ -290,17 +305,17 @@
|
|||||||
return q[parmName] ?? "";
|
return q[parmName] ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// Restituisce URL immagine QRCode
|
///// Restituisce URL immagine QRCode
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
///// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
protected string getImgUrl(object QrValue)
|
//protected string getImgUrl(object QrValue)
|
||||||
{
|
//{
|
||||||
string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
// string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
||||||
string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
// string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
||||||
string answ = $"{baseUrl}{payload}";
|
// string answ = $"{baseUrl}{payload}";
|
||||||
return answ;
|
// return answ;
|
||||||
}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
@inject MessageService AppMService
|
@inject MessageService AppMService
|
||||||
@inject GWMSDataService DataService
|
@inject GWMSDataService DataService
|
||||||
@inject IConfiguration Configuration
|
@inject IConfiguration Configuration
|
||||||
|
@inject IJSRuntime JSRuntime
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header bg-info text-light">
|
<div class="card-header bg-info text-light">
|
||||||
@@ -17,10 +18,11 @@
|
|||||||
<EditForm Model="@_currItem">
|
<EditForm Model="@_currItem">
|
||||||
<DataAnnotationsValidator />
|
<DataAnnotationsValidator />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-2">
|
<div class="col-12 col-lg-1">
|
||||||
<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" width="85" />
|
<div id="qrCodeImg"></div>
|
||||||
|
@*<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" width="85" />*@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-8 align-items-center">
|
<div class="col-12 col-lg-9 align-items-center">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
@@ -66,10 +68,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-2">
|
<div class="col-12 col-lg-2">
|
||||||
<div class="mb-2">
|
<div class="mb-2">
|
||||||
<button type="button" class="btn btn-outline-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
|
<button type="button" class="btn btn-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<button type="button" class="btn btn-outline-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
|
<button type="button" class="btn btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -138,6 +140,20 @@
|
|||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
|
await JSRuntime.InvokeVoidAsync("displayQr", "qrCodeImg", rawCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected string rawCode
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (_currItem != null)
|
||||||
|
{
|
||||||
|
answ = _currItem.OrderCode;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
@@ -145,17 +161,17 @@
|
|||||||
transpList = await DataService.TransportersGetAll();
|
transpList = await DataService.TransportersGetAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// Restituisce URL immagine QRCode
|
///// Restituisce URL immagine QRCode
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
///// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
protected string getImgUrl(object QrValue)
|
//protected string getImgUrl(object QrValue)
|
||||||
{
|
//{
|
||||||
string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
// string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
||||||
string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
// string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
||||||
string answ = $"{baseUrl}{payload}";
|
// string answ = $"{baseUrl}{payload}";
|
||||||
return answ;
|
// return answ;
|
||||||
}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,63 +4,31 @@
|
|||||||
@using Microsoft.AspNetCore.Components.Authorization
|
@using Microsoft.AspNetCore.Components.Authorization
|
||||||
@using GWMS.UI.Data
|
@using GWMS.UI.Data
|
||||||
@using Microsoft.Extensions.Configuration
|
@using Microsoft.Extensions.Configuration
|
||||||
|
@using Microsoft.JSInterop
|
||||||
|
|
||||||
@inject MessageService AppMService
|
@inject MessageService AppMService
|
||||||
@inject GWMSDataService DataService
|
@inject GWMSDataService DataService
|
||||||
@inject IConfiguration Configuration
|
@inject IConfiguration Configuration
|
||||||
|
@inject IJSRuntime JSRuntime
|
||||||
|
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@*<div class="card-header bg-info text-light">
|
|
||||||
<b>Modifica</b>
|
|
||||||
</div>*@
|
|
||||||
<div class="card-body small p-1">
|
<div class="card-body small p-1">
|
||||||
<EditForm Model="@_currItem">
|
@if (_currItem != null)
|
||||||
<DataAnnotationsValidator />
|
{
|
||||||
<div class="row">
|
<EditForm Model="@_currItem">
|
||||||
<div class="col-12 col-lg-2">
|
<DataAnnotationsValidator />
|
||||||
<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" />
|
<div class="d-flex flex-column text-center">
|
||||||
</div>
|
<div class="p-1 flex-grow-1">
|
||||||
<div class="col-12 col-lg-8 align-items-center">
|
<div id="qrCodeImg"></div>
|
||||||
<div class="row small">
|
@_currItem.OrderCode
|
||||||
<div class="col-12">
|
@*<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" />*@
|
||||||
<div class="input-group input-group-sm">
|
</div>
|
||||||
<div class="input-group-prepend">
|
<div class="p-1 flex-grow-1">
|
||||||
<span class="input-group-text" style="width: 3em;">
|
<button type="button" class="btn btn-sm btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
|
||||||
<span class="fas fa-truck" aria-hidden="true"></span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<DateEdit @bind-Date="_currItem.DtETA" InputMode="DateInputMode.DateTime" class="form-control" title="ETA (previsione consegna)" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="input-group input-group-sm">
|
|
||||||
<div class="input-group-prepend">
|
|
||||||
<span class="input-group-text" style="width: 3em;">
|
|
||||||
<span class="fas fa-comment-alt" aria-hidden="true"></span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<InputText id="OrderDesc" @bind-Value="_currItem.OrderDesc" class="form-control" title="Note Ordine (opzionali)" />
|
|
||||||
<div class="input-group-append">
|
|
||||||
<span class="input-group-text">
|
|
||||||
Note
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-2">
|
</EditForm>
|
||||||
<div class="row">
|
}
|
||||||
<div class="col-6">
|
|
||||||
<button type="button" class="btn btn-sm btn-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<button type="button" class="btn btn-sm btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</EditForm>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -76,7 +44,7 @@
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return _currItem = null;
|
return _currItem;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
@@ -84,6 +52,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async void refreshQr()
|
||||||
|
{
|
||||||
|
await JSRuntime.InvokeVoidAsync("refreshQr", rawCode);
|
||||||
|
}
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback<int> DataReset { get; set; }
|
public EventCallback<int> DataReset { get; set; }
|
||||||
[Parameter]
|
[Parameter]
|
||||||
@@ -122,9 +95,23 @@
|
|||||||
await DataReset.InvokeAsync(0);
|
await DataReset.InvokeAsync(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected string rawCode
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "";
|
||||||
|
if (_currItem != null)
|
||||||
|
{
|
||||||
|
answ = _currItem.OrderCode;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
|
await JSRuntime.InvokeVoidAsync("displayQr", "qrCodeImg", rawCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
@@ -132,17 +119,17 @@
|
|||||||
transpList = await DataService.TransportersGetAll();
|
transpList = await DataService.TransportersGetAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
///// <summary>
|
||||||
/// Restituisce URL immagine QRCode
|
///// Restituisce URL immagine QRCode
|
||||||
/// </summary>
|
///// </summary>
|
||||||
/// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
///// <param name="QrValue">Parametro da renderizzare con QRCode</param>
|
||||||
/// <returns></returns>
|
///// <returns></returns>
|
||||||
protected string getImgUrl(object QrValue)
|
//protected string getImgUrl(object QrValue)
|
||||||
{
|
//{
|
||||||
string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
// string baseUrl = $"{Configuration["ZCodeUrl"]}/HOME/QR_site/JSON?val=";
|
||||||
string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
// string payload = "{'baseUrl':'{0}','parameters':['" + $"{QrValue}" + "']}";
|
||||||
string answ = $"{baseUrl}{payload}";
|
// string answ = $"{baseUrl}{payload}";
|
||||||
return answ;
|
// return answ;
|
||||||
}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<div class="col-5 pr-0 font-weight-bold">
|
<div class="col-5 pr-0 font-weight-bold">
|
||||||
<h2>@currItem.PlantCode</h2>
|
<h2>@currItem.PlantCode</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-7 text-right">
|
<div class="col-7 text-right align-bottom">
|
||||||
<h4>@currItem.PlantDesc</h4>
|
<h4>@currItem.PlantDesc</h4>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -46,28 +46,26 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
<li class="list-group-item active d-flex justify-content-between align-items-center">SERBATOIO Principale</li>
|
<li class="list-group-item @headerStatus d-flex justify-content-between align-items-center px-0 py-1 small">
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
<div class="px-1" title="@checkRTime">
|
||||||
<div class="row">
|
SERBATOIO Principale <i class="fas fa-play @playStatus"></i>
|
||||||
<div class="col-12 px-0">
|
</div>
|
||||||
<LineChart @ref="LevelVal" TItem="double" OptionsObject="lineChartOptions" />
|
<div class="px-1 text-right">
|
||||||
</div>
|
<span><i class="fas fa-database"></i> Livello:</span><span>@currItem.LevelAct.ToString("N0")/@currItem.LevelMax.ToString("N0")</span> | <span style="font-size:1.2em;"><b>@currItem.LevelRatio</b> <sub>%</sub></span>
|
||||||
<div class="col-6 small">
|
</div>
|
||||||
@currItem.LevelAct.ToString("N0")
|
</li>
|
||||||
</div>
|
<li class="list-group-item align-items-center px-1 py-2">
|
||||||
<div class="col-6 text-right small">
|
<div class="d-flex flex-column">
|
||||||
@currItem.LevelMax.ToString("N0")
|
<div class="p-1 flex-grow-1">
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<Progress>
|
<Progress>
|
||||||
<ProgressBar Value="@currItem.LevelRatio" Striped="false" Animated="false" />
|
<ProgressBar Value="@currItem.LevelRatio" Striped="false" Animated="false" />
|
||||||
</Progress>
|
</Progress>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="px-1 py-2">
|
||||||
|
<LineChart @ref="LevelVal" TItem="double" OptionsObject="lineChartOptions" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
|
||||||
<span><i class="fas fa-database"></i> Livello</span> <span style="font-size:1.2em;"><b>@currItem.LevelRatio</b> <sub>%</sub></span>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||||||
<span><i class="fas fa-compress-arrows-alt"></i> Pressione</span> <span style="font-size:1.2em;"><b>@currItem.PressAct["Main"].ToString("N1")</b> <span class="small"> <sub>bar</sub></span></span>
|
<span><i class="fas fa-compress-arrows-alt"></i> Pressione</span> <span style="font-size:1.2em;"><b>@currItem.PressAct["Main"].ToString("N1")</b> <span class="small"> <sub>bar</sub></span></span>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using GWMS.Data.DTO;
|
|||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Blazorise.Charts;
|
using Blazorise.Charts;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace GWMS.UI.Components
|
namespace GWMS.UI.Components
|
||||||
{
|
{
|
||||||
@@ -24,23 +25,25 @@ namespace GWMS.UI.Components
|
|||||||
{
|
{
|
||||||
XAxes = new object[]
|
XAxes = new object[]
|
||||||
{
|
{
|
||||||
new {
|
new {
|
||||||
Display = true,
|
display = true,
|
||||||
//type = "timeseries",
|
//type = "timeseries",
|
||||||
//type = "time",
|
//type = "time",
|
||||||
//Time = new {
|
//Time = new {
|
||||||
// unit="day"
|
// unit="day"
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
YAxes = new object[]
|
YAxes = new object[]
|
||||||
{
|
{
|
||||||
new {
|
new {
|
||||||
Display = true,
|
display = true,
|
||||||
ticks= new {
|
position = "right",
|
||||||
suggestedMin = 0,
|
//text = "Kg",
|
||||||
suggestedMax = 10000
|
ticks = new {
|
||||||
}
|
suggestedMin = 0,
|
||||||
|
suggestedMax = 10000
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -55,7 +58,13 @@ namespace GWMS.UI.Components
|
|||||||
Intersect = false
|
Intersect = false
|
||||||
},
|
},
|
||||||
Animation = false,
|
Animation = false,
|
||||||
AspectRatio = 2
|
Responsive = true,
|
||||||
|
AspectRatio = 2,
|
||||||
|
type = "line",
|
||||||
|
Legend = new
|
||||||
|
{
|
||||||
|
display = false
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -67,6 +76,9 @@ namespace GWMS.UI.Components
|
|||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private IConfiguration Configuration { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private NavigationManager NavManager { get; set; }
|
private NavigationManager NavManager { get; set; }
|
||||||
|
|
||||||
@@ -104,6 +116,11 @@ namespace GWMS.UI.Components
|
|||||||
|
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
|
public string checkRTime
|
||||||
|
{
|
||||||
|
get => DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > 2 ? $"Mancata ricezione: ultimo aggiornamento {_currItem.LastUpdate}" : $"Dati Realtime aggiornati al {_currItem.LastUpdate}";
|
||||||
|
}
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public PlantDTO currItem
|
public PlantDTO currItem
|
||||||
{
|
{
|
||||||
@@ -119,13 +136,25 @@ namespace GWMS.UI.Components
|
|||||||
var dataReload = Task.Run(async () =>
|
var dataReload = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
// aggiunta delay o non riesce a disegnare
|
// aggiunta delay o non riesce a disegnare
|
||||||
Thread.Sleep(50);
|
int ChartWaitDelay = 150;
|
||||||
|
int.TryParse(Configuration["ChartWaitDelay"], out ChartWaitDelay);
|
||||||
|
Thread.Sleep(ChartWaitDelay);
|
||||||
await HandleRedraw();
|
await HandleRedraw();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string headerStatus
|
||||||
|
{
|
||||||
|
get => DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > 2 ? "text-secondary" : "active";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string playStatus
|
||||||
|
{
|
||||||
|
get => DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > 2 ? "text-danger" : "text-success";
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
@@ -134,12 +163,15 @@ namespace GWMS.UI.Components
|
|||||||
{
|
{
|
||||||
int answ = 1;
|
int answ = 1;
|
||||||
int numCount = _currItem.LevelTS.Count;
|
int numCount = _currItem.LevelTS.Count;
|
||||||
// passo a 2h se > 5 gg
|
// passo a 2h se > 3 gg
|
||||||
if (numCount > 120)
|
if (numCount > 72)
|
||||||
answ = 2;
|
|
||||||
// passo a 3h se > 10 gg
|
|
||||||
else if (numCount > 240)
|
|
||||||
answ = 3;
|
answ = 3;
|
||||||
|
// passo a 3h se > 5 gg
|
||||||
|
else if (numCount > 120)
|
||||||
|
answ = 4;
|
||||||
|
// passo a 4h se > 10 gg
|
||||||
|
else if (numCount > 240)
|
||||||
|
answ = 5;
|
||||||
redFact = answ;
|
redFact = answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
reportProcess();
|
reportProcess();
|
||||||
await DataService.RegenDB(numDays, stepMin, maxHourRate);
|
//await DataService.RegenDB(numDays, stepMin, maxHourRate);
|
||||||
reportChange();
|
reportChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using GWMS.UI.Data;
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Converters;
|
using Newtonsoft.Json.Converters;
|
||||||
|
using NLog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@@ -27,11 +28,21 @@ namespace GWMS.UI.Controllers
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
public class IOBController : ControllerBase
|
public class IOBController : ControllerBase
|
||||||
{
|
{
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe per logging
|
||||||
|
/// </summary>
|
||||||
|
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
#region Public Constructors
|
#region Public Constructors
|
||||||
|
|
||||||
public IOBController(GWMSDataService DataService)
|
public IOBController(GWMSDataService DataService)
|
||||||
{
|
{
|
||||||
_DataService = DataService;
|
_DataService = DataService;
|
||||||
|
//Log.Debug("Avviata classe IOBController");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
@@ -56,6 +67,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("addOptPar/{id}")]
|
[HttpGet("addOptPar/{id}")]
|
||||||
public string addOptPar(string id, string pName, string pValue)
|
public string addOptPar(string id, string pName, string pValue)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata addOptPar | {id} | {pName} | {pValue}");
|
||||||
return $"N.A. | {id} | {pName} | {pValue}";
|
return $"N.A. | {id} | {pName} | {pValue}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,6 +87,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("addTask2Exe/{id}")]
|
[HttpGet("addTask2Exe/{id}")]
|
||||||
public string addTask2Exe(string id, string taskName, string taskVal)
|
public string addTask2Exe(string id, string taskName, string taskVal)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata addTask2Exe | {id} | {taskName} | {taskVal}");
|
||||||
return $"N.A. | {id} | {taskName} | {taskVal}";
|
return $"N.A. | {id} | {taskName} | {taskVal}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,6 +100,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("alive")]
|
[HttpGet("alive")]
|
||||||
public string alive()
|
public string alive()
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata alive");
|
||||||
return $"OK";
|
return $"OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +114,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("checkLevels/{id}")]
|
[HttpGet("checkLevels/{id}")]
|
||||||
public async Task<string> checkLevels(string id)
|
public async Task<string> checkLevels(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata checkLevels | {id}");
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
// ...verifica per ricalcolo ordini...
|
// ...verifica per ricalcolo ordini...
|
||||||
fatto = await _DataService.checkLevels();
|
fatto = await _DataService.checkLevels();
|
||||||
@@ -117,6 +132,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Delete | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -129,6 +145,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("enabled/{id}")]
|
[HttpGet("enabled/{id}")]
|
||||||
public async Task<string> enabled(string id)
|
public async Task<string> enabled(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata enabled | {id}");
|
||||||
string answ = "ND";
|
string answ = "ND";
|
||||||
// se id nullo --> KO!
|
// se id nullo --> KO!
|
||||||
if (id == null)
|
if (id == null)
|
||||||
@@ -152,6 +169,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("evListJson/{id}")]
|
[HttpPost("evListJson/{id}")]
|
||||||
public string evListJson(string id, [FromBody] evJsonPayload rawData)
|
public string evListJson(string id, [FromBody] evJsonPayload rawData)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata evListJson | {id}");
|
||||||
string answ = "KO";
|
string answ = "KO";
|
||||||
#if false
|
#if false
|
||||||
int insDone = 0;
|
int insDone = 0;
|
||||||
@@ -166,7 +184,7 @@ namespace GWMS.UI.Controllers
|
|||||||
{
|
{
|
||||||
if (memLayer.ML.CRI("_logLevel") > 6)
|
if (memLayer.ML.CRI("_logLevel") > 6)
|
||||||
{
|
{
|
||||||
logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {item.valore}", tipoLog.INFO);
|
logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {item.valore}", tipoLog.Debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
// formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000
|
// formato datetime come yyyyMMddHHmmssfff -->es: 20181223180600000
|
||||||
@@ -204,6 +222,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("flog/{id}")]
|
[HttpGet("flog/{id}")]
|
||||||
public async Task<string> flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt)
|
public async Task<string> flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata flog | {id} | {flux} | {valore} | {dtEve} | {dtCurr} | {cnt}");
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
||||||
if (cnt == null)
|
if (cnt == null)
|
||||||
@@ -300,6 +319,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("flogJson/{id}")]
|
[HttpPost("flogJson/{id}")]
|
||||||
public async Task<string> flogJson(string id, [FromBody] flogJsonPayload rawData)
|
public async Task<string> flogJson(string id, [FromBody] flogJsonPayload rawData)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata flogJson | {id}");
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
// verifico ci sia valore
|
// verifico ci sia valore
|
||||||
if (rawData != null && !string.IsNullOrEmpty(id))
|
if (rawData != null && !string.IsNullOrEmpty(id))
|
||||||
@@ -338,6 +358,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("forceSplitOdl/{id}")]
|
[HttpPost("forceSplitOdl/{id}")]
|
||||||
public string forceSplitOdl(string id)
|
public string forceSplitOdl(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata forceSplitOdl | {id}");
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -356,6 +377,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("forceSplitOdlFull/{id}")]
|
[HttpPost("forceSplitOdlFull/{id}")]
|
||||||
public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "")
|
public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "")
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata forceSplitOdlFull | {id}");
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,6 +390,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet]
|
[HttpGet]
|
||||||
public string Get()
|
public string Get()
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata Get");
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,6 +404,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public string Get(int id)
|
public string Get(int id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Get | {id}");
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -395,6 +419,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCounter/{id}")]
|
[HttpGet("getCounter/{id}")]
|
||||||
public string getCounter(string id)
|
public string getCounter(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCounter | {id}");
|
||||||
return "0";
|
return "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -409,6 +434,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCounterTCRec/{id}")]
|
[HttpGet("getCounterTCRec/{id}")]
|
||||||
public string getCounterTCRec(string id)
|
public string getCounterTCRec(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCounterTCRec | {id}");
|
||||||
return "0";
|
return "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,6 +449,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCurrData/{id}")]
|
[HttpGet("getCurrData/{id}")]
|
||||||
public string getCurrData(string id)
|
public string getCurrData(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCurrData | {id}");
|
||||||
return $"{id}";
|
return $"{id}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,6 +464,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCurrODL/{id}")]
|
[HttpGet("getCurrODL/{id}")]
|
||||||
public string getCurrODL(string id)
|
public string getCurrODL(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCurrODL | {id}");
|
||||||
return "1";
|
return "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,6 +477,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCurrOdlRow/{id}")]
|
[HttpGet("getCurrOdlRow/{id}")]
|
||||||
public string getCurrOdlRow(string id)
|
public string getCurrOdlRow(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCurrOdlRow | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -461,6 +490,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCurrOdlStart/{id}")]
|
[HttpGet("getCurrOdlStart/{id}")]
|
||||||
public string getCurrOdlStart(string id)
|
public string getCurrOdlStart(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCurrOdlStart | {id}");
|
||||||
return $"{DateTime.Now}";
|
return $"{DateTime.Now}";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -473,6 +503,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getCurrStatoRow/{id}")]
|
[HttpGet("getCurrStatoRow/{id}")]
|
||||||
public string getCurrStatoRow(string id)
|
public string getCurrStatoRow(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getCurrStatoRow | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,6 +516,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getFiles/{id}")]
|
[HttpGet("getFiles/{id}")]
|
||||||
public string getFiles(string id)
|
public string getFiles(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getFiles | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -497,6 +529,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getIdlePeriod/{id}")]
|
[HttpGet("getIdlePeriod/{id}")]
|
||||||
public int getIdlePeriod(string id)
|
public int getIdlePeriod(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getIdlePeriod | {id}");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,6 +541,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getIob2call/{id}")]
|
[HttpGet("getIob2call/{id}")]
|
||||||
public string getIob2call(string id)
|
public string getIob2call(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getIob2call | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,6 +553,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getM2IOB/{id}")]
|
[HttpGet("getM2IOB/{id}")]
|
||||||
public string getM2IOB(string id)
|
public string getM2IOB(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getM2IOB | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -531,6 +566,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getObjItems/{id}")]
|
[HttpGet("getObjItems/{id}")]
|
||||||
public string getObjItems(string id)
|
public string getObjItems(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getObjItems | {id}");
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -545,6 +581,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("getTask2Exe/{id}")]
|
[HttpGet("getTask2Exe/{id}")]
|
||||||
public string getTask2Exe(string id)
|
public string getTask2Exe(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata getTask2Exe | {id}");
|
||||||
string answ = "";
|
string answ = "";
|
||||||
#if false
|
#if false
|
||||||
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
|
||||||
@@ -576,6 +613,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("input/{id}")]
|
[HttpGet("input/{id}")]
|
||||||
public string input(string id, string valore, string dtEve, string dtCurr, string cnt)
|
public string input(string id, string valore, string dtEve, string dtCurr, string cnt)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata input | {id} | {valore} | {dtEve} | {dtCurr} | {cnt}");
|
||||||
string answ = "OK";
|
string answ = "OK";
|
||||||
#if false
|
#if false
|
||||||
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
|
||||||
@@ -587,7 +625,7 @@ namespace GWMS.UI.Controllers
|
|||||||
DateTime dataOraEvento = DateTime.Now;
|
DateTime dataOraEvento = DateTime.Now;
|
||||||
if (memLayer.ML.CRI("_logLevel") > 6)
|
if (memLayer.ML.CRI("_logLevel") > 6)
|
||||||
{
|
{
|
||||||
logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {valore}", tipoLog.INFO);
|
logger.lg.scriviLog($"Valori letti: idxMacchina: {id} | valore: {valore}", tipoLog.Debug);
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -607,12 +645,14 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void Post([FromBody] string value)
|
public void Post([FromBody] string value)
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata Post");
|
||||||
}
|
}
|
||||||
|
|
||||||
// PUT api/IOB/5
|
// PUT api/IOB/5
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
public void Put(int id, [FromBody] string value)
|
public void Put(int id, [FromBody] string value)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Put | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if false
|
#if false
|
||||||
@@ -692,7 +732,7 @@ namespace GWMS.UI.Controllers
|
|||||||
if (nCall >= nCall2Log)
|
if (nCall >= nCall2Log)
|
||||||
{
|
{
|
||||||
// loggo
|
// loggo
|
||||||
logger.lg.scriviLog(string.Format("IOB_INDEX: effettuate {0} call", nCall), tipoLog.INFO);
|
logger.lg.scriviLog(string.Format("IOB_INDEX: effettuate {0} call", nCall), tipoLog.Debug);
|
||||||
// resetto!
|
// resetto!
|
||||||
memLayer.ML.resetRCnt(DataLayer.mHash("COUNT:pCall:IOB_INDEX"));
|
memLayer.ML.resetRCnt(DataLayer.mHash("COUNT:pCall:IOB_INDEX"));
|
||||||
}
|
}
|
||||||
@@ -748,7 +788,7 @@ namespace GWMS.UI.Controllers
|
|||||||
DateTime dataOraEvento = DateTime.Now;
|
DateTime dataOraEvento = DateTime.Now;
|
||||||
if (memLayer.ML.CRI("_logLevel") > 6)
|
if (memLayer.ML.CRI("_logLevel") > 6)
|
||||||
{
|
{
|
||||||
logger.lg.scriviLog($"Valori Live:{Environment.NewLine}idxMacchina: {id}{Environment.NewLine}liveData: {liveData}", tipoLog.INFO);
|
logger.lg.scriviLog($"Valori Live:{Environment.NewLine}idxMacchina: {id}{Environment.NewLine}liveData: {liveData}", tipoLog.Debug);
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -897,7 +937,7 @@ namespace GWMS.UI.Controllers
|
|||||||
string answ = "";
|
string answ = "";
|
||||||
DateTime dataOraEvento = DateTime.Now;
|
DateTime dataOraEvento = DateTime.Now;
|
||||||
// salvo SEMPRE log x questo tipo di dati!
|
// salvo SEMPRE log x questo tipo di dati!
|
||||||
logger.lg.scriviLog($"Salvataggio incremento contapezzi:{Environment.NewLine}idxMacchina: {id}{Environment.NewLine}pezzi: {qty}", tipoLog.INFO);
|
logger.lg.scriviLog($"Salvataggio incremento contapezzi:{Environment.NewLine}idxMacchina: {id}{Environment.NewLine}pezzi: {qty}", tipoLog.Debug);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
DataLayer DataLayerObj = new DataLayer();
|
DataLayer DataLayerObj = new DataLayer();
|
||||||
@@ -940,7 +980,7 @@ namespace GWMS.UI.Controllers
|
|||||||
DateTime dataOraEvento = DateTime.Now;
|
DateTime dataOraEvento = DateTime.Now;
|
||||||
if (memLayer.ML.CRI("_logLevel") > 6)
|
if (memLayer.ML.CRI("_logLevel") > 6)
|
||||||
{
|
{
|
||||||
logger.lg.scriviLog($"Salvataggio counter | idxMacchina: {id}", tipoLog.INFO);
|
logger.lg.scriviLog($"Salvataggio counter | idxMacchina: {id}", tipoLog.Debug);
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1093,6 +1133,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("saveConf/{id}")]
|
[HttpPost("saveConf/{id}")]
|
||||||
public string saveConf(string id, [FromBody] System.Text.Json.JsonElement rawQuery)
|
public string saveConf(string id, [FromBody] System.Text.Json.JsonElement rawQuery)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata saveConf | {id}");
|
||||||
// problema deserializzaizone ENUM con classe nuova dotnet 5:
|
// problema deserializzaizone ENUM con classe nuova dotnet 5:
|
||||||
// https://github.com/graphql-dotnet/graphql-dotnet/issues/1439
|
// https://github.com/graphql-dotnet/graphql-dotnet/issues/1439
|
||||||
|
|
||||||
@@ -1131,6 +1172,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("sendReboot")]
|
[HttpGet("sendReboot")]
|
||||||
public string sendReboot(string idxMacchina, string mac)
|
public string sendReboot(string idxMacchina, string mac)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata sendReboot | {idxMacchina} | {mac}");
|
||||||
string answ = "";
|
string answ = "";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -1158,6 +1200,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("setObjItems/{id}")]
|
[HttpPost("setObjItems/{id}")]
|
||||||
public string setObjItems(string id, [FromBody] List<objItem> currParams)
|
public string setObjItems(string id, [FromBody] List<objItem> currParams)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata setObjItems | {id}");
|
||||||
string answ = "";
|
string answ = "";
|
||||||
if (string.IsNullOrWhiteSpace(id))
|
if (string.IsNullOrWhiteSpace(id))
|
||||||
{
|
{
|
||||||
@@ -1187,6 +1230,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost("uploadFile/{id}")]
|
[HttpPost("uploadFile/{id}")]
|
||||||
public string uploadFile(string id)
|
public string uploadFile(string id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata uploadFile | {id}");
|
||||||
string answ = "";
|
string answ = "";
|
||||||
#if false
|
#if false
|
||||||
// questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo...
|
// questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo...
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using NLog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -15,11 +16,21 @@ namespace GWMS.UI.Controllers
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
public class PlantDataController : ControllerBase
|
public class PlantDataController : ControllerBase
|
||||||
{
|
{
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe per logging
|
||||||
|
/// </summary>
|
||||||
|
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
#region Public Constructors
|
#region Public Constructors
|
||||||
|
|
||||||
public PlantDataController(GWMSDataService DataService)
|
public PlantDataController(GWMSDataService DataService)
|
||||||
{
|
{
|
||||||
_DataService = DataService;
|
_DataService = DataService;
|
||||||
|
Log.Info("Avviata classe PlantDataController");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
@@ -36,12 +47,14 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Delete | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET: api/PlantData
|
// GET: api/PlantData
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<PlantDTO>> Get()
|
public async Task<List<PlantDTO>> Get()
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata Get");
|
||||||
// serializzo i dati di PlantDTO dell'impianto richiesto
|
// serializzo i dati di PlantDTO dell'impianto richiesto
|
||||||
List<PlantDTO> ListRecords = await _DataService.PlantsGetAll();
|
List<PlantDTO> ListRecords = await _DataService.PlantsGetAll();
|
||||||
return ListRecords;
|
return ListRecords;
|
||||||
@@ -51,6 +64,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<PlantDTO> Get(int id)
|
public async Task<PlantDTO> Get(int id)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Get | {id}");
|
||||||
// serializzo i dati di PlantDTO dell'impianto richiesto
|
// serializzo i dati di PlantDTO dell'impianto richiesto
|
||||||
var ListRecords = await _DataService.PlantsGetAll();
|
var ListRecords = await _DataService.PlantsGetAll();
|
||||||
//seleziono plant...
|
//seleziono plant...
|
||||||
@@ -62,12 +76,14 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void Post([FromBody] string value)
|
public void Post([FromBody] string value)
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata Post");
|
||||||
}
|
}
|
||||||
|
|
||||||
// PUT api/PlantData/5
|
// PUT api/PlantData/5
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
public void Put(int id, [FromBody] string value)
|
public void Put(int id, [FromBody] string value)
|
||||||
{
|
{
|
||||||
|
//Log.Debug($"Chiamata Put | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using NLog;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -15,11 +16,21 @@ namespace GWMS.UI.Controllers
|
|||||||
[ApiController]
|
[ApiController]
|
||||||
public class PlantLogController : ControllerBase
|
public class PlantLogController : ControllerBase
|
||||||
{
|
{
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe per logging
|
||||||
|
/// </summary>
|
||||||
|
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
#region Public Constructors
|
#region Public Constructors
|
||||||
|
|
||||||
public PlantLogController(GWMSDataService DataService)
|
public PlantLogController(GWMSDataService DataService)
|
||||||
{
|
{
|
||||||
_DataService = DataService;
|
_DataService = DataService;
|
||||||
|
Log.Debug("Avviata classe PlantDataController");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
@@ -36,12 +47,14 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpDelete("{id}")]
|
[HttpDelete("{id}")]
|
||||||
public void Delete(int id)
|
public void Delete(int id)
|
||||||
{
|
{
|
||||||
|
Log.Debug($"Chiamata Delete | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET: api/PlantLog
|
// GET: api/PlantLog
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<List<PlantLogModel>> Get()
|
public async Task<List<PlantLogModel>> Get()
|
||||||
{
|
{
|
||||||
|
//Log.Debug("Chiamata Get");
|
||||||
// arrotondo ai 5 minuti
|
// arrotondo ai 5 minuti
|
||||||
DateTime adesso = DateTime.Now;
|
DateTime adesso = DateTime.Now;
|
||||||
int dayHour = adesso.Hour;
|
int dayHour = adesso.Hour;
|
||||||
@@ -57,6 +70,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<List<PlantLogModel>> Get(int id)
|
public async Task<List<PlantLogModel>> Get(int id)
|
||||||
{
|
{
|
||||||
|
Log.Debug($"Chiamata Get | {id}");
|
||||||
// arrotondo ai 5 minuti
|
// arrotondo ai 5 minuti
|
||||||
DateTime adesso = DateTime.Now;
|
DateTime adesso = DateTime.Now;
|
||||||
int dayHour = adesso.Hour;
|
int dayHour = adesso.Hour;
|
||||||
@@ -72,6 +86,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<ActionResult> Post([FromBody] List<PlantLogModel> newItems)
|
public async Task<ActionResult> Post([FromBody] List<PlantLogModel> newItems)
|
||||||
{
|
{
|
||||||
|
Log.Debug("Chiamata Post");
|
||||||
bool fatto = false;
|
bool fatto = false;
|
||||||
// verifico ci sia valore
|
// verifico ci sia valore
|
||||||
if (newItems != null)
|
if (newItems != null)
|
||||||
@@ -92,6 +107,7 @@ namespace GWMS.UI.Controllers
|
|||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
public void Put(int id, [FromBody] string value)
|
public void Put(int id, [FromBody] string value)
|
||||||
{
|
{
|
||||||
|
Log.Debug($"Chiamata Put | {id}");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ using System.Globalization;
|
|||||||
|
|
||||||
namespace GWMS.UI.Data
|
namespace GWMS.UI.Data
|
||||||
{
|
{
|
||||||
public class GWMSDataService
|
public class GWMSDataService : IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|
||||||
@@ -73,9 +73,9 @@ namespace GWMS.UI.Data
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
dbController = new GWMS.Data.Controllers.GWMSController(configuration);
|
dbController = new GWMS.Data.Controllers.GWMSController(configuration);
|
||||||
StringBuilder sb = new StringBuilder();
|
//StringBuilder sb = new StringBuilder();
|
||||||
sb.AppendLine($"DbController OK");
|
//sb.AppendLine($"DbController OK");
|
||||||
_logger.LogInformation(sb.ToString());
|
//_logger.LogInformation(sb.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,6 +97,7 @@ namespace GWMS.UI.Data
|
|||||||
/// <param name="newItems"></param>
|
/// <param name="newItems"></param>
|
||||||
private async Task updateCurrDTO(List<PlantLogModel> newItems)
|
private async Task updateCurrDTO(List<PlantLogModel> newItems)
|
||||||
{
|
{
|
||||||
|
DateTime adesso = DateTime.Now;
|
||||||
List<PlantDTO> dbResult = new List<PlantDTO>();
|
List<PlantDTO> dbResult = new List<PlantDTO>();
|
||||||
int PlantId = newItems.FirstOrDefault().PlantId;
|
int PlantId = newItems.FirstOrDefault().PlantId;
|
||||||
string cacheKey = "DATA:PLANTS:ListDTO";
|
string cacheKey = "DATA:PLANTS:ListDTO";
|
||||||
@@ -121,6 +122,7 @@ namespace GWMS.UI.Data
|
|||||||
if (lastLev != null)
|
if (lastLev != null)
|
||||||
{
|
{
|
||||||
currDto.LevelAct = lastLev.ValNumber;
|
currDto.LevelAct = lastLev.ValNumber;
|
||||||
|
currDto.LastUpdate = adesso;
|
||||||
}
|
}
|
||||||
|
|
||||||
// verifico SE c'è MainPress
|
// verifico SE c'è MainPress
|
||||||
@@ -394,6 +396,12 @@ namespace GWMS.UI.Data
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
// Clear database controller
|
||||||
|
dbController.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> HasPlantLog()
|
public async Task<bool> HasPlantLog()
|
||||||
{
|
{
|
||||||
return await Task.FromResult(dbController.HasPlantLog());
|
return await Task.FromResult(dbController.HasPlantLog());
|
||||||
@@ -662,11 +670,6 @@ namespace GWMS.UI.Data
|
|||||||
{ }
|
{ }
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> RegenDB(int numDays, int stepMin = 30, int maxHourRate = 800)
|
|
||||||
{
|
|
||||||
return await Task.FromResult(dbController.RegenDB(1, numDays, stepMin, maxHourRate));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ResetController()
|
public void ResetController()
|
||||||
{
|
{
|
||||||
dbController.ResetController();
|
dbController.ResetController();
|
||||||
|
|||||||
+29
-16
@@ -2,13 +2,26 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net5.0</TargetFramework>
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
<Version>1.0.2108.2516</Version>
|
<Version>1.0.2109.0211</Version>
|
||||||
<UserSecretsId>95c9f021-52d1-4390-a670-5810b7b777b0</UserSecretsId>
|
<UserSecretsId>95c9f021-52d1-4390-a670-5810b7b777b0</UserSecretsId>
|
||||||
|
<EnableNETAnalyzers>true</EnableNETAnalyzers>
|
||||||
|
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
|
||||||
|
<ServerGarbageCollection>true</ServerGarbageCollection>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="QuartzHostedService.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="bundleconfig.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS02.pubxml" />
|
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS02.pubxml" />
|
||||||
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IISProfile.pubxml" />
|
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IISProfile.pubxml" />
|
||||||
|
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IISProfileLinux.pubxml" />
|
||||||
|
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IISProfileWin.pubxml" />
|
||||||
<_WebToolingArtifacts Remove="Properties\PublishProfiles\W2019-IIS-DEV.pubxml" />
|
<_WebToolingArtifacts Remove="Properties\PublishProfiles\W2019-IIS-DEV.pubxml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
@@ -25,31 +38,31 @@
|
|||||||
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="5.0.1" />
|
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="5.0.1" />
|
||||||
<PackageReference Include="AspNetCore.HealthChecks.Uris" Version="5.0.1" />
|
<PackageReference Include="AspNetCore.HealthChecks.Uris" Version="5.0.1" />
|
||||||
<PackageReference Include="BlazorBarcodeScanner.ZXing.JS" Version="0.2.4" />
|
<PackageReference Include="BlazorBarcodeScanner.ZXing.JS" Version="0.2.4" />
|
||||||
<PackageReference Include="Blazorise" Version="0.9.3.7" />
|
<PackageReference Include="Blazorise" Version="0.9.4.3" />
|
||||||
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.3.7" />
|
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.4.3" />
|
||||||
<PackageReference Include="Blazorise.Charts" Version="0.9.3.7" />
|
<PackageReference Include="Blazorise.Charts" Version="0.9.4.3" />
|
||||||
<PackageReference Include="Blazorise.Components" Version="0.9.3.7" />
|
<PackageReference Include="Blazorise.Components" Version="0.9.4.3" />
|
||||||
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.3.7" />
|
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.4.3" />
|
||||||
<PackageReference Include="ElmahCore" Version="2.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.9" />
|
||||||
<PackageReference Include="ElmahCore.Common" Version="2.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.9" />
|
||||||
<PackageReference Include="ElmahCore.Sql" Version="2.0.6" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.9" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.7" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.9">
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.7" />
|
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.7" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.7">
|
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" />
|
||||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
|
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" ExcludeAssets="All" />
|
||||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.12.0" />
|
<PackageReference Include="NLog.Web.AspNetCore" Version="4.13.0" />
|
||||||
<PackageReference Include="Quartz" Version="3.3.2" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Services\" />
|
<Folder Include="Services\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="bundleconfig.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Update="Pages\Transporters - Copy - Copy.razor.cs">
|
<Compile Update="Pages\Transporters - Copy - Copy.razor.cs">
|
||||||
<DependentUpon>Transporters - Copy.razor.cs</DependentUpon>
|
<DependentUpon>Transporters - Copy.razor.cs</DependentUpon>
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
using BlazorBarcodeScanner.ZXing.JS;
|
using BlazorBarcodeScanner.ZXing.JS;
|
||||||
using GWMS.Data.DatabaseModels;
|
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -11,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, User")]
|
||||||
public partial class GasStation : ComponentBase, IDisposable
|
public partial class GasStation : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
@@ -19,8 +21,19 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore PlantId filtrato da claim
|
||||||
|
/// </summary>
|
||||||
|
protected int ClaimPlantId = -1;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
private int SelPlantId
|
private int SelPlantId
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -47,6 +60,9 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected string _plantCode { get; set; } = "";
|
protected string _plantCode { get; set; } = "";
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected GWMSDataService DataService { get; set; }
|
protected GWMSDataService DataService { get; set; }
|
||||||
|
|
||||||
@@ -97,12 +113,59 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero Claims dell'utente...
|
||||||
|
///
|
||||||
|
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task GetClaimsData()
|
||||||
|
{
|
||||||
|
// recupero auth
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
// se autenticato --> controllo i claims
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
// cerco il claim PlantId...
|
||||||
|
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
|
||||||
|
int.TryParse(plantClaim, out ClaimPlantId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClaimPlantId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void LocalReceivedBarcodeText(BarcodeReceivedEventArgs args)
|
private void LocalReceivedBarcodeText(BarcodeReceivedEventArgs args)
|
||||||
{
|
{
|
||||||
// rimando a pagina con codice ordine....
|
// rimando a pagina con codice ordine....
|
||||||
NavManager.NavigateTo($"GasStation/{args.BarcodeText}");
|
NavManager.NavigateTo($"GasStation/{args.BarcodeText}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task ReloadAllData()
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
PlantsList = null;
|
||||||
|
await GetClaimsData();
|
||||||
|
// se ho un plantId valido --> altrimenti non abilitato
|
||||||
|
if (ClaimPlantId == 0)
|
||||||
|
{
|
||||||
|
PlantsList = await DataService.PlantsGetAll();
|
||||||
|
}
|
||||||
|
else if (ClaimPlantId > 0)
|
||||||
|
{
|
||||||
|
var rawData = await DataService.PlantsGetAll();
|
||||||
|
PlantsList = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
|
||||||
|
SelPlantId = ClaimPlantId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlantsList = new List<PlantDTO>();
|
||||||
|
}
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Methods
|
#endregion Private Methods
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
@@ -112,7 +175,7 @@ namespace GWMS.UI.Pages
|
|||||||
MessageService.ShowSearch = false;
|
MessageService.ShowSearch = false;
|
||||||
MessageService.PageName = "Stazione";
|
MessageService.PageName = "Stazione";
|
||||||
MessageService.PageIcon = "fas fa-gas-pump pr-2";
|
MessageService.PageIcon = "fas fa-gas-pump pr-2";
|
||||||
PlantsList = await DataService.PlantsGetAll();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ResetData()
|
protected void ResetData()
|
||||||
|
|||||||
@@ -132,7 +132,20 @@
|
|||||||
@foreach (var record in ListRecords)
|
@foreach (var record in ListRecords)
|
||||||
{
|
{
|
||||||
<tr class="@checkSelect(@record.OrderId)">
|
<tr class="@checkSelect(@record.OrderId)">
|
||||||
<td class="text-nowrap"><button class="btn btn-sm btn-info" @onclick="() => Edit(record)"><span class="oi oi-pencil"></span></button></td>
|
<td class="text-nowrap">
|
||||||
|
@if (currRecord == null)
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-info" @onclick="() => Edit(record)">
|
||||||
|
<span class="oi oi-pencil"></span>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-secondary disabled">
|
||||||
|
<i class="oi oi-pencil"></i>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div>@record.Plant.PlantCode</div>
|
<div>@record.Plant.PlantCode</div>
|
||||||
<div class="small">@record.Plant.PlantDesc</div>
|
<div class="small">@record.Plant.PlantDesc</div>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
using GWMS.Data.DatabaseModels;
|
using GWMS.Data.DatabaseModels;
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -10,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, User")]
|
||||||
public partial class Orders : ComponentBase, IDisposable
|
public partial class Orders : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
@@ -23,6 +26,15 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore PlantId filtrato da claim
|
||||||
|
/// </summary>
|
||||||
|
protected int ClaimPlantId = -1;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private int _currPage { get; set; } = 1;
|
private int _currPage { get; set; } = 1;
|
||||||
@@ -103,8 +115,6 @@ namespace GWMS.UI.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ShowCharts { get; set; } = false;
|
|
||||||
|
|
||||||
private bool ShowClosed
|
private bool ShowClosed
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -134,6 +144,9 @@ namespace GWMS.UI.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected MessageService AppMService { get; set; }
|
protected MessageService AppMService { get; set; }
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected GWMSDataService DataService { get; set; }
|
protected GWMSDataService DataService { get; set; }
|
||||||
|
|
||||||
@@ -218,6 +231,30 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero Claims dell'utente...
|
||||||
|
///
|
||||||
|
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task GetClaimsData()
|
||||||
|
{
|
||||||
|
// recupero auth
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
// se autenticato --> controllo i claims
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
// cerco il claim PlantId...
|
||||||
|
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
|
||||||
|
int.TryParse(plantClaim, out ClaimPlantId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClaimPlantId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDateEndChanged(DateTime? date)
|
private void OnDateEndChanged(DateTime? date)
|
||||||
{
|
{
|
||||||
DateEnd = (DateTime)date;
|
DateEnd = (DateTime)date;
|
||||||
@@ -269,9 +306,6 @@ namespace GWMS.UI.Pages
|
|||||||
protected void Edit(OrderModel selRecord)
|
protected void Edit(OrderModel selRecord)
|
||||||
{
|
{
|
||||||
// rileggo dal DB il record corrente...
|
// rileggo dal DB il record corrente...
|
||||||
#if false
|
|
||||||
currRecord = selRecord;
|
|
||||||
#endif
|
|
||||||
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
|
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -298,8 +332,27 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
{
|
{
|
||||||
PlantsList = await DataService.PlantsGetAll();
|
isLoading = true;
|
||||||
SuppliersList = await DataService.SuppliersGetAll();
|
SuppliersList = await DataService.SuppliersGetAll();
|
||||||
|
SelPlantId = 0;
|
||||||
|
PlantsList = null;
|
||||||
|
await GetClaimsData();
|
||||||
|
// se ho un plantId valido --> altrimenti non abilitato
|
||||||
|
if (ClaimPlantId == 0)
|
||||||
|
{
|
||||||
|
PlantsList = await DataService.PlantsGetAll();
|
||||||
|
}
|
||||||
|
else if (ClaimPlantId > 0)
|
||||||
|
{
|
||||||
|
var rawData = await DataService.PlantsGetAll();
|
||||||
|
PlantsList = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
|
||||||
|
SelPlantId = ClaimPlantId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlantsList = new List<PlantDTO>();
|
||||||
|
}
|
||||||
|
isLoading = false;
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
processRunning = true;
|
processRunning = true;
|
||||||
DataService.RegenDB(numDays, stepMin, maxHourRate);
|
//DataService.RegenDB(numDays, stepMin, maxHourRate);
|
||||||
processRunning = false;
|
processRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
@using GWMS.UI.Components
|
@using GWMS.UI.Components
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
@if (ListRecords == null)
|
@if (ListRecords == null)
|
||||||
{
|
{
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
using Microsoft.AspNetCore.Components;
|
using GWMS.Data.DTO;
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Security.Claims;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using GWMS.Data.DTO;
|
|
||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, User")]
|
||||||
public partial class PlantStatus : ComponentBase, IDisposable
|
public partial class PlantStatus : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
@@ -19,6 +24,15 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore PlantId filtrato da claim
|
||||||
|
/// </summary>
|
||||||
|
protected int ClaimPlantId = -1;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
private bool isLoading { get; set; } = false;
|
||||||
@@ -29,6 +43,9 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected GWMSDataService DataService { get; set; }
|
protected GWMSDataService DataService { get; set; }
|
||||||
|
|
||||||
@@ -58,10 +75,49 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
private async Task reloadData()
|
/// <summary>
|
||||||
|
/// Recupero Claims dell'utente...
|
||||||
|
///
|
||||||
|
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task GetClaimsData()
|
||||||
|
{
|
||||||
|
// recupero auth
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
// se autenticato --> controllo i claims
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
// cerco il claim PlantId...
|
||||||
|
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
|
||||||
|
int.TryParse(plantClaim, out ClaimPlantId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClaimPlantId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ReloadAllData()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
ListRecords = await DataService.PlantsGetAll();
|
ListRecords = null;
|
||||||
|
await GetClaimsData();
|
||||||
|
// se ho un plantId valido --> altrimenti non abilitato
|
||||||
|
if (ClaimPlantId == 0)
|
||||||
|
{
|
||||||
|
ListRecords = await DataService.PlantsGetAll();
|
||||||
|
}
|
||||||
|
else if (ClaimPlantId > 0)
|
||||||
|
{
|
||||||
|
var rawData = await DataService.PlantsGetAll();
|
||||||
|
ListRecords = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ListRecords = new List<PlantDTO>();
|
||||||
|
}
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +131,7 @@ namespace GWMS.UI.Pages
|
|||||||
MessageService.PageName = "Impianti";
|
MessageService.PageName = "Impianti";
|
||||||
MessageService.PageIcon = "fas fa-gas-pump pr-2";
|
MessageService.PageIcon = "fas fa-gas-pump pr-2";
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
||||||
await reloadData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void Select(PlantDTO selRecord)
|
protected void Select(PlantDTO selRecord)
|
||||||
@@ -87,7 +143,7 @@ namespace GWMS.UI.Pages
|
|||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
await reloadData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|||||||
@@ -12,13 +12,19 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
@*<meta name="viewport" content="width=device-width, initial-scale=1.0" />*@
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<title>GWMS User Management</title>
|
<title>GWMS.UI User Management</title>
|
||||||
<base href="~/" />
|
<base href="~/" />
|
||||||
<link rel="stylesheet" href="~/Identity/lib/bootstrap/dist/css/bootstrap.min.css" />
|
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
|
||||||
|
<link rel="stylesheet" href="font-awesome/css/fontawesome.min.css" />
|
||||||
|
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
|
||||||
|
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
|
||||||
|
<link href="css/site.css" rel="stylesheet" />
|
||||||
|
<link href="GWMS.UI.styles.css" rel="stylesheet" />
|
||||||
<link rel="stylesheet" href="~/Identity/css/site.css" />
|
<link rel="stylesheet" href="~/Identity/css/site.css" />
|
||||||
<link rel="stylesheet" href="~/css/site.css" />
|
|
||||||
|
@*<link rel="stylesheet" href="~/Identity/lib/bootstrap/dist/css/bootstrap.min.css" />
|
||||||
|
<link rel="stylesheet" href="~/css/site.css" />*@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
@@ -55,13 +61,14 @@
|
|||||||
</div>
|
</div>
|
||||||
<footer class="footer border-top text-muted fixed-bottom bottom-row bg-dark py-0 my-0">
|
<footer class="footer border-top text-muted fixed-bottom bottom-row bg-dark py-0 my-0">
|
||||||
<div class="container py-1">
|
<div class="container py-1">
|
||||||
© 2021 - GWMS User Management- <a asp-area="" asp-page="Privacy">Privacy</a>
|
© 2021+ | GWMS.UI User Management
|
||||||
</div>
|
</div>
|
||||||
<CmpFooter></CmpFooter>
|
<CmpFooter></CmpFooter>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="~/Identity/lib/jquery/dist/jquery.min.js"></script>
|
<script src="~/Identity/lib/jquery/dist/jquery.min.js"></script>
|
||||||
<script src="~/Identity/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="~/Identity/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
<script src="~/Identity/js/site.js" asp-append-version="true"></script>
|
<script src="~/Identity/js/site.js" asp-append-version="true"></script>
|
||||||
|
<script src="font-awesome/js/all.js"></script>
|
||||||
@RenderSection("Scripts", required: false)
|
@RenderSection("Scripts", required: false)
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -105,7 +105,20 @@
|
|||||||
@foreach (var record in ListRecords)
|
@foreach (var record in ListRecords)
|
||||||
{
|
{
|
||||||
<tr class="@checkSelect(@record.OrderId)">
|
<tr class="@checkSelect(@record.OrderId)">
|
||||||
<td class="text-nowrap"><button class="btn btn-sm btn-info" @onclick="() => Edit(record)"><span class="oi oi-pencil"></span></button></td>
|
<td class="text-nowrap">
|
||||||
|
@if (currRecord == null)
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-info" @onclick="() => Edit(record)">
|
||||||
|
<span class="oi oi-pencil"></span>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-secondary disabled">
|
||||||
|
<i class="oi oi-pencil"></i>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div>@record.Plant.PlantCode</div>
|
<div>@record.Plant.PlantCode</div>
|
||||||
<div class="small">@record.Plant.PlantDesc</div>
|
<div class="small">@record.Plant.PlantDesc</div>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
using GWMS.Data.DatabaseModels;
|
using GWMS.Data.DatabaseModels;
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -10,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, ExtUser")]
|
||||||
public partial class Suppliers : ComponentBase, IDisposable
|
public partial class Suppliers : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
@@ -23,6 +26,15 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore SupplierId filtrato da claim
|
||||||
|
/// </summary>
|
||||||
|
protected int ClaimSupplierId = -1;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private int _currPage { get; set; } = 1;
|
private int _currPage { get; set; } = 1;
|
||||||
@@ -64,17 +76,17 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
int answ = 0;
|
int answ = 0;
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.PlantId;
|
answ = AppMService.Order_Filter.PlantId;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.PlantId.Equals(value))
|
if (!AppMService.Order_Filter.PlantId.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.PlantId = value;
|
AppMService.Order_Filter.PlantId = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -86,29 +98,33 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
int answ = 0;
|
int answ = 0;
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.SupplierId;
|
answ = AppMService.Order_Filter.SupplierId;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.SupplierId.Equals(value))
|
if (!AppMService.Order_Filter.SupplierId.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.SupplierId = value;
|
AppMService.Order_Filter.SupplierId = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool ShowCharts { get; set; } = false;
|
|
||||||
|
|
||||||
#endregion Private Properties
|
#endregion Private Properties
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected MessageService AppMService { get; set; }
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected GWMSDataService DataService { get; set; }
|
protected GWMSDataService DataService { get; set; }
|
||||||
|
|
||||||
@@ -117,17 +133,17 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
DateTime answ = DateTime.Today.AddDays(1);
|
DateTime answ = DateTime.Today.AddDays(1);
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.DateEnd;
|
answ = AppMService.Order_Filter.DateEnd;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.DateEnd.Equals(value))
|
if (!AppMService.Order_Filter.DateEnd.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.DateEnd = value;
|
AppMService.Order_Filter.DateEnd = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -139,17 +155,17 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
DateTime answ = DateTime.Today.AddDays(-1);
|
DateTime answ = DateTime.Today.AddDays(-1);
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.DateStart;
|
answ = AppMService.Order_Filter.DateStart;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.DateStart.Equals(value))
|
if (!AppMService.Order_Filter.DateStart.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.DateStart = value;
|
AppMService.Order_Filter.DateStart = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -159,22 +175,9 @@ namespace GWMS.UI.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected IJSRuntime JSRuntime { get; set; }
|
protected IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MessageService { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected NavigationManager NavManager { get; set; }
|
protected NavigationManager NavManager { get; set; }
|
||||||
|
|
||||||
protected int SupplierIdFilt
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
int answ = 0;
|
|
||||||
int.TryParse(SupplierIdReq, out answ);
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected int totalCount
|
protected int totalCount
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -199,6 +202,30 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero Claims dell'utente...
|
||||||
|
///
|
||||||
|
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task GetClaimsData()
|
||||||
|
{
|
||||||
|
// recupero auth
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
// se autenticato --> controllo i claims
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
// cerco il claim PlantId...
|
||||||
|
var supplierClaim = user.FindFirst(c => c.Type == "SupplierId")?.Value;
|
||||||
|
int.TryParse(supplierClaim, out ClaimSupplierId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClaimSupplierId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDateEndChanged(DateTime? date)
|
private void OnDateEndChanged(DateTime? date)
|
||||||
{
|
{
|
||||||
DateEnd = (DateTime)date;
|
DateEnd = (DateTime)date;
|
||||||
@@ -212,7 +239,7 @@ namespace GWMS.UI.Pages
|
|||||||
private async Task ReloadData()
|
private async Task ReloadData()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
SearchRecords = await DataService.OrdersGetFilt(MessageService.Order_Filter);
|
SearchRecords = await DataService.OrdersGetFilt(AppMService.Order_Filter);
|
||||||
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
@@ -223,7 +250,9 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected void Edit(OrderModel selRecord)
|
protected void Edit(OrderModel selRecord)
|
||||||
{
|
{
|
||||||
currRecord = selRecord;
|
// rileggo dal DB il record corrente...
|
||||||
|
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
|
||||||
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ForceReload(int newNum)
|
protected void ForceReload(int newNum)
|
||||||
@@ -238,18 +267,37 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
MessageService.ShowSearch = false;
|
DataService.ResetController();
|
||||||
MessageService.PageName = "Fornitore";
|
AppMService.ShowSearch = false;
|
||||||
MessageService.PageIcon = "fas fa-industry pr-2";
|
AppMService.PageName = "Fornitore";
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
AppMService.PageIcon = "fas fa-industry pr-2";
|
||||||
|
AppMService.EA_SearchUpdated += OnSeachUpdated;
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
{
|
{
|
||||||
|
isLoading = true;
|
||||||
PlantsList = await DataService.PlantsGetAll();
|
PlantsList = await DataService.PlantsGetAll();
|
||||||
var suppliersAll = await DataService.SuppliersGetAll();
|
SelSupplierId = 0;
|
||||||
SuppliersList = suppliersAll.Where(x => x.SupplierId == SupplierIdFilt || SupplierIdFilt == 0).ToList();
|
SuppliersList = null;
|
||||||
|
await GetClaimsData();
|
||||||
|
// se ho un plantId valido --> altrimenti non abilitato
|
||||||
|
if (ClaimSupplierId == 0)
|
||||||
|
{
|
||||||
|
SuppliersList = await DataService.SuppliersGetAll();
|
||||||
|
}
|
||||||
|
else if (ClaimSupplierId > 0)
|
||||||
|
{
|
||||||
|
var rawData = await DataService.SuppliersGetAll();
|
||||||
|
SuppliersList = rawData.Where(x => x.SupplierId == ClaimSupplierId).ToList();
|
||||||
|
SelSupplierId = ClaimSupplierId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlantsList = new List<PlantDTO>();
|
||||||
|
}
|
||||||
|
isLoading = false;
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +312,7 @@ namespace GWMS.UI.Pages
|
|||||||
currRecord = null;
|
currRecord = null;
|
||||||
SearchRecords = null;
|
SearchRecords = null;
|
||||||
ListRecords = null;
|
ListRecords = null;
|
||||||
MessageService.Order_Filter = SelectOrderData.Init(5, 7);
|
AppMService.Order_Filter = SelectOrderData.Init(5, 7);
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -277,6 +325,7 @@ namespace GWMS.UI.Pages
|
|||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
|
DataService.ResetController();
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,7 +350,7 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
AppMService.EA_SearchUpdated -= OnSeachUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void OnSeachUpdated()
|
public async void OnSeachUpdated()
|
||||||
|
|||||||
@@ -8,18 +8,15 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 pr-0 col-lg-8 h3">
|
<div class="col-6 pr-0 col-lg-8 h3 mb-0">
|
||||||
Consegne
|
Consegne
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 col-lg-4">
|
<div class="col-6 col-lg-4">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 px-1">
|
<div class="col-6">
|
||||||
<button class="btn btn-sm btn-block btn-secondary" @onclick="() => ToggleFiltPeriod()"><i class="far fa-calendar-alt"></i> <i class="@icnFiltTime"></i></button>
|
<button class="btn btn-sm btn-block btn-secondary" @onclick="() => ToggleFiltPeriod()"><i class="far fa-calendar-alt"></i> <i class="@icnFiltTime"></i></button>
|
||||||
</div>
|
</div>
|
||||||
@*<div class="col-4 px-1">
|
<div class="col-6">
|
||||||
<button class="btn btn-sm btn-block btn-secondary" @onclick="() => ToggleFiltTransp()"><i class="fas fa-truck-moving"></i> <i class="@icnFiltTran"></i></button>
|
|
||||||
</div>*@
|
|
||||||
<div class="col-6 px-1">
|
|
||||||
<button class="btn btn-sm btn-block btn-secondary" @onclick="() => ToggleFiltDest()"><i class="fas fa-gas-pump"></i> <i class="@icnFiltDest"></i></button>
|
<button class="btn btn-sm btn-block btn-secondary" @onclick="() => ToggleFiltDest()"><i class="fas fa-gas-pump"></i> <i class="@icnFiltDest"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -90,7 +87,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body p-1">
|
<div class="card-body">
|
||||||
@if (currRecord != null)
|
@if (currRecord != null)
|
||||||
{
|
{
|
||||||
<OrderTranspEditor currItem="@currRecord" DataReset="ResetData" DataUpdated="UpdateData" SupplierId="@currRecord.SupplierId"></OrderTranspEditor>
|
<OrderTranspEditor currItem="@currRecord" DataReset="ResetData" DataUpdated="UpdateData" SupplierId="@currRecord.SupplierId"></OrderTranspEditor>
|
||||||
@@ -107,6 +104,7 @@
|
|||||||
{
|
{
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
|
@*<div id="qrCodeImg"></div>*@
|
||||||
<table class="table table-sm table-striped">
|
<table class="table table-sm table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -119,7 +117,20 @@
|
|||||||
@foreach (var record in ListRecords)
|
@foreach (var record in ListRecords)
|
||||||
{
|
{
|
||||||
<tr class="@checkSelect(@record.OrderId)">
|
<tr class="@checkSelect(@record.OrderId)">
|
||||||
<td class="text-nowrap"><button class="btn btn-sm btn-info" @onclick="() => Edit(record)"><span class="oi oi-magnifying-glass"></span></button></td>
|
<td class="text-nowrap">
|
||||||
|
@if (currRecord == null)
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-info" @onclick="() => Edit(record)">
|
||||||
|
<i class="oi oi-magnifying-glass"></i>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<button class="btn btn-sm btn-secondary disabled">
|
||||||
|
<i class="oi oi-magnifying-glass"></i>
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<div><b>@record.Plant.PlantCode</b> | @record.Plant.PlantDesc</div>
|
<div><b>@record.Plant.PlantCode</b> | @record.Plant.PlantDesc</div>
|
||||||
<div class="small"><span class="fas fa-comment-alt" aria-hidden="true"></span> @record.OrderDesc</div>
|
<div class="small"><span class="fas fa-comment-alt" aria-hidden="true"></span> @record.OrderDesc</div>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
using GWMS.Data.DatabaseModels;
|
using GWMS.Data.DatabaseModels;
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Microsoft.AspNetCore.Components.Authorization;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -10,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, ExtTransp")]
|
||||||
public partial class Transporters : ComponentBase, IDisposable
|
public partial class Transporters : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
@@ -19,11 +22,18 @@ namespace GWMS.UI.Pages
|
|||||||
private List<OrderModel> ListRecords;
|
private List<OrderModel> ListRecords;
|
||||||
private List<PlantDTO> PlantsList;
|
private List<PlantDTO> PlantsList;
|
||||||
private List<OrderModel> SearchRecords;
|
private List<OrderModel> SearchRecords;
|
||||||
|
|
||||||
private List<TransporterModel> TransportersList;
|
private List<TransporterModel> TransportersList;
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
/// Valore TransporterId filtrato da claim
|
||||||
|
/// </summary>
|
||||||
|
protected int ClaimTransporterId = -1;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
private int _currPage { get; set; } = 1;
|
private int _currPage { get; set; } = 1;
|
||||||
@@ -89,18 +99,18 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
int answ = 0;
|
int answ = 0;
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.PlantId;
|
answ = AppMService.Order_Filter.PlantId;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.PlantId.Equals(value))
|
if (!AppMService.Order_Filter.PlantId.Equals(value))
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
MessageService.Order_Filter.PlantId = value;
|
AppMService.Order_Filter.PlantId = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -112,18 +122,18 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
int answ = 0;
|
int answ = 0;
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.TransporterId;
|
answ = AppMService.Order_Filter.TransporterId;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.TransporterId.Equals(value))
|
if (!AppMService.Order_Filter.TransporterId.Equals(value))
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
MessageService.Order_Filter.TransporterId = value;
|
AppMService.Order_Filter.TransporterId = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -134,6 +144,12 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected MessageService AppMService { get; set; }
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected GWMSDataService DataService { get; set; }
|
protected GWMSDataService DataService { get; set; }
|
||||||
|
|
||||||
@@ -142,17 +158,17 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
DateTime answ = DateTime.Today.AddDays(1);
|
DateTime answ = DateTime.Today.AddDays(1);
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.DateEnd;
|
answ = AppMService.Order_Filter.DateEnd;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.DateEnd.Equals(value))
|
if (!AppMService.Order_Filter.DateEnd.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.DateEnd = value;
|
AppMService.Order_Filter.DateEnd = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -164,17 +180,17 @@ namespace GWMS.UI.Pages
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
DateTime answ = DateTime.Today.AddDays(-1);
|
DateTime answ = DateTime.Today.AddDays(-1);
|
||||||
if (MessageService.Order_Filter != null)
|
if (AppMService.Order_Filter != null)
|
||||||
{
|
{
|
||||||
answ = MessageService.Order_Filter.DateStart;
|
answ = AppMService.Order_Filter.DateStart;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (!MessageService.Order_Filter.DateStart.Equals(value))
|
if (!AppMService.Order_Filter.DateStart.Equals(value))
|
||||||
{
|
{
|
||||||
MessageService.Order_Filter.DateStart = value;
|
AppMService.Order_Filter.DateStart = value;
|
||||||
var pUpd = Task.Run(async () => await ReloadData());
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
@@ -184,15 +200,13 @@ namespace GWMS.UI.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected IJSRuntime JSRuntime { get; set; }
|
protected IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MessageService { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected NavigationManager NavManager { get; set; }
|
protected NavigationManager NavManager { get; set; }
|
||||||
|
|
||||||
protected bool showFiltDest { get; set; } = false;
|
protected bool showFiltDest { get; set; } = false;
|
||||||
|
|
||||||
protected bool showFiltTime { get; set; } = false;
|
protected bool showFiltTime { get; set; } = false;
|
||||||
|
|
||||||
protected bool showFiltTrasp { get; set; } = false;
|
protected bool showFiltTrasp { get; set; } = false;
|
||||||
|
|
||||||
protected int totalCount
|
protected int totalCount
|
||||||
@@ -212,6 +226,31 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Recupero Claims dell'utente...
|
||||||
|
///
|
||||||
|
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task GetClaimsData()
|
||||||
|
{
|
||||||
|
ClaimTransporterId = -1;
|
||||||
|
// recupero auth
|
||||||
|
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||||
|
var user = authState.User;
|
||||||
|
// se autenticato --> controllo i claims
|
||||||
|
if (user.Identity.IsAuthenticated)
|
||||||
|
{
|
||||||
|
// cerco il claim PlantId...
|
||||||
|
var supplierClaim = user.FindFirst(c => c.Type == "TransporterId")?.Value;
|
||||||
|
int.TryParse(supplierClaim, out ClaimTransporterId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ClaimTransporterId = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void OnDateEndChanged(DateTime? date)
|
private void OnDateEndChanged(DateTime? date)
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
@@ -227,9 +266,8 @@ namespace GWMS.UI.Pages
|
|||||||
private async Task ReloadData()
|
private async Task ReloadData()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
SearchRecords = await DataService.OrdersGetFilt(MessageService.Order_Filter);
|
SearchRecords = await DataService.OrdersGetFilt(AppMService.Order_Filter);
|
||||||
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
||||||
//ListRecords = SearchRecords.Where(x => x.TransporterId == TransporterIdFilt).Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
|
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,7 +277,9 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected void Edit(OrderModel selRecord)
|
protected void Edit(OrderModel selRecord)
|
||||||
{
|
{
|
||||||
currRecord = selRecord;
|
// rileggo dal DB il record corrente...
|
||||||
|
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
|
||||||
|
pUpd.Wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void ForceReload(int newNum)
|
protected void ForceReload(int newNum)
|
||||||
@@ -254,19 +294,39 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
DataService.ResetController();
|
||||||
SelPlantId = 0;
|
SelPlantId = 0;
|
||||||
SelTranspId = 0;
|
SelTranspId = 0;
|
||||||
MessageService.ShowSearch = false;
|
AppMService.ShowSearch = false;
|
||||||
MessageService.PageName = "Fornitore";
|
AppMService.PageName = "Fornitore";
|
||||||
MessageService.PageIcon = "fas fa-industry pr-2";
|
AppMService.PageIcon = "fas fa-industry pr-2";
|
||||||
MessageService.EA_SearchUpdated += OnSeachUpdated;
|
AppMService.EA_SearchUpdated += OnSeachUpdated;
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReloadAllData()
|
protected async Task ReloadAllData()
|
||||||
{
|
{
|
||||||
|
isLoading = true;
|
||||||
PlantsList = await DataService.PlantsGetAll();
|
PlantsList = await DataService.PlantsGetAll();
|
||||||
TransportersList = await DataService.TransportersGetAll();
|
SelTranspId = 0;
|
||||||
|
TransportersList = null;
|
||||||
|
await GetClaimsData();
|
||||||
|
// se ho un plantId valido --> altrimenti non abilitato
|
||||||
|
if (ClaimTransporterId == 0)
|
||||||
|
{
|
||||||
|
TransportersList = await DataService.TransportersGetAll();
|
||||||
|
}
|
||||||
|
else if (ClaimTransporterId > 0)
|
||||||
|
{
|
||||||
|
var rawData = await DataService.TransportersGetAll();
|
||||||
|
TransportersList = rawData.Where(x => x.TransporterId == ClaimTransporterId).ToList();
|
||||||
|
SelTranspId = ClaimTransporterId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlantsList = new List<PlantDTO>();
|
||||||
|
}
|
||||||
|
isLoading = false;
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -281,7 +341,7 @@ namespace GWMS.UI.Pages
|
|||||||
currRecord = null;
|
currRecord = null;
|
||||||
SearchRecords = null;
|
SearchRecords = null;
|
||||||
ListRecords = null;
|
ListRecords = null;
|
||||||
MessageService.Order_Filter = SelectOrderData.Init(5, 7);
|
AppMService.Order_Filter = SelectOrderData.Init(5, 7);
|
||||||
await ReloadAllData();
|
await ReloadAllData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,6 +373,7 @@ namespace GWMS.UI.Pages
|
|||||||
protected async Task UpdateData()
|
protected async Task UpdateData()
|
||||||
{
|
{
|
||||||
currRecord = null;
|
currRecord = null;
|
||||||
|
DataService.ResetController();
|
||||||
await ReloadData();
|
await ReloadData();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +398,7 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
MessageService.EA_SearchUpdated -= OnSeachUpdated;
|
AppMService.EA_SearchUpdated -= OnSeachUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void OnSeachUpdated()
|
public async void OnSeachUpdated()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
@page "/UserAdmin"
|
@page "/UserAdmin"
|
||||||
|
|
||||||
@using GWMS.UI.Pages
|
@using GWMS.UI.Pages
|
||||||
|
@using GWMS.UI.Components
|
||||||
|
|
||||||
@if (ShowPopup)
|
@if (ShowPopup)
|
||||||
{
|
{
|
||||||
@@ -168,6 +169,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div class="card-footer p-1">
|
||||||
|
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="ForceReload" numPageChanged="ForceReloadPage" totalCount="totalCount" showLoading="isLoading" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -27,10 +27,15 @@ namespace GWMS.UI.Pages
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private IdentityUser objUser = new IdentityUser();
|
private IdentityUser objUser = new IdentityUser();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Collezione utenti
|
||||||
|
/// </summary>
|
||||||
|
private List<IdentityUser> RawList = new List<IdentityUser>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Elenco ROLES da mostrare in dropdown durante editing (1 solo? usare DB?!?)
|
/// Elenco ROLES da mostrare in dropdown durante editing (1 solo? usare DB?!?)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private List<string> RolesList = new List<string>() { "Undef", "ExtUser", "User", "Admin", "SuperAdmin" };
|
private List<string> RolesList = new List<string>() { "Undef", "ExtTransp", "ExtUser", "User", "Admin", "SuperAdmin" };
|
||||||
|
|
||||||
// To enable showing the Popup
|
// To enable showing the Popup
|
||||||
private bool ShowPopup = false;
|
private bool ShowPopup = false;
|
||||||
@@ -55,6 +60,10 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
|
private int _currPage { get; set; } = 1;
|
||||||
|
|
||||||
|
private int _numRecord { get; set; } = 10;
|
||||||
|
|
||||||
[CascadingParameter]
|
[CascadingParameter]
|
||||||
private Task<AuthenticationState> authenticationStateTask { get; set; }
|
private Task<AuthenticationState> authenticationStateTask { get; set; }
|
||||||
|
|
||||||
@@ -78,6 +87,39 @@ namespace GWMS.UI.Pages
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private string CurrentUserRole { get; set; } = "User";
|
private string CurrentUserRole { get; set; } = "User";
|
||||||
|
|
||||||
|
private int currPage
|
||||||
|
{
|
||||||
|
get => _currPage;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_currPage != value)
|
||||||
|
{
|
||||||
|
_currPage = value;
|
||||||
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
|
pUpd.Wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private MessageService MessageService { get; set; }
|
||||||
|
|
||||||
|
private int numRecord
|
||||||
|
{
|
||||||
|
get => _numRecord;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_numRecord != value)
|
||||||
|
{
|
||||||
|
_numRecord = value;
|
||||||
|
var pUpd = Task.Run(async () => await ReloadData());
|
||||||
|
pUpd.Wait();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Private Properties
|
#endregion Private Properties
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
@@ -97,8 +139,33 @@ namespace GWMS.UI.Pages
|
|||||||
[Inject]
|
[Inject]
|
||||||
protected IJSRuntime JSRuntime { get; set; }
|
protected IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
|
protected int totalCount
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int answ = 0;
|
||||||
|
if (RawList != null)
|
||||||
|
{
|
||||||
|
answ = RawList.Count;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
public string searchVal
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return MessageService.SearchVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
private void AddNewUser()
|
private void AddNewUser()
|
||||||
@@ -220,6 +287,13 @@ namespace GWMS.UI.Pages
|
|||||||
ShowPopup = true;
|
ShowPopup = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task ReloadData()
|
||||||
|
{
|
||||||
|
isLoading = true;
|
||||||
|
await GetUsers();
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
private async Task SaveUser()
|
private async Task SaveUser()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -353,11 +427,22 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
|
protected void ForceReload(int newNum)
|
||||||
|
{
|
||||||
|
numRecord = newNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void ForceReloadPage(int newNum)
|
||||||
|
{
|
||||||
|
currPage = newNum;
|
||||||
|
}
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
AppMService.ShowSearch = true;
|
AppMService.ShowSearch = true;
|
||||||
AppMService.PageName = "Gestione Utenti";
|
AppMService.PageName = "Gestione Utenti";
|
||||||
AppMService.PageIcon = "fas fa-users pr-2";
|
AppMService.PageIcon = "fas fa-users pr-2";
|
||||||
|
AppMService.EA_SearchUpdated += OnSeachUpdated;
|
||||||
// lettura dati
|
// lettura dati
|
||||||
await GetUsers();
|
await GetUsers();
|
||||||
await CheckSuperAdmin();
|
await CheckSuperAdmin();
|
||||||
@@ -374,6 +459,7 @@ namespace GWMS.UI.Pages
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
AppMService.EA_SearchUpdated -= OnSeachUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -386,7 +472,16 @@ namespace GWMS.UI.Pages
|
|||||||
// Collection to hold users
|
// Collection to hold users
|
||||||
UsersList = new List<UserData>();
|
UsersList = new List<UserData>();
|
||||||
// get users from _UserManager
|
// get users from _UserManager
|
||||||
var user = _UserManager.Users.Select(x => new IdentityUser
|
var allData = _UserManager.Users.ToList();
|
||||||
|
if (!string.IsNullOrEmpty(searchVal))
|
||||||
|
{
|
||||||
|
RawList = allData.Where(x => x.NormalizedEmail.Contains(searchVal.ToUpper()) || x.NormalizedUserName.Contains(searchVal.ToUpper())).ToList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RawList = allData;
|
||||||
|
}
|
||||||
|
var user = RawList.Skip(numRecord * (currPage - 1)).Take(numRecord).Select(x => new IdentityUser
|
||||||
{
|
{
|
||||||
Id = x.Id,
|
Id = x.Id,
|
||||||
UserName = x.UserName,
|
UserName = x.UserName,
|
||||||
@@ -411,6 +506,15 @@ namespace GWMS.UI.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async void OnSeachUpdated()
|
||||||
|
{
|
||||||
|
await GetUsers();
|
||||||
|
await InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
StateHasChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public string ShowClaims(List<System.Security.Claims.Claim> ClaimList)
|
public string ShowClaims(List<System.Security.Claims.Claim> ClaimList)
|
||||||
{
|
{
|
||||||
string answ = string.Join(",", ClaimList);
|
string answ = string.Join(",", ClaimList);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using GWMS.Data.DatabaseModels;
|
using GWMS.Data.DatabaseModels;
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
@@ -11,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin, User")]
|
||||||
public partial class UserManager : ComponentBase, IDisposable
|
public partial class UserManager : ComponentBase, IDisposable
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using GWMS.Data.DatabaseModels;
|
using GWMS.Data.DatabaseModels;
|
||||||
using GWMS.Data.DTO;
|
using GWMS.Data.DTO;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.JSInterop;
|
using Microsoft.JSInterop;
|
||||||
using System;
|
using System;
|
||||||
@@ -11,6 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace GWMS.UI.Pages
|
namespace GWMS.UI.Pages
|
||||||
{
|
{
|
||||||
|
[Authorize(Roles = "SuperAdmin, Admin")]
|
||||||
public partial class WeekPlan : ComponentBase
|
public partial class WeekPlan : ComponentBase
|
||||||
{
|
{
|
||||||
#region Private Fields
|
#region Private Fields
|
||||||
|
|||||||
+30
-12
@@ -13,17 +13,13 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
@*<meta name="viewport" content="width=device-width, initial-scale=1.0" />*@
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
<title>GWMS.UI</title>
|
<title>GWMS.UI</title>
|
||||||
<base href="~/" />
|
<base href="~/" />
|
||||||
@*<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />*@
|
|
||||||
|
|
||||||
<!-- inside of head section -->
|
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" />
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
|
<link rel="stylesheet" href="font-awesome/css/fontawesome.min.css" />
|
||||||
<!--<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css"> -->
|
<link rel="stylesheet" href="Chart.js/Chart.min.css" />
|
||||||
|
|
||||||
<link rel="stylesheet" href="font-awesome/css/fontawesome.css" />
|
|
||||||
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
|
<link href="_content/Blazorise/blazorise.css" rel="stylesheet" />
|
||||||
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
|
<link href="_content/Blazorise.Bootstrap/blazorise.bootstrap.css" rel="stylesheet" />
|
||||||
|
|
||||||
@@ -46,10 +42,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- inside of body section and after the div/app tag -->
|
<!-- inside of body section and after the div/app tag -->
|
||||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
|
<script src="jquery/jquery.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
|
<script src="Chart.js/Chart.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF" crossorigin="anonymous"></script>
|
<script src="popper.js/umd/popper.min.js"></script>
|
||||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
|
<script src="bootstrap/js/bootstrap.min.js"></script>
|
||||||
|
|
||||||
<script src="_content/Blazorise/blazorise.js"></script>
|
<script src="_content/Blazorise/blazorise.js"></script>
|
||||||
<script src="_content/Blazorise.Bootstrap/blazorise.bootstrap.js"></script>
|
<script src="_content/Blazorise.Bootstrap/blazorise.bootstrap.js"></script>
|
||||||
@@ -58,7 +54,29 @@
|
|||||||
<script src="_content/BlazorBarcodeScanner.ZXing.JS/zxingjs.index.min.js"></script>
|
<script src="_content/BlazorBarcodeScanner.ZXing.JS/zxingjs.index.min.js"></script>
|
||||||
<script src="_content/BlazorBarcodeScanner.ZXing.JS/BlazorBarcodeScanner.js"></script>
|
<script src="_content/BlazorBarcodeScanner.ZXing.JS/BlazorBarcodeScanner.js"></script>
|
||||||
|
|
||||||
<script src="font-awesome/js/all.js"></script>
|
<script src="font-awesome/js/all.min.js"></script>
|
||||||
<script src="_framework/blazor.server.js"></script>
|
<script src="_framework/blazor.server.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="~/lib/qrcode.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
// gestione qrcode... da https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-enable-qrcodes?view=aspnetcore-5.0
|
||||||
|
//var qrcode = new QRCode("qrCodeImg");
|
||||||
|
function displayQr(elementName, rawData) {
|
||||||
|
try {
|
||||||
|
if (elementName != "" && rawData != "") {
|
||||||
|
//qrcode = new QRCode(document.getElementById(elementName));
|
||||||
|
new QRCode(document.getElementById(elementName),
|
||||||
|
{
|
||||||
|
text: rawData,
|
||||||
|
width: 300,
|
||||||
|
height: 300
|
||||||
|
});
|
||||||
|
//qrcode.makeCode(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TimeStampOfAssociatedLegacyPublishXmlFile />
|
||||||
|
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAxNUOeyL5oUSNi/ISzvJtLgAAAAACAAAAAAADZgAAwAAAABAAAAD+ZfytfJJzf+XzD0ShcSagAAAAAASAAACgAAAAEAAAAAhSlOT4SIk7WdUrN1YS1qMYAAAAGI+89iBgQqaMJeEi4KxlVpTh9PMYTidkFAAAAO7so25722o8lxnn313D6J0eV2MV</EncryptedPassword>
|
||||||
|
<History>False|2021-06-23T12:54:39.3412623Z;</History>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TimeStampOfAssociatedLegacyPublishXmlFile />
|
||||||
|
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAxNUOeyL5oUSNi/ISzvJtLgAAAAACAAAAAAADZgAAwAAAABAAAAAwZbVLPZ+eVCZgVc7GoE8CAAAAAASAAACgAAAAEAAAAEmDwlS8G30J/kR5K+eX8B4YAAAAZ14uy/TVGN4ui4QHWpgdmwaMob7VeTSiFAAAAC/61bXCe/Mgyo7S2QBvJRJ2GUiZ</EncryptedPassword>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<History>True|2021-06-23T13:11:40.1591388Z;</History>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebPublishMethod>Package</WebPublishMethod>
|
||||||
|
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||||
|
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||||
|
<SiteUrlToLaunchAfterPublish />
|
||||||
|
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
|
||||||
|
<ExcludeApp_Data>False</ExcludeApp_Data>
|
||||||
|
<ProjectGuid>5f0dbab0-122f-4a81-be73-161bbefeef59</ProjectGuid>
|
||||||
|
<DesktopBuildPackageLocation>bin\publish\GWMS.UI.zip</DesktopBuildPackageLocation>
|
||||||
|
<PackageAsSingleFile>true</PackageAsSingleFile>
|
||||||
|
<DeployIisAppPath>Default Web Site/GWMS</DeployIisAppPath>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<SelfContained>false</SelfContained>
|
||||||
|
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<WebPublishMethod>Package</WebPublishMethod>
|
||||||
|
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||||
|
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||||
|
<SiteUrlToLaunchAfterPublish />
|
||||||
|
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
|
||||||
|
<ExcludeApp_Data>False</ExcludeApp_Data>
|
||||||
|
<ProjectGuid>5f0dbab0-122f-4a81-be73-161bbefeef59</ProjectGuid>
|
||||||
|
<DesktopBuildPackageLocation>bin\publish\GWMS.UI.zip</DesktopBuildPackageLocation>
|
||||||
|
<PackageAsSingleFile>true</PackageAsSingleFile>
|
||||||
|
<DeployIisAppPath>Default Web Site/GWMS</DeployIisAppPath>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
<SelfContained>false</SelfContained>
|
||||||
|
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
|
||||||
|
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||||
|
-->
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<TimeStampOfAssociatedLegacyPublishXmlFile />
|
||||||
|
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAxNUOeyL5oUSNi/ISzvJtLgAAAAACAAAAAAADZgAAwAAAABAAAADTQmYF8PrkLa4Xb9E/zxuXAAAAAASAAACgAAAAEAAAADLKIlcnZuaCFkaVmfe382YYAAAADxGWDujdGKLnZ+ycw0Vb2K2g5K0dRHB8FAAAAHB9B2k06W3L+M48vPfUvedJRpJX</EncryptedPassword>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using Quartz;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace GWMS.UI
|
|
||||||
{
|
|
||||||
public class QuartzHostedService : IHostedService
|
|
||||||
{
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private readonly IScheduler _scheduler;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
public QuartzHostedService(IScheduler scheduler)
|
|
||||||
{
|
|
||||||
_scheduler = scheduler;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
public async Task StartAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
await _scheduler?.Start(cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task StopAsync(CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
await _scheduler?.Shutdown(cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,11 +11,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<CascadingValue Name="ShowSearch" Value=@ShowSearch>
|
<CascadingValue Name="ShowSearch" Value=@ShowSearch>
|
||||||
<div class="main">
|
<div class="main mr-1">
|
||||||
<div class="top-row px-0">
|
<div class="top-row">
|
||||||
<CmpTop></CmpTop>
|
<CmpTop></CmpTop>
|
||||||
</div>
|
</div>
|
||||||
<div class="content pt-1 pt-lg-2 px-2 mb-5">
|
<div class="content pt-1 pt-lg-2 mb-5">
|
||||||
@Body
|
@Body
|
||||||
</div>
|
</div>
|
||||||
<div class="fixed-bottom bottom-row">
|
<div class="fixed-bottom bottom-row">
|
||||||
|
|||||||
@@ -16,9 +16,9 @@
|
|||||||
background-color: #f7f7f7;
|
background-color: #f7f7f7;
|
||||||
border-bottom: 1px solid #d6d5d5;
|
border-bottom: 1px solid #d6d5d5;
|
||||||
height: 3.5rem;
|
height: 3.5rem;
|
||||||
|
align-items: center;
|
||||||
/*justify-content: space-evenly;
|
/*justify-content: space-evenly;
|
||||||
display: flex;*/
|
display: flex;*/
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-row ::deep a, .top-row .btn-link {
|
.top-row ::deep a, .top-row .btn-link {
|
||||||
@@ -34,37 +34,10 @@
|
|||||||
.bottom-row {
|
.bottom-row {
|
||||||
color: #dedede;
|
color: #dedede;
|
||||||
background-color: #000000;
|
background-color: #000000;
|
||||||
/*border-bottom: 1px solid #313131;*/
|
|
||||||
/*justify-content: flex-end;*/
|
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
/*display: flex;*/
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-row ::deep a, .top-row .btn-link {
|
|
||||||
white-space: nowrap;
|
|
||||||
margin-left: 1.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bottom-row a:first-child {
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
@media (max-width: 640.98px) {
|
|
||||||
.top-row:not(.auth) {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-row.auth {
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-row a, .top-row .btn-link {
|
|
||||||
margin-left: 0;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
@media (min-width: 641px) {
|
@media (min-width: 641px) {
|
||||||
.page {
|
.page {
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
|||||||
@@ -35,49 +35,80 @@
|
|||||||
<span class="@hideText">Home</span>
|
<span class="@hideText">Home</span>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
<AuthorizeView>
|
||||||
|
<NotAuthorized>
|
||||||
|
<li class="nav-item px-3" title="Login">
|
||||||
|
<NavLink class="nav-link" href="Identity/Account/LogIn">
|
||||||
|
<i class="fas fa-2x fa-user-alt pr-2"></i>Non Autenticato
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</NotAuthorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
<AuthorizeView Roles="SuperAdmin, Admin, User">
|
||||||
|
<Authorized>
|
||||||
|
<li class="nav-item px-3" title="Stato Impianti">
|
||||||
|
<NavLink class="nav-link" href="PlantStatus">
|
||||||
|
<i class="fas fa-2x fa-tachometer-alt pr-2"></i>
|
||||||
|
<span class="@hideText">Stato Impianti</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item px-3" title="Storico Ordini">
|
||||||
|
<NavLink class="nav-link" href="Orders">
|
||||||
|
<i class="fas fa-2x fa-file-invoice pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Storico Ordini</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item px-3" title="Scheda Stazione">
|
||||||
|
<NavLink class="nav-link" href="GasStation">
|
||||||
|
<i class="fas fa-2x fa-gas-pump pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Scheda Stazione</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</Authorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
<AuthorizeView Roles="SuperAdmin, Admin, ExtUser">
|
||||||
|
<Authorized>
|
||||||
|
<li class="nav-item px-3" title="Scheda Fornitore">
|
||||||
|
<NavLink class="nav-link" href="Suppliers">
|
||||||
|
<i class="fas fa-2x fa-industry pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Scheda Fornitore</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</Authorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
<AuthorizeView Roles="SuperAdmin, Admin, ExtTransp">
|
||||||
|
<Authorized>
|
||||||
|
<li class="nav-item px-3" title="Scheda Trasportatore">
|
||||||
|
<NavLink class="nav-link" href="Transporters">
|
||||||
|
<i class="fas fa-2x fa-truck-moving pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Scheda Trasportatore</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</Authorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
<AuthorizeView Roles="SuperAdmin, Admin">
|
||||||
|
<Authorized>
|
||||||
|
<li class="nav-item px-3" title="Planner Consegne">
|
||||||
|
<NavLink class="nav-link" href="WeekPlan">
|
||||||
|
<i class="fas fa-2x fa-calendar pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Planner Consegne</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item px-3" title="Setup Parametri">
|
||||||
|
<NavLink class="nav-link" href="Parameters">
|
||||||
|
<i class="fas fa-2x fa-wrench pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Setup Parametri</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item px-3" title="Admin Utenti">
|
||||||
|
<NavLink class="nav-link" href="UserAdmin">
|
||||||
|
<i class="fas fa-2x fa-users pr-2" aria-hidden="true"></i>
|
||||||
|
<span class="@hideText">Admin Utenti</span>
|
||||||
|
</NavLink>
|
||||||
|
</li>
|
||||||
|
</Authorized>
|
||||||
|
</AuthorizeView>
|
||||||
|
|
||||||
<li class="nav-item px-3" title="Stato Impianti">
|
|
||||||
<NavLink class="nav-link" href="PlantStatus">
|
|
||||||
<i class="fas fa-2x fa-tachometer-alt pr-2"></i>
|
|
||||||
<span class="@hideText">Stato Impianti</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Storico Ordini">
|
|
||||||
<NavLink class="nav-link" href="Orders">
|
|
||||||
<i class="fas fa-2x fa-file-invoice pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Storico Ordini</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Scheda Fornitore">
|
|
||||||
<NavLink class="nav-link" href="Suppliers">
|
|
||||||
<i class="fas fa-2x fa-industry pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Scheda Fornitore</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Scheda Trasportatore">
|
|
||||||
<NavLink class="nav-link" href="Transporters">
|
|
||||||
<i class="fas fa-2x fa-truck-moving pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Scheda Trasportatore</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Scheda Stazione">
|
|
||||||
<NavLink class="nav-link" href="GasStation">
|
|
||||||
<i class="fas fa-2x fa-gas-pump pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Scheda Stazione</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Planner Consegne">
|
|
||||||
<NavLink class="nav-link" href="WeekPlan">
|
|
||||||
<i class="fas fa-2x fa-calendar pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Planner Consegne</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Utenti">
|
|
||||||
<NavLink class="nav-link" href="UserAdmin">
|
|
||||||
<i class="fas fa-2x fa-users pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Admin Utenti</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>
|
|
||||||
@*<li class="nav-item px-3" title="Utenti">
|
@*<li class="nav-item px-3" title="Utenti">
|
||||||
<NavLink class="nav-link" href="UserManager">
|
<NavLink class="nav-link" href="UserManager">
|
||||||
<i class="fas fa-2x fa-users pr-2" aria-hidden="true"></i>
|
<i class="fas fa-2x fa-users pr-2" aria-hidden="true"></i>
|
||||||
@@ -89,12 +120,6 @@
|
|||||||
<i class="fas fa-2x fa-calendar-alt pr-2" aria-hidden="true"></i>
|
<i class="fas fa-2x fa-calendar-alt pr-2" aria-hidden="true"></i>
|
||||||
<span class="@hideText">Job Scheduler</span>
|
<span class="@hideText">Job Scheduler</span>
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
|
||||||
<li class="nav-item px-3" title="Setup Parametri">
|
|
||||||
<NavLink class="nav-link" href="Parameters">
|
|
||||||
<i class="fas fa-2x fa-wrench pr-2" aria-hidden="true"></i>
|
|
||||||
<span class="@hideText">Setup Parametri</span>
|
|
||||||
</NavLink>
|
|
||||||
</li>*@
|
</li>*@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+11
-14
@@ -1,7 +1,6 @@
|
|||||||
using Blazorise;
|
using Blazorise;
|
||||||
using Blazorise.Bootstrap;
|
using Blazorise.Bootstrap;
|
||||||
using Blazorise.Icons.FontAwesome;
|
using Blazorise.Icons.FontAwesome;
|
||||||
using ElmahCore.Mvc;
|
|
||||||
using GWMS.Data;
|
using GWMS.Data;
|
||||||
using GWMS.UI.Areas.Identity;
|
using GWMS.UI.Areas.Identity;
|
||||||
using GWMS.UI.Data;
|
using GWMS.UI.Data;
|
||||||
@@ -23,8 +22,6 @@ using Microsoft.Extensions.Configuration;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
using Microsoft.Extensions.Diagnostics.HealthChecks;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using Quartz;
|
|
||||||
using Quartz.Impl;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
@@ -79,9 +76,9 @@ namespace GWMS.UI
|
|||||||
});
|
});
|
||||||
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("it-IT");
|
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("it-IT");
|
||||||
|
|
||||||
// Registrazione Elmah:
|
//// Registrazione Elmah:
|
||||||
// https://github.com/ElmahCore/ElmahCore
|
//// https://github.com/ElmahCore/ElmahCore
|
||||||
app.UseElmah();
|
//app.UseElmah();
|
||||||
|
|
||||||
// fix forwarders
|
// fix forwarders
|
||||||
app.UseForwardedHeaders(new ForwardedHeadersOptions
|
app.UseForwardedHeaders(new ForwardedHeadersOptions
|
||||||
@@ -132,18 +129,18 @@ namespace GWMS.UI
|
|||||||
string connStringDB = DbConfig.CONNECTION_STRING;
|
string connStringDB = DbConfig.CONNECTION_STRING;
|
||||||
string connStringRedis = Configuration.GetConnectionString("Redis");
|
string connStringRedis = Configuration.GetConnectionString("Redis");
|
||||||
string redisSrvAddr = connStringRedis.Substring(0, connStringRedis.IndexOf(":"));
|
string redisSrvAddr = connStringRedis.Substring(0, connStringRedis.IndexOf(":"));
|
||||||
var qrCodeUri = new Uri(Configuration["ZCodeUrl"]);
|
//var qrCodeUri = new Uri(Configuration["ZCodeUrl"]);
|
||||||
string qrCodeAddr = qrCodeUri.Host;
|
//string qrCodeAddr = qrCodeUri.Host;
|
||||||
|
|
||||||
// healthchecks
|
// healthchecks
|
||||||
services.AddHealthChecks()
|
services.AddHealthChecks()
|
||||||
.AddMySql(connStringDB, "MySql instance")
|
.AddMySql(connStringDB, "MySql instance")
|
||||||
.AddAsyncCheck($"DB PING ({dbServerAddr})", () => Health.Checks.PingCheck(dbServerAddr))
|
.AddAsyncCheck($"DB PING ({dbServerAddr})", () => Health.Checks.PingCheck(dbServerAddr))
|
||||||
.AddAsyncCheck($"Redis PING ({redisSrvAddr})", () => Health.Checks.PingCheck(redisSrvAddr))
|
.AddAsyncCheck($"Redis PING ({redisSrvAddr})", () => Health.Checks.PingCheck(redisSrvAddr))
|
||||||
.AddAsyncCheck($"QrCode PING ({qrCodeAddr})", () => Health.Checks.PingCheck(qrCodeAddr))
|
//.AddAsyncCheck($"QrCode PING ({qrCodeAddr})", () => Health.Checks.PingCheck(qrCodeAddr))
|
||||||
.AddProcessAllocatedMemoryHealthCheck(512, "Max Process memory (<512MB)", failureStatus: HealthStatus.Degraded) // 512 MB max allocated memory
|
.AddProcessAllocatedMemoryHealthCheck(512, "Max Process memory (<512MB)", failureStatus: HealthStatus.Degraded) // 512 MB max allocated memory
|
||||||
.AddRedis(Configuration.GetConnectionString("Redis"), "Redis", failureStatus: HealthStatus.Degraded)
|
.AddRedis(Configuration.GetConnectionString("Redis"), "Redis", failureStatus: HealthStatus.Degraded)
|
||||||
.AddUrlGroup(new Uri(Configuration["ZCodeUrl"]), name: $"QrCode Gen ({Configuration["ZCodeUrl"]})", failureStatus: HealthStatus.Degraded)
|
//.AddUrlGroup(new Uri(Configuration["ZCodeUrl"]), name: $"QrCode Gen ({Configuration["ZCodeUrl"]})", failureStatus: HealthStatus.Degraded)
|
||||||
.AddAsyncCheck($"MySql Root User", () => Health.Checks.DbUserRoot("MySql"))
|
.AddAsyncCheck($"MySql Root User", () => Health.Checks.DbUserRoot("MySql"))
|
||||||
.AddAsyncCheck($"MySql App Users", () => Health.Checks.DbUserApp(DbConfig.DATABASE_NAME))
|
.AddAsyncCheck($"MySql App Users", () => Health.Checks.DbUserApp(DbConfig.DATABASE_NAME))
|
||||||
.AddAsyncCheck($"MySql Identity", () => Health.Checks.DbIdentity(DbConfig.DATABASE_NAME))
|
.AddAsyncCheck($"MySql Identity", () => Health.Checks.DbIdentity(DbConfig.DATABASE_NAME))
|
||||||
@@ -157,8 +154,8 @@ namespace GWMS.UI
|
|||||||
.AddHealthChecksUI(s =>
|
.AddHealthChecksUI(s =>
|
||||||
{
|
{
|
||||||
s.AddHealthCheckEndpoint("GWMS_Services", "health");
|
s.AddHealthCheckEndpoint("GWMS_Services", "health");
|
||||||
s.SetEvaluationTimeInSeconds(15);
|
s.SetEvaluationTimeInSeconds(60);
|
||||||
s.SetMinimumSecondsBetweenFailureNotifications(60);
|
s.SetMinimumSecondsBetweenFailureNotifications(120);
|
||||||
s.SetApiMaxActiveRequests(5);
|
s.SetApiMaxActiveRequests(5);
|
||||||
s.SetHeaderText("GWMS Health Check Status");
|
s.SetHeaderText("GWMS Health Check Status");
|
||||||
})
|
})
|
||||||
@@ -218,8 +215,8 @@ namespace GWMS.UI
|
|||||||
.AddBootstrapProviders()
|
.AddBootstrapProviders()
|
||||||
.AddFontAwesomeIcons();
|
.AddFontAwesomeIcons();
|
||||||
|
|
||||||
// Elmah
|
//// Elmah
|
||||||
services.AddElmah();
|
//services.AddElmah();
|
||||||
//string elmaConn = "Data Source=SQL2016DEV;Initial Catalog=Elmah;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=SHERPA.BBM;";
|
//string elmaConn = "Data Source=SQL2016DEV;Initial Catalog=Elmah;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=SHERPA.BBM;";
|
||||||
//services.AddElmah<SqlErrorLog>(options =>
|
//services.AddElmah<SqlErrorLog>(options =>
|
||||||
//{
|
//{
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
"IntervalMin": 60,
|
"IntervalMin": 60,
|
||||||
"MaxLogRecord": 360,
|
"MaxLogRecord": 360,
|
||||||
"ZCodeUrl": "https://qrcode.steamware.net/",
|
"ZCodeUrl": "https://qrcode.steamware.net/",
|
||||||
|
"ChartWaitDelay": 10,
|
||||||
"logo": "img/LogoPizzaferri.jpg",
|
"logo": "img/LogoPizzaferri.jpg",
|
||||||
"ExternalProviders": {
|
"ExternalProviders": {
|
||||||
"MailKit": {
|
"MailKit": {
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"outputFileName": "wwwroot/bootstrap/css/bootstrap.min.css",
|
||||||
|
"inputFiles": [
|
||||||
|
"wwwroot/bootstrap/css/bootstrap.css"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"defaultProvider": "cdnjs",
|
||||||
|
"libraries": [
|
||||||
|
{
|
||||||
|
"library": "font-awesome@5.15.4",
|
||||||
|
"destination": "wwwroot/font-awesome/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"library": "bootstrap@4.6.0",
|
||||||
|
"destination": "wwwroot/bootstrap/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"library": "Chart.js@2.8.0",
|
||||||
|
"destination": "wwwroot/Chart.js/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"library": "popper.js@1.16.1",
|
||||||
|
"destination": "wwwroot/popper.js/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"library": "jquery@3.5.1",
|
||||||
|
"destination": "wwwroot/jquery/"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* DOM element rendering detection
|
||||||
|
* https://davidwalsh.name/detect-node-insertion
|
||||||
|
*/
|
||||||
|
@keyframes chartjs-render-animation {
|
||||||
|
from { opacity: 0.99; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-render-monitor {
|
||||||
|
animation: chartjs-render-animation 0.001s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DOM element resizing detection
|
||||||
|
* https://github.com/marcj/css-element-queries
|
||||||
|
*/
|
||||||
|
.chartjs-size-monitor,
|
||||||
|
.chartjs-size-monitor-expand,
|
||||||
|
.chartjs-size-monitor-shrink {
|
||||||
|
position: absolute;
|
||||||
|
direction: ltr;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
pointer-events: none;
|
||||||
|
visibility: hidden;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-size-monitor-expand > div {
|
||||||
|
position: absolute;
|
||||||
|
width: 1000000px;
|
||||||
|
height: 1000000px;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartjs-size-monitor-shrink > div {
|
||||||
|
position: absolute;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
Vendored
+14680
File diff suppressed because it is too large
Load Diff
+1
@@ -0,0 +1 @@
|
|||||||
|
@keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0}
|
||||||
+7
File diff suppressed because one or more lines are too long
+3872
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+325
@@ -0,0 +1,325 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)
|
||||||
|
* Copyright 2011-2021 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2021 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
line-height: 1.15;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #212529;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[tabindex="-1"]:focus:not(:focus-visible) {
|
||||||
|
outline: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title],
|
||||||
|
abbr[data-original-title] {
|
||||||
|
text-decoration: underline;
|
||||||
|
-webkit-text-decoration: underline dotted;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 0;
|
||||||
|
-webkit-text-decoration-skip-ink: none;
|
||||||
|
text-decoration-skip-ink: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-style: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol,
|
||||||
|
ul,
|
||||||
|
dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ol,
|
||||||
|
ul ul,
|
||||||
|
ol ul,
|
||||||
|
ul ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
position: relative;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([class]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([class]):hover {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
overflow: hidden;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
color: #6c757d;
|
||||||
|
text-align: left;
|
||||||
|
caption-side: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
text-align: -webkit-match-parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus:not(:focus-visible) {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
optgroup,
|
||||||
|
textarea {
|
||||||
|
margin: 0;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[role="button"] {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
select {
|
||||||
|
word-wrap: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
[type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:not(:disabled),
|
||||||
|
[type="button"]:not(:disabled),
|
||||||
|
[type="reset"]:not(:disabled),
|
||||||
|
[type="submit"]:not(:disabled) {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
outline-offset: -2px;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
font: inherit;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)
|
||||||
|
* Copyright 2011-2021 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2021 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
||||||
File diff suppressed because one or more lines are too long
+10298
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+7045
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+4432
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// Base styles
|
||||||
|
//
|
||||||
|
|
||||||
|
.alert {
|
||||||
|
position: relative;
|
||||||
|
padding: $alert-padding-y $alert-padding-x;
|
||||||
|
margin-bottom: $alert-margin-bottom;
|
||||||
|
border: $alert-border-width solid transparent;
|
||||||
|
@include border-radius($alert-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Headings for larger alerts
|
||||||
|
.alert-heading {
|
||||||
|
// Specified to prevent conflicts of changing $headings-color
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Provide class for links that match alerts
|
||||||
|
.alert-link {
|
||||||
|
font-weight: $alert-link-font-weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Dismissible alerts
|
||||||
|
//
|
||||||
|
// Expand the right padding and account for the close button's positioning.
|
||||||
|
|
||||||
|
.alert-dismissible {
|
||||||
|
padding-right: $close-font-size + $alert-padding-x * 2;
|
||||||
|
|
||||||
|
// Adjust close link position
|
||||||
|
.close {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 2;
|
||||||
|
padding: $alert-padding-y $alert-padding-x;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Alternate styles
|
||||||
|
//
|
||||||
|
// Generate contextual modifier classes for colorizing the alert.
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
.alert-#{$color} {
|
||||||
|
@include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
// Base class
|
||||||
|
//
|
||||||
|
// Requires one of the contextual, color modifier classes for `color` and
|
||||||
|
// `background-color`.
|
||||||
|
|
||||||
|
.badge {
|
||||||
|
display: inline-block;
|
||||||
|
padding: $badge-padding-y $badge-padding-x;
|
||||||
|
@include font-size($badge-font-size);
|
||||||
|
font-weight: $badge-font-weight;
|
||||||
|
line-height: 1;
|
||||||
|
text-align: center;
|
||||||
|
white-space: nowrap;
|
||||||
|
vertical-align: baseline;
|
||||||
|
@include border-radius($badge-border-radius);
|
||||||
|
@include transition($badge-transition);
|
||||||
|
|
||||||
|
@at-root a#{&} {
|
||||||
|
@include hover-focus() {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty badges collapse automatically
|
||||||
|
&:empty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quick fix for badges in buttons
|
||||||
|
.btn .badge {
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pill badges
|
||||||
|
//
|
||||||
|
// Make them extra rounded with a modifier to replace v3's badges.
|
||||||
|
|
||||||
|
.badge-pill {
|
||||||
|
padding-right: $badge-pill-padding-x;
|
||||||
|
padding-left: $badge-pill-padding-x;
|
||||||
|
@include border-radius($badge-pill-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
//
|
||||||
|
// Contextual variations (linked badges get darker on :hover).
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
.badge-#{$color} {
|
||||||
|
@include badge-variant($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
.breadcrumb {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: $breadcrumb-padding-y $breadcrumb-padding-x;
|
||||||
|
margin-bottom: $breadcrumb-margin-bottom;
|
||||||
|
@include font-size($breadcrumb-font-size);
|
||||||
|
list-style: none;
|
||||||
|
background-color: $breadcrumb-bg;
|
||||||
|
@include border-radius($breadcrumb-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb-item {
|
||||||
|
// The separator between breadcrumbs (by default, a forward-slash: "/")
|
||||||
|
+ .breadcrumb-item {
|
||||||
|
padding-left: $breadcrumb-item-padding;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
float: left; // Suppress inline spacings and underlining of the separator
|
||||||
|
padding-right: $breadcrumb-item-padding;
|
||||||
|
color: $breadcrumb-divider-color;
|
||||||
|
content: escape-svg($breadcrumb-divider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
|
||||||
|
// without `<ul>`s. The `::before` pseudo-element generates an element
|
||||||
|
// *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
|
||||||
|
//
|
||||||
|
// To trick IE into suppressing the underline, we give the pseudo-element an
|
||||||
|
// underline and then immediately remove it.
|
||||||
|
+ .breadcrumb-item:hover::before {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
// stylelint-disable-next-line no-duplicate-selectors
|
||||||
|
+ .breadcrumb-item:hover::before {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: $breadcrumb-active-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,163 @@
|
|||||||
|
// stylelint-disable selector-no-qualifying-type
|
||||||
|
|
||||||
|
// Make the div behave like a button
|
||||||
|
.btn-group,
|
||||||
|
.btn-group-vertical {
|
||||||
|
position: relative;
|
||||||
|
display: inline-flex;
|
||||||
|
vertical-align: middle; // match .btn alignment given font-size hack above
|
||||||
|
|
||||||
|
> .btn {
|
||||||
|
position: relative;
|
||||||
|
flex: 1 1 auto;
|
||||||
|
|
||||||
|
// Bring the hover, focused, and "active" buttons to the front to overlay
|
||||||
|
// the borders properly
|
||||||
|
@include hover() {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
&:focus,
|
||||||
|
&:active,
|
||||||
|
&.active {
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optional: Group multiple button groups together for a toolbar
|
||||||
|
.btn-toolbar {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: flex-start;
|
||||||
|
|
||||||
|
.input-group {
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-group {
|
||||||
|
// Prevent double borders when buttons are next to each other
|
||||||
|
> .btn:not(:first-child),
|
||||||
|
> .btn-group:not(:first-child) {
|
||||||
|
margin-left: -$btn-border-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset rounded corners
|
||||||
|
> .btn:not(:last-child):not(.dropdown-toggle),
|
||||||
|
> .btn-group:not(:last-child) > .btn {
|
||||||
|
@include border-right-radius(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .btn:not(:first-child),
|
||||||
|
> .btn-group:not(:first-child) > .btn {
|
||||||
|
@include border-left-radius(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sizing
|
||||||
|
//
|
||||||
|
// Remix the default button sizing classes into new ones for easier manipulation.
|
||||||
|
|
||||||
|
.btn-group-sm > .btn { @extend .btn-sm; }
|
||||||
|
.btn-group-lg > .btn { @extend .btn-lg; }
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Split button dropdowns
|
||||||
|
//
|
||||||
|
|
||||||
|
.dropdown-toggle-split {
|
||||||
|
padding-right: $btn-padding-x * .75;
|
||||||
|
padding-left: $btn-padding-x * .75;
|
||||||
|
|
||||||
|
&::after,
|
||||||
|
.dropup &::after,
|
||||||
|
.dropright &::after {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropleft &::before {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sm + .dropdown-toggle-split {
|
||||||
|
padding-right: $btn-padding-x-sm * .75;
|
||||||
|
padding-left: $btn-padding-x-sm * .75;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-lg + .dropdown-toggle-split {
|
||||||
|
padding-right: $btn-padding-x-lg * .75;
|
||||||
|
padding-left: $btn-padding-x-lg * .75;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// The clickable button for toggling the menu
|
||||||
|
// Set the same inset shadow as the :active state
|
||||||
|
.btn-group.show .dropdown-toggle {
|
||||||
|
@include box-shadow($btn-active-box-shadow);
|
||||||
|
|
||||||
|
// Show no shadow for `.btn-link` since it has no other button styles.
|
||||||
|
&.btn-link {
|
||||||
|
@include box-shadow(none);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vertical button groups
|
||||||
|
//
|
||||||
|
|
||||||
|
.btn-group-vertical {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
> .btn,
|
||||||
|
> .btn-group {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .btn:not(:first-child),
|
||||||
|
> .btn-group:not(:first-child) {
|
||||||
|
margin-top: -$btn-border-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset rounded corners
|
||||||
|
> .btn:not(:last-child):not(.dropdown-toggle),
|
||||||
|
> .btn-group:not(:last-child) > .btn {
|
||||||
|
@include border-bottom-radius(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .btn:not(:first-child),
|
||||||
|
> .btn-group:not(:first-child) > .btn {
|
||||||
|
@include border-top-radius(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Checkbox and radio options
|
||||||
|
//
|
||||||
|
// In order to support the browser's form validation feedback, powered by the
|
||||||
|
// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
|
||||||
|
// `display: none;` or `visibility: hidden;` as that also hides the popover.
|
||||||
|
// Simply visually hiding the inputs via `opacity` would leave them clickable in
|
||||||
|
// certain cases which is prevented by using `clip` and `pointer-events`.
|
||||||
|
// This way, we ensure a DOM element is visible to position the popover from.
|
||||||
|
//
|
||||||
|
// See https://github.com/twbs/bootstrap/pull/12794 and
|
||||||
|
// https://github.com/twbs/bootstrap/pull/14559 for more information.
|
||||||
|
|
||||||
|
.btn-group-toggle {
|
||||||
|
> .btn,
|
||||||
|
> .btn-group > .btn {
|
||||||
|
margin-bottom: 0; // Override default `<label>` value
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
position: absolute;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,142 @@
|
|||||||
|
// stylelint-disable selector-no-qualifying-type
|
||||||
|
|
||||||
|
//
|
||||||
|
// Base styles
|
||||||
|
//
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
font-family: $btn-font-family;
|
||||||
|
font-weight: $btn-font-weight;
|
||||||
|
color: $body-color;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: if($link-decoration == none, null, none);
|
||||||
|
white-space: $btn-white-space;
|
||||||
|
vertical-align: middle;
|
||||||
|
user-select: none;
|
||||||
|
background-color: transparent;
|
||||||
|
border: $btn-border-width solid transparent;
|
||||||
|
@include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius);
|
||||||
|
@include transition($btn-transition);
|
||||||
|
|
||||||
|
@include hover() {
|
||||||
|
color: $body-color;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus,
|
||||||
|
&.focus {
|
||||||
|
outline: 0;
|
||||||
|
box-shadow: $btn-focus-box-shadow;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disabled comes first so active can properly restyle
|
||||||
|
&.disabled,
|
||||||
|
&:disabled {
|
||||||
|
opacity: $btn-disabled-opacity;
|
||||||
|
@include box-shadow(none);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:disabled):not(.disabled) {
|
||||||
|
cursor: if($enable-pointer-cursor-for-buttons, pointer, null);
|
||||||
|
|
||||||
|
&:active,
|
||||||
|
&.active {
|
||||||
|
@include box-shadow($btn-active-box-shadow);
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Future-proof disabling of clicks on `<a>` elements
|
||||||
|
a.btn.disabled,
|
||||||
|
fieldset:disabled a.btn {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Alternate buttons
|
||||||
|
//
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
.btn-#{$color} {
|
||||||
|
@include button-variant($value, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@each $color, $value in $theme-colors {
|
||||||
|
.btn-outline-#{$color} {
|
||||||
|
@include button-outline-variant($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Link buttons
|
||||||
|
//
|
||||||
|
|
||||||
|
// Make a button look and behave like a link
|
||||||
|
.btn-link {
|
||||||
|
font-weight: $font-weight-normal;
|
||||||
|
color: $link-color;
|
||||||
|
text-decoration: $link-decoration;
|
||||||
|
|
||||||
|
@include hover() {
|
||||||
|
color: $link-hover-color;
|
||||||
|
text-decoration: $link-hover-decoration;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus,
|
||||||
|
&.focus {
|
||||||
|
text-decoration: $link-hover-decoration;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:disabled,
|
||||||
|
&.disabled {
|
||||||
|
color: $btn-link-disabled-color;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
// No need for an active state here
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Button Sizes
|
||||||
|
//
|
||||||
|
|
||||||
|
.btn-lg {
|
||||||
|
@include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-sm {
|
||||||
|
@include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Block button
|
||||||
|
//
|
||||||
|
|
||||||
|
.btn-block {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
// Vertically space out multiple block buttons
|
||||||
|
+ .btn-block {
|
||||||
|
margin-top: $btn-block-spacing-y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specificity overrides
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="button"] {
|
||||||
|
&.btn-block {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,286 @@
|
|||||||
|
//
|
||||||
|
// Base styles
|
||||||
|
//
|
||||||
|
|
||||||
|
.card {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
|
||||||
|
height: $card-height;
|
||||||
|
word-wrap: break-word;
|
||||||
|
background-color: $card-bg;
|
||||||
|
background-clip: border-box;
|
||||||
|
border: $card-border-width solid $card-border-color;
|
||||||
|
@include border-radius($card-border-radius);
|
||||||
|
|
||||||
|
> hr {
|
||||||
|
margin-right: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
> .list-group {
|
||||||
|
border-top: inherit;
|
||||||
|
border-bottom: inherit;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
border-top-width: 0;
|
||||||
|
@include border-top-radius($card-inner-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-bottom-width: 0;
|
||||||
|
@include border-bottom-radius($card-inner-border-radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Due to specificity of the above selector (`.card > .list-group`), we must
|
||||||
|
// use a child selector here to prevent double borders.
|
||||||
|
> .card-header + .list-group,
|
||||||
|
> .list-group + .card-footer {
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body {
|
||||||
|
// Enable `flex-grow: 1` for decks and groups so that card blocks take up
|
||||||
|
// as much space as possible, ensuring footers are aligned to the bottom.
|
||||||
|
flex: 1 1 auto;
|
||||||
|
// Workaround for the image size bug in IE
|
||||||
|
// See: https://github.com/twbs/bootstrap/pull/28855
|
||||||
|
min-height: 1px;
|
||||||
|
padding: $card-spacer-x;
|
||||||
|
color: $card-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
margin-bottom: $card-spacer-y;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-subtitle {
|
||||||
|
margin-top: -$card-spacer-y / 2;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-text:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-link {
|
||||||
|
@include hover() {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ .card-link {
|
||||||
|
margin-left: $card-spacer-x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Optional textual caps
|
||||||
|
//
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
padding: $card-spacer-y $card-spacer-x;
|
||||||
|
margin-bottom: 0; // Removes the default margin-bottom of <hN>
|
||||||
|
color: $card-cap-color;
|
||||||
|
background-color: $card-cap-bg;
|
||||||
|
border-bottom: $card-border-width solid $card-border-color;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
@include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
padding: $card-spacer-y $card-spacer-x;
|
||||||
|
color: $card-cap-color;
|
||||||
|
background-color: $card-cap-bg;
|
||||||
|
border-top: $card-border-width solid $card-border-color;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
@include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Header navs
|
||||||
|
//
|
||||||
|
|
||||||
|
.card-header-tabs {
|
||||||
|
margin-right: -$card-spacer-x / 2;
|
||||||
|
margin-bottom: -$card-spacer-y;
|
||||||
|
margin-left: -$card-spacer-x / 2;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header-pills {
|
||||||
|
margin-right: -$card-spacer-x / 2;
|
||||||
|
margin-left: -$card-spacer-x / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Card image
|
||||||
|
.card-img-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
padding: $card-img-overlay-padding;
|
||||||
|
@include border-radius($card-inner-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img,
|
||||||
|
.card-img-top,
|
||||||
|
.card-img-bottom {
|
||||||
|
flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396
|
||||||
|
width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img,
|
||||||
|
.card-img-top {
|
||||||
|
@include border-top-radius($card-inner-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-img,
|
||||||
|
.card-img-bottom {
|
||||||
|
@include border-bottom-radius($card-inner-border-radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Card deck
|
||||||
|
|
||||||
|
.card-deck {
|
||||||
|
.card {
|
||||||
|
margin-bottom: $card-deck-margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
margin-right: -$card-deck-margin;
|
||||||
|
margin-left: -$card-deck-margin;
|
||||||
|
|
||||||
|
.card {
|
||||||
|
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
|
||||||
|
flex: 1 0 0%;
|
||||||
|
margin-right: $card-deck-margin;
|
||||||
|
margin-bottom: 0; // Override the default
|
||||||
|
margin-left: $card-deck-margin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Card groups
|
||||||
|
//
|
||||||
|
|
||||||
|
.card-group {
|
||||||
|
// The child selector allows nested `.card` within `.card-group`
|
||||||
|
// to display properly.
|
||||||
|
> .card {
|
||||||
|
margin-bottom: $card-group-margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row wrap;
|
||||||
|
// The child selector allows nested `.card` within `.card-group`
|
||||||
|
// to display properly.
|
||||||
|
> .card {
|
||||||
|
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
|
||||||
|
flex: 1 0 0%;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
+ .card {
|
||||||
|
margin-left: 0;
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle rounded corners
|
||||||
|
@if $enable-rounded {
|
||||||
|
&:not(:last-child) {
|
||||||
|
@include border-right-radius(0);
|
||||||
|
|
||||||
|
.card-img-top,
|
||||||
|
.card-header {
|
||||||
|
// stylelint-disable-next-line property-disallowed-list
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
}
|
||||||
|
.card-img-bottom,
|
||||||
|
.card-footer {
|
||||||
|
// stylelint-disable-next-line property-disallowed-list
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-child) {
|
||||||
|
@include border-left-radius(0);
|
||||||
|
|
||||||
|
.card-img-top,
|
||||||
|
.card-header {
|
||||||
|
// stylelint-disable-next-line property-disallowed-list
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
}
|
||||||
|
.card-img-bottom,
|
||||||
|
.card-footer {
|
||||||
|
// stylelint-disable-next-line property-disallowed-list
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Columns
|
||||||
|
//
|
||||||
|
|
||||||
|
.card-columns {
|
||||||
|
.card {
|
||||||
|
margin-bottom: $card-columns-margin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(sm) {
|
||||||
|
column-count: $card-columns-count;
|
||||||
|
column-gap: $card-columns-gap;
|
||||||
|
orphans: 1;
|
||||||
|
widows: 1;
|
||||||
|
|
||||||
|
.card {
|
||||||
|
display: inline-block; // Don't let them vertically span multiple columns
|
||||||
|
width: 100%; // Don't let their width change
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Accordion
|
||||||
|
//
|
||||||
|
|
||||||
|
.accordion {
|
||||||
|
overflow-anchor: none;
|
||||||
|
|
||||||
|
> .card {
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&:not(:last-of-type) {
|
||||||
|
border-bottom: 0;
|
||||||
|
@include border-bottom-radius(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:first-of-type) {
|
||||||
|
@include border-top-radius(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
> .card-header {
|
||||||
|
@include border-radius(0);
|
||||||
|
margin-bottom: -$card-border-width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
// Notes on the classes:
|
||||||
|
//
|
||||||
|
// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)
|
||||||
|
// even when their scroll action started on a carousel, but for compatibility (with Firefox)
|
||||||
|
// we're preventing all actions instead
|
||||||
|
// 2. The .carousel-item-left and .carousel-item-right is used to indicate where
|
||||||
|
// the active slide is heading.
|
||||||
|
// 3. .active.carousel-item is the current slide.
|
||||||
|
// 4. .active.carousel-item-left and .active.carousel-item-right is the current
|
||||||
|
// slide in its in-transition state. Only one of these occurs at a time.
|
||||||
|
// 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
|
||||||
|
// is the upcoming slide in transition.
|
||||||
|
|
||||||
|
.carousel {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel.pointer-event {
|
||||||
|
touch-action: pan-y;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-inner {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
@include clearfix();
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-item {
|
||||||
|
position: relative;
|
||||||
|
display: none;
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
margin-right: -100%;
|
||||||
|
backface-visibility: hidden;
|
||||||
|
@include transition($carousel-transition);
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-item.active,
|
||||||
|
.carousel-item-next,
|
||||||
|
.carousel-item-prev {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-item-next:not(.carousel-item-left),
|
||||||
|
.active.carousel-item-right {
|
||||||
|
transform: translateX(100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-item-prev:not(.carousel-item-right),
|
||||||
|
.active.carousel-item-left {
|
||||||
|
transform: translateX(-100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Alternate transitions
|
||||||
|
//
|
||||||
|
|
||||||
|
.carousel-fade {
|
||||||
|
.carousel-item {
|
||||||
|
opacity: 0;
|
||||||
|
transition-property: opacity;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-item.active,
|
||||||
|
.carousel-item-next.carousel-item-left,
|
||||||
|
.carousel-item-prev.carousel-item-right {
|
||||||
|
z-index: 1;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.active.carousel-item-left,
|
||||||
|
.active.carousel-item-right {
|
||||||
|
z-index: 0;
|
||||||
|
opacity: 0;
|
||||||
|
@include transition(opacity 0s $carousel-transition-duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Left/right controls for nav
|
||||||
|
//
|
||||||
|
|
||||||
|
.carousel-control-prev,
|
||||||
|
.carousel-control-next {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 1;
|
||||||
|
// Use flex for alignment (1-3)
|
||||||
|
display: flex; // 1. allow flex styles
|
||||||
|
align-items: center; // 2. vertically center contents
|
||||||
|
justify-content: center; // 3. horizontally center contents
|
||||||
|
width: $carousel-control-width;
|
||||||
|
color: $carousel-control-color;
|
||||||
|
text-align: center;
|
||||||
|
opacity: $carousel-control-opacity;
|
||||||
|
@include transition($carousel-control-transition);
|
||||||
|
|
||||||
|
// Hover/focus state
|
||||||
|
@include hover-focus() {
|
||||||
|
color: $carousel-control-color;
|
||||||
|
text-decoration: none;
|
||||||
|
outline: 0;
|
||||||
|
opacity: $carousel-control-hover-opacity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.carousel-control-prev {
|
||||||
|
left: 0;
|
||||||
|
@if $enable-gradients {
|
||||||
|
background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.carousel-control-next {
|
||||||
|
right: 0;
|
||||||
|
@if $enable-gradients {
|
||||||
|
background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Icons for within
|
||||||
|
.carousel-control-prev-icon,
|
||||||
|
.carousel-control-next-icon {
|
||||||
|
display: inline-block;
|
||||||
|
width: $carousel-control-icon-width;
|
||||||
|
height: $carousel-control-icon-width;
|
||||||
|
background: 50% / 100% 100% no-repeat;
|
||||||
|
}
|
||||||
|
.carousel-control-prev-icon {
|
||||||
|
background-image: escape-svg($carousel-control-prev-icon-bg);
|
||||||
|
}
|
||||||
|
.carousel-control-next-icon {
|
||||||
|
background-image: escape-svg($carousel-control-next-icon-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Optional indicator pips
|
||||||
|
//
|
||||||
|
// Add an ordered list with the following class and add a list item for each
|
||||||
|
// slide your carousel holds.
|
||||||
|
|
||||||
|
.carousel-indicators {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 15;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding-left: 0; // override <ol> default
|
||||||
|
// Use the .carousel-control's width as margin so we don't overlay those
|
||||||
|
margin-right: $carousel-control-width;
|
||||||
|
margin-left: $carousel-control-width;
|
||||||
|
list-style: none;
|
||||||
|
|
||||||
|
li {
|
||||||
|
box-sizing: content-box;
|
||||||
|
flex: 0 1 auto;
|
||||||
|
width: $carousel-indicator-width;
|
||||||
|
height: $carousel-indicator-height;
|
||||||
|
margin-right: $carousel-indicator-spacer;
|
||||||
|
margin-left: $carousel-indicator-spacer;
|
||||||
|
text-indent: -999px;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: $carousel-indicator-active-bg;
|
||||||
|
background-clip: padding-box;
|
||||||
|
// Use transparent borders to increase the hit area by 10px on top and bottom.
|
||||||
|
border-top: $carousel-indicator-hit-area-height solid transparent;
|
||||||
|
border-bottom: $carousel-indicator-hit-area-height solid transparent;
|
||||||
|
opacity: .5;
|
||||||
|
@include transition($carousel-indicator-transition);
|
||||||
|
}
|
||||||
|
|
||||||
|
.active {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Optional captions
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
.carousel-caption {
|
||||||
|
position: absolute;
|
||||||
|
right: (100% - $carousel-caption-width) / 2;
|
||||||
|
bottom: 20px;
|
||||||
|
left: (100% - $carousel-caption-width) / 2;
|
||||||
|
z-index: 10;
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
color: $carousel-caption-color;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
.close {
|
||||||
|
float: right;
|
||||||
|
@include font-size($close-font-size);
|
||||||
|
font-weight: $close-font-weight;
|
||||||
|
line-height: 1;
|
||||||
|
color: $close-color;
|
||||||
|
text-shadow: $close-text-shadow;
|
||||||
|
opacity: .5;
|
||||||
|
|
||||||
|
// Override <a>'s hover style
|
||||||
|
@include hover() {
|
||||||
|
color: $close-color;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(:disabled):not(.disabled) {
|
||||||
|
@include hover-focus() {
|
||||||
|
opacity: .75;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Additional properties for button version
|
||||||
|
// iOS requires the button element instead of an anchor tag.
|
||||||
|
// If you want the anchor version, it requires `href="#"`.
|
||||||
|
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
|
||||||
|
|
||||||
|
// stylelint-disable-next-line selector-no-qualifying-type
|
||||||
|
button.close {
|
||||||
|
padding: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Future-proof disabling of clicks on `<a>` elements
|
||||||
|
|
||||||
|
// stylelint-disable-next-line selector-no-qualifying-type
|
||||||
|
a.close.disabled {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// Inline code
|
||||||
|
code {
|
||||||
|
@include font-size($code-font-size);
|
||||||
|
color: $code-color;
|
||||||
|
word-wrap: break-word;
|
||||||
|
|
||||||
|
// Streamline the style when inside anchors to avoid broken underline and more
|
||||||
|
a > & {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// User input typically entered via keyboard
|
||||||
|
kbd {
|
||||||
|
padding: $kbd-padding-y $kbd-padding-x;
|
||||||
|
@include font-size($kbd-font-size);
|
||||||
|
color: $kbd-color;
|
||||||
|
background-color: $kbd-bg;
|
||||||
|
@include border-radius($border-radius-sm);
|
||||||
|
@include box-shadow($kbd-box-shadow);
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
padding: 0;
|
||||||
|
@include font-size(100%);
|
||||||
|
font-weight: $nested-kbd-font-weight;
|
||||||
|
@include box-shadow(none);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Blocks of code
|
||||||
|
pre {
|
||||||
|
display: block;
|
||||||
|
@include font-size($code-font-size);
|
||||||
|
color: $pre-color;
|
||||||
|
|
||||||
|
// Account for some code outputs that place code tags in pre tags
|
||||||
|
code {
|
||||||
|
@include font-size(inherit);
|
||||||
|
color: inherit;
|
||||||
|
word-break: normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable scrollable blocks of code
|
||||||
|
.pre-scrollable {
|
||||||
|
max-height: $pre-scrollable-max-height;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user