Update preliminare nuova gest ordini rev
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Version>2.0.2309.0211</Version>
|
||||
<Version>2.0.2309.0408</Version>
|
||||
<Copyright>Egalware 2021+</Copyright>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -25,6 +25,50 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Elenco movimenti x ordine dato suo ID
|
||||
/// </summary>
|
||||
/// <param name="OrdId"></param>
|
||||
public List<AccMovModel> AccMovByOrd(int OrdId)
|
||||
{
|
||||
List<AccMovModel> dbResult = new List<AccMovModel>();
|
||||
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
|
||||
{
|
||||
dbResult = dbCtx
|
||||
.DbSetAccMov
|
||||
.Where(x => (x.OrdId == OrdId))
|
||||
//.Include(e => e.OrderNav)
|
||||
//.Include(e => e.BillNav)
|
||||
.OrderBy(x => x.AccMovId)
|
||||
.ToList();
|
||||
}
|
||||
return dbResult;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elimina movimento associazione (Ord/Fatt) dato suo ID
|
||||
/// </summary>
|
||||
/// <param name="AccMovId"></param>
|
||||
/// <returns></returns>
|
||||
public bool AccMovDelete(int AccMovId)
|
||||
{
|
||||
bool done = false;
|
||||
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
|
||||
{
|
||||
var item2del = dbCtx
|
||||
.DbSetAccMov
|
||||
.Where(x => x.AccMovId == AccMovId)
|
||||
.FirstOrDefault();
|
||||
if (item2del != null)
|
||||
{
|
||||
dbCtx.DbSetAccMov.Remove(item2del);
|
||||
dbCtx.SaveChanges();
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
return done;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiunge un nuovo item Basket
|
||||
/// </summary>
|
||||
@@ -209,7 +253,7 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
|
||||
{
|
||||
dbResult = dbCtx
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Where(x => (x.IdxBillExt == IdxBillExt))
|
||||
.OrderByDescending(x => x.AccMovId)
|
||||
.ToList();
|
||||
@@ -228,7 +272,7 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
using (SHERPABBMContext dbCtx = new SHERPABBMContext(_configuration))
|
||||
{
|
||||
dbResult = dbCtx
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Where(x => (x.OrdId == OrdId))
|
||||
.OrderByDescending(x => x.AccMovId)
|
||||
.ToList();
|
||||
@@ -249,13 +293,13 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
try
|
||||
{
|
||||
var item2del = dbCtx
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Where(x => x.IdxBillExt == IdxBillExt)
|
||||
.ToList();
|
||||
// se trovato --> elimino
|
||||
if (item2del != null)
|
||||
{
|
||||
dbCtx.DbSetBill2Ord.RemoveRange(item2del);
|
||||
dbCtx.DbSetAccMov.RemoveRange(item2del);
|
||||
dbCtx.SaveChanges();
|
||||
}
|
||||
done = true;
|
||||
@@ -281,13 +325,13 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
try
|
||||
{
|
||||
var item2del = dbCtx
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Where(x => x.OrdId == OrdId)
|
||||
.ToList();
|
||||
// se trovato --> elimino
|
||||
if (item2del != null)
|
||||
{
|
||||
dbCtx.DbSetBill2Ord.RemoveRange(item2del);
|
||||
dbCtx.DbSetAccMov.RemoveRange(item2del);
|
||||
dbCtx.SaveChanges();
|
||||
}
|
||||
done = true;
|
||||
@@ -2293,7 +2337,7 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
//.Where(x => (x.DataIns.Year == anno || anno == 0))
|
||||
//.Select(x => x.Importo)
|
||||
//.Sum();
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Include(o => o.BillNav)
|
||||
.Where(x => (x.BillNav.YearRef == anno || anno == 0))
|
||||
.Sum(x => x.Amount);
|
||||
@@ -2316,7 +2360,7 @@ namespace SHERPA.BBM.CORE.Controllers
|
||||
//.Where(x => (x.DataIns.Year == anno || anno == 0))
|
||||
//.Select(x => x.Incassato)
|
||||
//.Sum();
|
||||
.DbSetBill2Ord
|
||||
.DbSetAccMov
|
||||
.Include(o => o.BillNav)
|
||||
.Where(x => (x.BillNav.YearRef == anno || anno == 0))
|
||||
.Sum(x => x.Paid);
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace SHERPA.BBM.CORE.DbModels
|
||||
|
||||
[Column("QtyOff")]
|
||||
public double QtyOff { get; set; } = 1;
|
||||
|
||||
[NotMapped]
|
||||
public double StdPrice
|
||||
{
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace SHERPA.BBM.CORE
|
||||
public virtual DbSet<BillingModel> DbSetBilling { get; set; }
|
||||
public virtual DbSet<BillingExtModel> DbSetBillingExt { get; set; }
|
||||
public virtual DbSet<CustDecodModel> DbSetCustDecod { get; set; }
|
||||
public virtual DbSet<AccMovModel> DbSetBill2Ord { get; set; }
|
||||
public virtual DbSet<AccMovModel> DbSetAccMov { get; set; }
|
||||
public virtual DbSet<NegotTypeModel> DbSetNegotType { get; set; }
|
||||
public virtual DbSet<vBasketsDataModel> DbSetBasketData { get; set; } = null!;
|
||||
public virtual DbSet<vNegotiationsDataModel> DbSetNegotData { get; set; } = null!;
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
<div class="card shadow">
|
||||
<div class="card-header bg-primary text-light">
|
||||
<b>Dettaglio Movimenti</b>
|
||||
</div>
|
||||
<div class="card-body py-0">
|
||||
<div class="row">
|
||||
@if (CurrOrd == null)
|
||||
{
|
||||
<div class="col-12">
|
||||
<LoadingData></LoadingData>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (ListRecords == null || ListRecords.Count == 0)
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="table table-sm table-striped ">
|
||||
<thead>
|
||||
<tr>
|
||||
@if (EnableEdit)
|
||||
{
|
||||
<th></th>
|
||||
}
|
||||
<th class="text-nowrap text-center">Ord</th>
|
||||
<th class="text-nowrap text-center">Fatt</th>
|
||||
<th class="text-right">Importo</th>
|
||||
<th class="text-right">Pagato</th>
|
||||
@if (EnableEdit)
|
||||
{
|
||||
<th></th>
|
||||
}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var record in ListRecords)
|
||||
{
|
||||
<tr class="@CheckSelect(record.AccMovId)">
|
||||
|
||||
@if (EnableEdit)
|
||||
{
|
||||
<td class="text-nowrap">
|
||||
<button class="btn btn-sm btn-info disabled" @onclick="() => Edit(record)"><span class="fas fa-pen"></span></button>
|
||||
</td>
|
||||
}
|
||||
<td class="text-nowrap text-center">
|
||||
@if (record.IsOrdOk)
|
||||
{
|
||||
<i class="fas fa-certificate text-success" title="Ord OK"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<i class="fas fa-certificate text-success" title="Manca Ord"></i>
|
||||
}
|
||||
</td>
|
||||
<td class="text-nowrap text-center">
|
||||
@if(record.IsBillOk)
|
||||
{
|
||||
<i class="fas fa-certificate text-success" title="Fatt OK"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<i class="fas fa-certificate text-success" title="Manca Fatt"></i>
|
||||
}
|
||||
</td>
|
||||
<td class="text-nowrap text-right">
|
||||
<b>@record.Amount.ToString("C2")</b>
|
||||
</td>
|
||||
<td class="text-nowrap text-right">
|
||||
@record.Paid.ToString("C2")
|
||||
</td>
|
||||
@if (EnableEdit)
|
||||
{
|
||||
<td class="text-right">
|
||||
<button class="btn btn-sm btn-danger" @onclick="() => Delete(record)"><span class="oi oi-trash"></span></button>
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,107 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using SHERPA.BBM.CORE.DbModels;
|
||||
using SHERPA.BBM.UI.Data;
|
||||
|
||||
namespace SHERPA.BBM.UI.Components
|
||||
{
|
||||
public partial class AccMov
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public OrderModel? CurrOrd { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public bool EnableEdit { get; set; } = true;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public string CheckSelect(int AccMovId)
|
||||
{
|
||||
string answ = "";
|
||||
if (currItem != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
answ = (currItem.AccMovId == AccMovId) ? "table-info" : "";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected bool IsLoading { get; set; } = false;
|
||||
|
||||
protected List<AccMovModel>? ListRecords { get; set; } = null;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected async Task Delete(AccMovModel currRecord)
|
||||
{
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler eliminare il record? ORD {currRecord.OrdId} | BILL {currRecord.IdxBillExt}' di {currRecord.Amount:C2}?"))
|
||||
return;
|
||||
|
||||
await BBMService.AccMovDelete(currRecord.AccMovId);
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
protected void Edit(AccMovModel currRecord)
|
||||
{
|
||||
currItem = currRecord;
|
||||
}
|
||||
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private AccMovModel? currItem = null;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
[Inject]
|
||||
private BBM_EFService BBMService { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
private IJSRuntime JSRuntime { get; set; } = null!;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private async Task ReloadData()
|
||||
{
|
||||
IsLoading = true;
|
||||
await Task.Delay(1);
|
||||
if (CurrOrd != null)
|
||||
{
|
||||
ListRecords = await BBMService.AccMovByOrd(CurrOrd.OrdId);
|
||||
}
|
||||
else
|
||||
{
|
||||
ListRecords = new List<AccMovModel>();
|
||||
}
|
||||
IsLoading = false;
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,9 @@
|
||||
{
|
||||
@if (ListRecords == null || ListRecords.Count == 0)
|
||||
{
|
||||
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
|
||||
<div class="col-12">
|
||||
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -45,12 +47,11 @@
|
||||
{
|
||||
<td class="text-nowrap">
|
||||
<button class="btn btn-sm btn-info disabled" @onclick="() => Edit(record)"><span class="fas fa-pen"></span></button>
|
||||
@* <button class="btn btn-sm btn-outline-info" @onclick="() => Move(record, 1)"><span class="oi oi-arrow-top"></span></button> <button class="btn btn-sm btn-outline-info" @onclick="() => Move(record, -1)"><span class="oi oi-arrow-bottom"></span></button> *@
|
||||
</td>
|
||||
}
|
||||
<td>
|
||||
<div>
|
||||
@record.ItemNav.UM x <b>@record.QtyOff</b>
|
||||
@record.ItemNav?.UM x <b>@record.QtyOff</b>
|
||||
</div>
|
||||
<div class="small">
|
||||
prev: <b>@record.QtyPrev</b>
|
||||
@@ -58,7 +59,7 @@
|
||||
</td>
|
||||
<td>
|
||||
<div class="font-weight-bold">@record.Note</div>
|
||||
<div class="small">@record.ItemNav.Descript</div>
|
||||
<div class="small">@record.ItemNav?.Descript</div>
|
||||
</td>
|
||||
<td class="text-nowrap text-right">
|
||||
<div>
|
||||
|
||||
@@ -60,14 +60,6 @@ namespace SHERPA.BBM.UI.Components
|
||||
currItem = currRecord;
|
||||
}
|
||||
|
||||
protected void Move(OrderResModel currRecord, int move)
|
||||
{
|
||||
#if false
|
||||
BBMService.ResourceUpdateOrder(currRecord.ResourceId, move);
|
||||
updateTable().ConfigureAwait(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
await ReloadData();
|
||||
|
||||
@@ -152,11 +152,18 @@ else
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
@if (currItem != null && record.Equals(currItem))
|
||||
@if (currItem != null && record.OrdId == currItem.OrdId)
|
||||
{
|
||||
<tr class="table-info">
|
||||
<td colspan="10">
|
||||
<OrdRes CurrOrd="currItem" EnableEdit="EnableRowEdit"></OrdRes>
|
||||
<td colspan="9">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<OrdRes CurrOrd="currItem" EnableEdit="EnableRowEdit"></OrdRes>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<AccMov CurrOrd="currItem" EnableEdit="EnableAccMovEdit"></AccMov>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace SHERPA.BBM.UI.Components
|
||||
|
||||
[Parameter]
|
||||
public bool EnableRowEdit { get; set; } = false;
|
||||
[Parameter]
|
||||
public bool EnableAccMovEdit { get; set; } = false;
|
||||
|
||||
[Parameter]
|
||||
public bool ShowAll { get; set; } = true;
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body p-1">
|
||||
<OrderList CurrFilter="CurrFilter" CurrPagInfo="CurrPagInfo" E_UpdateCount="SetCount" ShowAll="@ShowAll" EnableRowEdit="@EnableRowEdit" ShowDetails="@ShowDet" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket" E_OrdId="SetOrd" E_DictSel="SaveDictSel"></OrderList>
|
||||
<OrderList CurrFilter="CurrFilter" CurrPagInfo="CurrPagInfo" E_UpdateCount="SetCount" ShowAll="@ShowAll" EnableRowEdit="@EnableRowEdit" EnableAccMovEdit="@EnableAccMovEdit" ShowDetails="@ShowDet" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket" E_OrdId="SetOrd" E_DictSel="SaveDictSel"></OrderList>
|
||||
</div>
|
||||
<div class="card-footer py-1">
|
||||
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="SetNumRec" numPageChanged="SetCurrPage" totalCount="totalCount" showLoading="isLoading" />
|
||||
|
||||
@@ -32,6 +32,8 @@ namespace SHERPA.BBM.UI.Components
|
||||
|
||||
[Parameter]
|
||||
public bool EnableRowEdit { get; set; } = false;
|
||||
[Parameter]
|
||||
public bool EnableAccMovEdit { get; set; } = false;
|
||||
|
||||
[Parameter]
|
||||
public bool ShowAll { get; set; } = true;
|
||||
|
||||
@@ -52,6 +52,50 @@ namespace SHERPA.BBM.UI.Data
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Elenco movimenti x ordine dato suo ID
|
||||
/// </summary>
|
||||
/// <param name="OrdId"></param>
|
||||
public Task<List<AccMovModel>> AccMovByOrd(int OrdId)
|
||||
{
|
||||
string source = "DB";
|
||||
List<AccMovModel>? dbResult = new List<AccMovModel>();
|
||||
string currKey = $"{rKeyOrderDet}:AccMov:{OrdId}";
|
||||
Stopwatch stopWatch = new Stopwatch();
|
||||
stopWatch.Start();
|
||||
string? rawData = redisDb.StringGet(currKey);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
source = "REDIS";
|
||||
dbResult = JsonConvert.DeserializeObject<List<AccMovModel>>(rawData);
|
||||
}
|
||||
else
|
||||
{
|
||||
dbResult = dbController.AccMovByOrd(OrdId);
|
||||
rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
|
||||
redisDb.StringSet(currKey, rawData, LongCache);
|
||||
}
|
||||
if (dbResult == null)
|
||||
{
|
||||
dbResult = new List<AccMovModel>();
|
||||
}
|
||||
stopWatch.Stop();
|
||||
LogDebug($"AccMovByOrd | {source} ", stopWatch.Elapsed);
|
||||
return Task.FromResult(dbResult);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Elimina movimento associazione (Ord/Fatt) dato suo ID
|
||||
/// </summary>
|
||||
/// <param name="AccMovId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> AccMovDelete(int AccMovId)
|
||||
{
|
||||
bool answ = dbController.AccMovDelete(AccMovId);
|
||||
await FlushRedisCache();
|
||||
return answ;
|
||||
}
|
||||
|
||||
public async Task BasketsAdd(BasketsModel newItem)
|
||||
{
|
||||
try
|
||||
@@ -1519,7 +1563,31 @@ namespace SHERPA.BBM.UI.Data
|
||||
/// <param name="OrdId"></param>
|
||||
public Task<List<OrderResModel>> OrdResourcesByOrd(int OrdId)
|
||||
{
|
||||
return Task.FromResult(dbController.OrdResourcesByOrd(OrdId));
|
||||
string source = "DB";
|
||||
List<OrderResModel>? dbResult = new List<OrderResModel>();
|
||||
string currKey = $"{rKeyOrderDet}:OrdRes:{OrdId}";
|
||||
Stopwatch stopWatch = new Stopwatch();
|
||||
stopWatch.Start();
|
||||
//string? rawData = await redisDb.StringGetAsync(currKey);
|
||||
string? rawData = redisDb.StringGet(currKey);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
source = "REDIS";
|
||||
dbResult = JsonConvert.DeserializeObject<List<OrderResModel>>(rawData);
|
||||
}
|
||||
else
|
||||
{
|
||||
dbResult = dbController.OrdResourcesByOrd(OrdId);
|
||||
rawData = JsonConvert.SerializeObject(dbResult, JSSettings);
|
||||
redisDb.StringSet(currKey, rawData, LongCache);
|
||||
}
|
||||
if (dbResult == null)
|
||||
{
|
||||
dbResult = new List<OrderResModel>();
|
||||
}
|
||||
stopWatch.Stop();
|
||||
LogDebug($"OrdResourcesByOrd | {source} ", stopWatch.Elapsed);
|
||||
return Task.FromResult(dbResult);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -2006,8 +2074,8 @@ namespace SHERPA.BBM.UI.Data
|
||||
|
||||
private const string rKeyListSel = $"{redisBaseAddr}:Cache:ListSel";
|
||||
|
||||
private const string rKeyOrderDet = $"{redisBaseAddr}:Cache:OrderDet";
|
||||
private const string rKeyOrders = $"{redisBaseAddr}:Cache:Orders";
|
||||
|
||||
private const string rKeyResoconti = $"{redisBaseAddr}:Cache:Resoconti";
|
||||
|
||||
private static IConfiguration _configuration = null!;
|
||||
|
||||
@@ -13,7 +13,7 @@ else
|
||||
<OrderFilt FilterUpdated="SetFilter" Title="Gestione Ordini" ShowMultiSel="false" SelCustId="SelCustId" SelBaskId="SelBaskId" SelYearRef="SelYear" SelDocId="SelDocId"></OrderFilt>
|
||||
</div>
|
||||
<div class="card-body p-1">
|
||||
<OrdersCard CurrFilter="SelectData" ShowAll="true" EnableRowEdit="true" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket"></OrdersCard>
|
||||
<OrdersCard CurrFilter="SelectData" ShowAll="true" EnableRowEdit="true" EnableAccMovEdit="true" E_SelCustomerId="SetCustomer" E_SelBasketId="SetBasket"></OrdersCard>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<UserSecretsId>60fcdaab-6c1e-4bec-9d88-f7727ef1c12c</UserSecretsId>
|
||||
<ApplicationIcon>wwwroot\favicon.ico</ApplicationIcon>
|
||||
<Version>2.0.2309.0211</Version>
|
||||
<Version>2.0.2309.0408</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Copyright>Egalware 2021+</Copyright>
|
||||
|
||||
Reference in New Issue
Block a user