Fix filtro company in testata

This commit is contained in:
Samuele Locatelli
2023-06-01 18:44:04 +02:00
parent 811c121441
commit 588a31cb00
14 changed files with 215 additions and 135 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>WebDoorCreator - Egalware</i>
<h4>Version: 0.9.2306.0117</h4>
<h4>Version: 0.9.2306.0118</h4>
<br /> Release note:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
0.9.2306.0117
0.9.2306.0118
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>0.9.2306.0117</version>
<version>0.9.2306.0118</version>
<url>http://nexus.steamware.net/repository/SWS/WDC/stable/WDC.UI.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/WDC/stable/ChangeLog.html</changelog>
<mandatory>false</mandatory>
@@ -20,28 +20,38 @@
}
<div class="d-flex justify-content-between">
<div class=" py-1">
@if (isAddNew)
{
<div>
<button @onclick="()=>createDoor()">AO</button>
<button @onclick="()=>showModalTpl()">CI</button>
</div>
}
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> showAddNew())" ObjId="-1" ItemName="Add new door" ItemCount="0" ShowPlus="true" ImagePath="images/icons/PlusWhite.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> recalcSVGs())" ObjId="-2" ItemName="Recalc all the SVGs" ItemCount="0" ShowPlus="true" ImagePath="images/icons/arrows-rotate-solid.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> reportUrl(currOrderId))" ObjId="-3" ItemName="Get the order estimate" ItemCount="0" ShowPlus="true" ImagePath="images/icons/file-pdf-regular.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" ObjId="-4" ItemName="Calculate total cost" ItemCount="0" ShowPlus="true" ImagePath="images/icons/calculator-solid.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> sendToCompany(currOrderId, orderStatus))" ObjId="-5" ItemName="Send to DCA" ItemCount="0" ShowPlus="true" ImagePath="images/icons/angles-right-solid.svg"></HwSvgObj>
</div>
@if (isAddNew)
{
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> ToggleAddNew())" ObjId="ToggleHide" ItemName="Close Add New" ItemCount="0" ShowPlus="true" ImagePath="images/icons/angles-left-solid.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> createDoor())" ObjId="NewEmpty" ItemName="New Empty" ItemCount="0" ShowPlus="true" ImagePath="images/icons/file.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> showModalTpl())" ObjId="Template" ItemName="Clone from Template" ItemCount="0" ShowPlus="true" ImagePath="images/icons/clone.svg"></HwSvgObj>
</div>
<div class=" py-1 w-50">
</div>
}
else
{
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> ToggleAddNew())" ObjId="ToggleShow" ItemName="Add new door" ItemCount="0" ShowPlus="true" ImagePath="images/icons/PlusWhite.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> recalcSVGs())" ObjId="Svg" ItemName="Recalc all the SVGs" ItemCount="0" ShowPlus="true" ImagePath="images/icons/arrows-rotate-solid.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> reportUrl(currOrderId))" ObjId="Report" ItemName="Get the order estimate" ItemCount="0" ShowPlus="true" ImagePath="images/icons/file-pdf-regular.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" ObjId="Calc" ItemName="Calculate total cost" ItemCount="0" ShowPlus="true" ImagePath="images/icons/calculator-solid.svg"></HwSvgObj>
</div>
<div class=" py-1">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> sendToCompany(currOrderId, orderStatus))" ObjId="-5" ItemName="Send to DCA" ItemCount="0" ShowPlus="true" ImagePath="images/icons/angles-right-solid.svg"></HwSvgObj>
</div>
}
</div>
}
<div class="row">
@@ -28,6 +28,7 @@ namespace WebDoorCreator.UI.Components.DoorMan
[Parameter]
public EventCallback<int> updateRecordCount { get; set; }
public string userId
{
get
@@ -48,13 +49,19 @@ namespace WebDoorCreator.UI.Components.DoorMan
protected Dictionary<string, string> AddDoorDict { get; set; } = new Dictionary<string, string>();
protected Dictionary<string, string> AddFromTemplDict { get; set; } = new Dictionary<string, string>();
protected DoorModel? currDoor { get; set; } = null;
protected List<DoorOpModel>? DoorOpsList { get; set; } = null;
protected List<DoorModel>? DoorsList { get; set; } = null;
protected bool isAddNew { get; set; } = false;
protected bool isAddRemMode { get; set; }
protected bool IsChanged { get; set; } = false;
protected bool isCloneMode { get; set; }
protected bool isRecalc { get; set; } = false;
protected bool isTpl { get; set; } = false;
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
@@ -62,14 +69,15 @@ namespace WebDoorCreator.UI.Components.DoorMan
protected NavigationManager NavManager { get; set; } = null!;
protected int orderStatus { get; set; } = 10;
[Inject]
protected QueueDataService QDService { get; set; } = null!;
protected Dictionary<string, string> SendOrderDict { get; set; } = new Dictionary<string, string>();
[Inject]
protected WDCUserService WDCUService { get; set; } = null!;
[Inject]
protected QueueDataService QDService { get; set; } = null!;
[Inject]
protected WebDoorCreatorService WDService { get; set; } = null!;
@@ -77,8 +85,6 @@ namespace WebDoorCreator.UI.Components.DoorMan
#region Protected Methods
protected DoorModel? currDoor { get; set; } = null;
protected async Task catchDoorChange(bool isChanged)
{
await Task.Delay(1);
@@ -87,13 +93,6 @@ namespace WebDoorCreator.UI.Components.DoorMan
{
await ReloadData();
}
}
protected async Task modalClose(bool isClose)
{
await Task.Delay(1);
isTpl = isClose;
await ReloadData();
}
protected async Task createDoor()
@@ -106,52 +105,6 @@ namespace WebDoorCreator.UI.Components.DoorMan
await E_CurrDoor.InvokeAsync(door);
}
}
protected async Task showAddNew()
{
await Task.Delay(1);
isAddNew = !isAddNew;
}
protected async Task showModalTpl()
{
await Task.Delay(1);
isTpl = true;
}
protected bool isTpl { get; set; } = false;
protected bool isAddNew { get; set; } = false;
protected bool isRecalc { get; set; } = false;
protected async void recalcSVGs()
{
isRecalc = true;
// recupero elenco porte come list interi...
if (DoorsList != null && DoorsList.Count > 0)
{
List<string> doorIdList = DoorsList
.Select(x => $"{x.DoorId}")
.ToList();
// chiamo reset
var list2Proc = await QDService.ResetQueueByDoorList(doorIdList);
// se ho porte da processare --> chiamo save...
string currDDF = "";
int currDoorId = 0;
int currVers = 0;
foreach (var item in list2Proc)
{
currDoorId = 0;
currVers = 0;
int.TryParse(item, out currDoorId);
if (currDoorId > 0)
{
currDDF = await WDService.DoorOpGetDDF(currDoorId);
// versione corrente del DDF generato
currVers = await QDService.SendCalcReq(currDoorId, currDDF);
}
}
}
isRecalc = false;
await InvokeAsync(StateHasChanged);
NavManager.NavigateTo(NavManager.Uri, true);
}
protected async Task deleteRecord(DoorModel currRec)
{
@@ -163,7 +116,6 @@ namespace WebDoorCreator.UI.Components.DoorMan
await ReloadData();
}
/// <summary>
/// Path del servizio di recupero SVG delle porte
/// </summary>
@@ -205,8 +157,7 @@ namespace WebDoorCreator.UI.Components.DoorMan
break;
case DoorSvgObj.ActionReq.ReqOptions:
// TODO
// aprire la modale di editing...
// TODO aprire la modale di editing...
await setModalShow(currAct.DoorId);
break;
@@ -218,6 +169,7 @@ namespace WebDoorCreator.UI.Components.DoorMan
break;
}
}
protected async Task getBackStatus()
{
await Task.Delay(1);
@@ -228,6 +180,13 @@ namespace WebDoorCreator.UI.Components.DoorMan
await ReloadData();
}
protected async Task modalClose(bool isClose)
{
await Task.Delay(1);
isTpl = isClose;
await ReloadData();
}
protected override async Task OnParametersSetAsync()
{
await ReloadData();
@@ -243,6 +202,39 @@ namespace WebDoorCreator.UI.Components.DoorMan
await ReloadData();
}
protected async void recalcSVGs()
{
isRecalc = true;
// recupero elenco porte come list interi...
if (DoorsList != null && DoorsList.Count > 0)
{
List<string> doorIdList = DoorsList
.Select(x => $"{x.DoorId}")
.ToList();
// chiamo reset
var list2Proc = await QDService.ResetQueueByDoorList(doorIdList);
// se ho porte da processare --> chiamo save...
string currDDF = "";
int currDoorId = 0;
int currVers = 0;
foreach (var item in list2Proc)
{
currDoorId = 0;
currVers = 0;
int.TryParse(item, out currDoorId);
if (currDoorId > 0)
{
currDDF = await WDService.DoorOpGetDDF(currDoorId);
// versione corrente del DDF generato
currVers = await QDService.SendCalcReq(currDoorId, currDDF);
}
}
}
isRecalc = false;
await InvokeAsync(StateHasChanged);
NavManager.NavigateTo(NavManager.Uri, true);
}
protected async Task ReloadData()
{
// 2023.05.26 - report inserito come servizio nell'app
@@ -251,7 +243,7 @@ namespace WebDoorCreator.UI.Components.DoorMan
if (confData != null)
{
reportBaseUrl = confData.valore;
}
}
#endif
if (!AddDoorDict.ContainsKey("ADD NEW DOOR"))
@@ -290,6 +282,18 @@ namespace WebDoorCreator.UI.Components.DoorMan
}
}
/// <summary>
/// Path del servizio di recupero report in PDF
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
protected async Task reportUrl(int orderId)
{
var url = $"api/Report/GetOrderReport?OrderId={orderId}&Format=PDF";
// chiamo apertura via jscript in target _blank
await JSRuntime.InvokeAsync<object>("open", url, "_blank");
}
protected async void sendToCompany(int ordId, int orderStat)
{
if (orderStat == 10)
@@ -318,6 +322,13 @@ namespace WebDoorCreator.UI.Components.DoorMan
}
}
}
protected async Task showModalTpl()
{
await Task.Delay(1);
isTpl = true;
}
/// <summary>
/// Prepara il dictionary dei testi da riportare nell'oggetto ordine
/// </summary>
@@ -327,11 +338,17 @@ namespace WebDoorCreator.UI.Components.DoorMan
{
Dictionary<string, string> answ = new Dictionary<string, string>();
answ.Add($"D.{door.DoorId}", $"x {door.Quantity}");
answ.Add($"{door.DoorExtCode} {door.DoorDescript}","");
answ.Add($"{door.DoorExtCode} {door.DoorDescript}", "");
answ.Add("Unit Price", $"{(door.Quantity * door.UnitCost):C2}");
return answ;
}
protected async Task ToggleAddNew()
{
await Task.Delay(1);
isAddNew = !isAddNew;
}
#endregion Protected Methods
#region Private Properties
@@ -370,18 +387,5 @@ namespace WebDoorCreator.UI.Components.DoorMan
}
#endregion Private Properties
/// <summary>
/// Path del servizio di recupero report in PDF
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
protected async Task reportUrl(int orderId)
{
var url = $"api/Report/GetOrderReport?OrderId={orderId}&Format=PDF";
// chiamo apertura via jscript in target _blank
await JSRuntime.InvokeAsync<object>("open", url, "_blank");
}
}
}
@@ -5,7 +5,7 @@
<div id="mySidenav" class="sidenav">
<a class="closebtn" @onclick="()=>closeMenu()">&times;</a>
<span class="fs-3">ORDER FILTERS</span>
<AuthorizeView Roles="SuperAdmin, DcaAdmin, DcaProj, DcaOrdMan, CompAdmin">
@*<AuthorizeView Roles="SuperAdmin, DcaAdmin, DcaProj, DcaOrdMan, CompAdmin">
<Authorized>
<div class="p-2">
<div class="form-floating col ps-1">
@@ -34,8 +34,7 @@
</div>
</Authorized>
</AuthorizeView>
</AuthorizeView>*@
<div class="p-2">
<div class="form-floating col ps-1">
<input id="dateFrom" @bind="@dateFrom" type="date" class="form-control" />
@@ -48,11 +47,8 @@
<label for="dateTo">Date To</label>
</div>
</div>
</div>
}
<div class="d-flex justify-content-between">
<div class="p-2">
<div class="form-floating col ps-1">
@@ -46,10 +46,43 @@
</div>
</div>
@if (WDCUService.userCurrComp > 0)
{
<button class="btn btn-secondary btn-sm">@getCurrCompName()</button>
}
<AuthorizeView Roles="SuperAdmin, DcaAdmin, DcaProj, DcaOrdMan, CompAdmin" Context="MenuHide">
<Authorized>
<div class="p-2">
<div class="form-floating col ps-1">
@if (listCompanies != null)
{
@if (listCompanies.Count > 1)
{
<select @bind="userCurrCompany" class="form-select form-select-sm">
<option value="0">-- All COMPANIES --</option>
@foreach (var item in listCompanies)
{
<option value="@item.CompanyId">@item.CompanyName</option>
}
</select>
}
else
{
@if (compToShow != null)
{
<input class="form-control form-control-sm" value="@compToShow.CompanyName" disabled />
}
}
}
<label for="company">Company</label>
</div>
</div>
</Authorized>
<NotAuthorized>
@if (WDCUService.userCurrComp > 0)
{
<button class="btn btn-secondary btn-sm">@getCurrCompName()</button>
}
</NotAuthorized>
</AuthorizeView>
<div class="text-end text-nowrap px-3">
<div class="dropdown">
<a class="btn btn-primary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
@@ -23,8 +23,6 @@ namespace WebDoorCreator.UI.Components.Order
[Parameter]
public OrderStatusViewModel? OrderView { get; set; }
protected List<int> pageSizeList { get; set; } = new List<int>() { 4,8,12,16,20,24,28,64 };
public string userId
{
get
@@ -44,11 +42,8 @@ namespace WebDoorCreator.UI.Components.Order
#region Protected Properties
protected DoorModel? currDoor { get; set; } = null;
protected int currDoorType { get; set; } = 0;
protected DDFDto CurrentConf { get; set; } = new DDFDto();
protected DoorsSelectFilter currFilter { get; set; } = new DoorsSelectFilter();
/// <summary>
@@ -57,18 +52,15 @@ namespace WebDoorCreator.UI.Components.Order
protected string currMeaUnit { get; set; } = "mm";
protected List<DoorModel>? DoorsList { get; set; } = null;
protected WebDoorCreator.Data.DbModels.Edges edgesFirstInst { get; set; } = new WebDoorCreator.Data.DbModels.Edges();
protected int idOrd { get; set; } = -1;
[Inject]
protected NavigationManager NavManager { get; set; } = null!;
protected int orderStat { get; set; } = -1;
protected OrderStatusViewModel? OrderStatus { get; set; } = null;
protected List<int> pageSizeList { get; set; } = new List<int>() { 4, 8, 12, 16, 20, 24, 28, 64 };
protected string stepColor { get; set; } = "";
protected int totalCount { get; set; }
@@ -103,6 +95,7 @@ namespace WebDoorCreator.UI.Components.Order
protected void ForceReload(int newNum)
{
numRecord = newNum;
currPage = 1;
}
protected void ForceReloadPage(int newNum)
@@ -110,28 +103,20 @@ namespace WebDoorCreator.UI.Components.Order
currPage = newNum;
}
//protected override async Task OnParametersSetAsync()
//{
// await Task.Delay(1);
//}
protected override void OnInitialized()
{
numRecord = 12;
//base.OnInitialized();
numRecord = 16;
}
protected async Task SetCurrDoor(DoorModel door)
{
await Task.Delay(1);
//currDoor = door;
await E_SendDoor.InvokeAsync(door);
}
protected async Task SetCurrDoorModal(DoorModel door)
{
await Task.Delay(1);
//currDoor = door;
await E_SendDoorModal.InvokeAsync(door);
}
@@ -8,8 +8,10 @@ else
<thead>
<tr class="">
<td></td>
<th>Order Date <Sorter ParamName="OrderDate" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Order Number <Sorter ParamName="OrderNumber" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Order Date <Sorter ParamName="OrderDate" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Promised Date <Sorter ParamName="OrderDate" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Company</th>
<th>Order Description</th>
<th class="text-end">Quantity</th>
<th class="text-end">Model Number</th>
@@ -27,8 +29,10 @@ else
<button class="btn btn-sm btn-info" @onclick="()=>cloneAndShow(item.OrderId)" title="Duplicate Order"><i class="fa-solid fa-clone"></i></button>
<a class="btn btn-sm btn-success" target="_blank" href="@reportUrl(item.OrderId)" title="Download pdf report"><i class="fa-regular fa-file-pdf"></i></a>
</td>
<td class="small">@item.DateIns</td>
<td class="fw-bold">@item.OrderExtCode</td>
<td class="small">@item.DateIns</td>
<td class="small">@item.DateIns</td>
<td class="small">@item.CompanyId</td>
<td class="small">@item.OrderDescript</td>
<td class="text-end">@item.NumDoors</td>
<td class="text-end">@item.NumType</td>
@@ -14,9 +14,6 @@
<div style="width: 17rem; height: 5rem">
@if (userCurrCompany > 0)
{
@*<button type="button" class="btn btn-sm btn-success" @onclick="() => ReqNewOrd()">
<i class="fa-solid fa-plus"></i> Add new order
</button>*@
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> ReqNewOrd())" ObjId="-1" ItemName="Add new order" ItemCount="0" ShowPlus="true" ImagePath="images/icons/PlusWhite.svg"></HwSvgObj>
}
</div>
+40 -1
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>0.9.2306.0117</Version>
<Version>0.9.2306.0118</Version>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>aspnet-WebDoorCreator.UI-dfe95fed-1398-4144-bd43-8b3a765d6608</UserSecretsId>
</PropertyGroup>
@@ -74,6 +74,45 @@
<None Include="Properties\PublishProfiles\IISProfile.pubxml.user" />
</ItemGroup>
<ItemGroup>
<Content Update="wwwroot\images\icons\angles-left-solid.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\angles-right-solid.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\arrows-rotate-solid.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\calculator-solid.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\clipboard-regular.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\clone.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\Exit.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\ExitWhite.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\file-pdf-regular.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\file.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\Plus.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
<Content Update="wwwroot\images\icons\PlusWhite.svg">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="Reports\ReportOrder.rdlc">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256 246.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160zm352-160l-160 160c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L301.3 256 438.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0z"/>
</svg>

After

Width:  |  Height:  |  Size: 586 B

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path d="M288 448H64V224h64V160H64c-35.3 0-64 28.7-64 64V448c0 35.3 28.7 64 64 64H288c35.3 0 64-28.7 64-64V384H288v64zm-64-96H448c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64H224c-35.3 0-64 28.7-64 64V288c0 35.3 28.7 64 64 64z"/>
</svg>

After

Width:  |  Height:  |  Size: 470 B

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512">
<!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. -->
<path d="M320 464c8.8 0 16-7.2 16-16V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320zM0 64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V64z"/>
</svg>

After

Width:  |  Height:  |  Size: 508 B