diff --git a/FruitBank.Common/Dtos/StockQuantityHistoryDto.cs b/FruitBank.Common/Dtos/StockQuantityHistoryDto.cs new file mode 100644 index 0000000..751d6df --- /dev/null +++ b/FruitBank.Common/Dtos/StockQuantityHistoryDto.cs @@ -0,0 +1,49 @@ +using FruitBank.Common.Interfaces; +using LinqToDB.Mapping; +using Mango.Nop.Core.Dtos; +using Mango.Nop.Core.Entities; +using Mango.Nop.Core.Interfaces; +using Newtonsoft.Json; +using Nop.Core.Domain.Catalog; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FruitBank.Common.Dtos +{ + public class StockQuantityHistoryDto : MgStockQuantityHistoryDto, IStockQuantityHistoryDto + { + [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] + public int? StockQuantityHistoryId + { + get => StockQuantityHistoryExt?.StockQuantityHistoryId; + set => StockQuantityHistoryExt!.StockQuantityHistoryId = value!.Value; + } + + [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] + public double? NetWeightAdjustment + { + get => StockQuantityHistoryExt?.NetWeightAdjustment; + set => StockQuantityHistoryExt!.NetWeightAdjustment = value; + } + + [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] + public double? NetWeight + { + get => StockQuantityHistoryExt?.NetWeight; + set => StockQuantityHistoryExt!.NetWeight = value; + } + + [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] + public bool IsInconsistent + { + get => StockQuantityHistoryExt?.IsInconsistent ?? false; + set => StockQuantityHistoryExt!.IsInconsistent = value; + } + + [Association(ThisKey = nameof(Id), OtherKey = nameof(StockQuantityHistoryExt.StockQuantityHistoryId), CanBeNull = true)] + public StockQuantityHistoryExt? StockQuantityHistoryExt { get; set; } + } +} diff --git a/FruitBank.Common/Entities/StockQuantityHistoryExt.cs b/FruitBank.Common/Entities/StockQuantityHistoryExt.cs new file mode 100644 index 0000000..20ab928 --- /dev/null +++ b/FruitBank.Common/Entities/StockQuantityHistoryExt.cs @@ -0,0 +1,38 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; +using FruitBank.Common; +using FruitBank.Common.Interfaces; +using LinqToDB; +using LinqToDB.Mapping; +using Nop.Core.Domain.Catalog; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Mango.Nop.Core.Entities +{ + public interface IStockQuantityHistoryExt : IEntityInt + { + public int StockQuantityHistoryId { get; set; } + public double? NetWeightAdjustment { get; set; } + public double? NetWeight { get; set; } + public bool IsInconsistent { get; set; } + } + + [Table(Name = FruitBankConstClient.StockQuantityHistoryExtDbTableName)] + [System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.StockQuantityHistoryExtDbTableName)] + public class StockQuantityHistoryExt : MgEntityBase, IStockQuantityHistoryExt + { + public int StockQuantityHistoryId { get; set; } + + [Column(DataType = DataType.DecFloat, CanBeNull = true)] + public double? NetWeightAdjustment { get; set; } + + [Column(DataType = DataType.DecFloat, CanBeNull = true)] + public double? NetWeight { get; set; } + + public bool IsInconsistent { get; set; } + } +} diff --git a/FruitBank.Common/FruitBankConstClient.cs b/FruitBank.Common/FruitBankConstClient.cs index 25d7b36..ebf2096 100644 --- a/FruitBank.Common/FruitBankConstClient.cs +++ b/FruitBank.Common/FruitBankConstClient.cs @@ -35,6 +35,9 @@ public static class FruitBankConstClient public const string ShippingItemPalletDbTableName = "fbShippingItemPallet"; public const string ShippingDocumentDbTableName = "fbShippingDocument"; public const string ShippingDocumentToFilesDbTableName = "fbShippingDocumentToFiles"; + + public const string StockQuantityHistoryExtDbTableName = "fbStockQuantityHistoryExt"; + //public static Guid[] DevAdminIds = new Guid[2] { Guid.Parse("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd"), Guid.Parse("4cbaed43-2465-4d99-84f1-c8bc6b7025f7") }; //public static Guid[] SysAdmins = new Guid[3] diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs index aaf727f..7786f2b 100644 --- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs +++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs @@ -56,6 +56,9 @@ public interface IFruitBankDataControllerCommon //public Task?> GetAllMeasuringProductDtos(); public Task GetProductDtoById(int productId); + public Task?> GetStockQuantityHistoryDtos(); + public Task?> GetStockQuantityHistoryDtosByProductId(int productId); + #endregion Product Task LoginMeasuringUser(MgLoginModelRequest loginModelRequest); diff --git a/FruitBank.Common/Interfaces/IStockQuantityHistoryDto.cs b/FruitBank.Common/Interfaces/IStockQuantityHistoryDto.cs new file mode 100644 index 0000000..b583778 --- /dev/null +++ b/FruitBank.Common/Interfaces/IStockQuantityHistoryDto.cs @@ -0,0 +1,22 @@ +using FruitBank.Common.Dtos; +using Mango.Nop.Core.Dtos; +using Mango.Nop.Core.Entities; +using Mango.Nop.Core.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FruitBank.Common.Interfaces +{ + public interface IStockQuantityHistoryDto : IMgTStockQuantityHistoryDto//, IStockQuantityHistoryExt + { + public int? StockQuantityHistoryId { get; set; } + public double? NetWeightAdjustment { get; set; } + public double? NetWeight { get; set; } + public bool IsInconsistent { get; set; } + + public StockQuantityHistoryExt? StockQuantityHistoryExt { get; set; } + } +} diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs index d926fdb..7d2680d 100644 --- a/FruitBank.Common/SignalRs/SignalRTags.cs +++ b/FruitBank.Common/SignalRs/SignalRTags.cs @@ -72,6 +72,9 @@ public class SignalRTags : AcSignalRTags public const int AddOrUpdateMeasuredOrderItemPallet = 137; public const int AddOrUpdateMeasuredOrderItemPallets = 138; + public const int GetStockQuantityHistoryDtos = 150; + public const int GetStockQuantityHistoryDtosByProductId = 151; + public const int AuthenticateUser = 195; public const int RefreshToken = 200; diff --git a/FruitBankHybrid.Shared.Tests/OrderClientTests.cs b/FruitBankHybrid.Shared.Tests/OrderClientTests.cs index 5dae576..300ad51 100644 --- a/FruitBankHybrid.Shared.Tests/OrderClientTests.cs +++ b/FruitBankHybrid.Shared.Tests/OrderClientTests.cs @@ -67,7 +67,7 @@ public sealed class OrderClientTests [TestMethod] public async Task GetPendingOrderDtosForMeasuring() { - var orderDtosForMeasuring = await _signalRClient.GetPendingOrderDtosForMeasuring(999); + var orderDtosForMeasuring = await _signalRClient.GetPendingOrderDtosForMeasuring(9999); Assert.IsNotNull(orderDtosForMeasuring); //Assert.IsTrue(orderDtosForMeasuring.Any(x=>x.Id ==51)); diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor index 858bbb6..ee22bad 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor @@ -47,7 +47,12 @@ } - + + @{ + // var orderItemPalletDtos = orderDto?.OrderItemDtos.SelectMany(oi => oi.OrderItemPallets).ToList() ?? []; + // + } + } diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index df82299..639a476 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -3,6 +3,7 @@ @using DevExpress.Internal.About @using FruitBank.Common.Dtos @using FruitBank.Common.Models +@using FruitBankHybrid.Shared.Components.Grids.Products @using FruitBankHybrid.Shared.Components.Toolbars @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.SignalRs @@ -30,7 +31,7 @@ { var productId = ((ProductDto)context.DataItem).Id; - + @{ //GetOrderDtosFromDbAsync(productId).Forget(); @@ -44,7 +45,15 @@ //var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? []; } + + + @{ + //GetOrderItemDtosFromDbAsync(productId).Forget(); + //var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? []; + var contextIds = new[] { (object)((ProductDto)(context.DataItem)).Id }; + + } } @@ -52,7 +61,7 @@ @if (IsMasterGrid) { - + } @@ -70,6 +79,7 @@ private readonly Dictionary> _orderDtosByProductId = new(); private readonly Dictionary> _orderItemDtosByProductId = new(); + public GridProductDto Grid { get; set; } [Parameter] public bool IsMasterGrid { get; set; } = false; @@ -147,7 +157,7 @@ protected async Task OnActiveTabChanged(int activeTabIndex, int productId) { _activeTabIndex = activeTabIndex; - + switch (_activeTabIndex) { case 0: diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index 367a64e..be2f607 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -2,6 +2,7 @@ @using FruitBank.Common.Dtos @using FruitBank.Common.Entities @using FruitBankHybrid.Shared.Components.FileUploads +@using FruitBankHybrid.Shared.Components.Toolbars @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.SignalRs @using System.Text @@ -19,13 +20,13 @@ + ValueFieldName="Id" + TextFieldName="Name" + DropDownBodyCssClass="dd-body-class" + ListRenderMode="ListRenderMode.Entire" + SearchMode="ListSearchMode.AutoSearch" + SearchFilterCondition="ListSearchFilterCondition.Contains" + ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"> @@ -44,11 +45,11 @@ SearchMode="ListSearchMode.AutoSearch" SearchFilterCondition="ListSearchFilterCondition.Contains" ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"> - + - + - + @@ -58,11 +59,11 @@ - + - - + + @@ -87,31 +88,20 @@ @if (IsMasterGrid) { - - - - - - - - - - - - - - - + + @* *@ - + + } diff --git a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor index f35ce9d..f95a4ec 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor @@ -18,8 +18,8 @@ ValidationEnabled="false" EditMode="GridEditMode.EditRow" EditModelSaving="Grid_EditModelSaving" FocusedRowChanged="Grid_FocusedRowChanged" *@ - @* - + @* *@ @code { @@ -130,13 +130,13 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@ string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; const string ExportFileName = "ExportResult"; - string _localStorageKey = "GridShippingDocument_"; + string _localStorageKey = "GridShippingItem_"; string GridSearchText = ""; bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } - public GridShippingItemBase Grid { get; set; } + public GridShippingItem Grid { get; set; } private LoggerClient _logger; protected override async Task OnInitializedAsync() diff --git a/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs b/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs index cbb8b00..5724019 100644 --- a/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs +++ b/FruitBankHybrid.Shared/Components/Grids/FruitBankGrid.cs @@ -105,7 +105,7 @@ public class FruitBankListGridBase : MgGridBase : MgGridBase LoadLayoutFromLocalStorageAsync(string localStorageKey) diff --git a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs new file mode 100644 index 0000000..31ea073 --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDto.cs @@ -0,0 +1,36 @@ +using AyCode.Core.Interfaces; +using DevExpress.Blazor; +using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; +using FruitBank.Common.SignalRs; +using FruitBankHybrid.Shared.Pages; +using Microsoft.AspNetCore.Components; + +namespace FruitBankHybrid.Shared.Components.Grids.ShippingItems; + +public class GridStockQuantityHistoryDto : FruitBankListGridBase, IGrid +{ + public GridStockQuantityHistoryDto() : base() + { + if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtos; + else GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtosByProductId; + + //AddMessageTag = SignalRTags.AddShippingItem; + //UpdateMessageTag = SignalRTags.UpdateShippingItem; + //RemoveMessageTag = SignalRTags.; + } + + protected override Task SetParametersAsyncCore(ParameterView parameters) + { + if (!IsFirstInitializeParameters) + { + //ShowFilterRow = true; + //ShowGroupPanel = true; + //AllowSort = false; + + //etc... + } + + return base.SetParametersAsyncCore(parameters); + } +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor new file mode 100644 index 0000000..a59afca --- /dev/null +++ b/FruitBankHybrid.Shared/Components/Grids/Products/GridStockQuantityHistoryDtoTemplate.razor @@ -0,0 +1,96 @@ +@using AyCode.Core.Loggers; +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers +@using AyCode.Utils.Extensions +@using FruitBank.Common.Dtos +@using FruitBank.Common.Entities +@using FruitBankHybrid.Shared.Components.Grids.ShippingItems +@using FruitBankHybrid.Shared.Components.Toolbars +@using FruitBankHybrid.Shared.Databases +@using FruitBankHybrid.Shared.Services.Loggers; +@using FruitBankHybrid.Shared.Services.SignalRs + +@inject IEnumerable LogWriters +@inject FruitBankSignalRClient FruitBankSignalRClient + + + + + + + + + + + + + + + + + + + + + + @if (IsMasterGrid) + { + + } + + @* + + + + *@ + + +@code { + [Inject] public required DatabaseClient Database { get; set; } + + [Parameter] public object[]? ContextIds { get; set; } + [Parameter] public bool IsMasterGrid { get; set; } = false; + + [Parameter] public IEnumerable? ProductDtos { get; set; } + [Parameter] public List? StockQuantityHistoryDtos { get; set; } + + string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; + + const string ExportFileName = "ExportResult"; + + public GridStockQuantityHistoryDto Grid { get; set; } + private LoggerClient _logger; + + protected override async Task OnInitializedAsync() + { + _logger = new LoggerClient(LogWriters.ToArray()); + + await ReloadDataFromDb(false); + } + + public async Task ReloadDataFromDb(bool forceReload = false) + { + if (!IsMasterGrid) return; + + using (await ObjectLock.GetSemaphore().UseWaitAsync()) + { + if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); + } + + if (Grid == null || !forceReload) return; + + using (await ObjectLock.GetSemaphore().UseWaitAsync()) + if (forceReload) await Grid.ReloadDataSourceAsync(); + + if (forceReload) + Grid.Reload(); + } +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs index cf3a106..340f834 100644 --- a/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs +++ b/FruitBankHybrid.Shared/Components/Grids/ShippingItems/GridShippingItem.cs @@ -7,9 +7,9 @@ using Microsoft.AspNetCore.Components; namespace FruitBankHybrid.Shared.Components.Grids.ShippingItems; -public class GridShippingItemBase : FruitBankListGridBase, IGrid +public class GridShippingItem : FruitBankListGridBase, IGrid { - public GridShippingItemBase() : base() + public GridShippingItem () : base() { GetAllMessageTag = SignalRTags.GetShippingItems; AddMessageTag = SignalRTags.AddShippingItem; diff --git a/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor b/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor index f183083..9f9ab8c 100644 --- a/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor +++ b/FruitBankHybrid.Shared/Components/Toolbars/FruitBankToolbarTemplate.razor @@ -38,10 +38,23 @@ aria-label="Search" /> *@ + + @* @if (DxToolbarItems != null) + { + foreach (var toolBarItem in DxToolbarItems) + { + @toolBarItem + } + //@DxToolbarItem + } *@ + + @ToolbarItemsExtended + @code { - [Parameter] public IGrid Grid{ get; set; } + [Parameter] public IGrid Grid { get; set; } + [Parameter] public RenderFragment? ToolbarItemsExtended { get; set; } [Parameter] public EventCallback OnReloadDataClick { get; set; } public ToolbarBase Toolbar { get; set; } diff --git a/FruitBankHybrid.Shared/Pages/MeasuringOut.razor b/FruitBankHybrid.Shared/Pages/MeasuringOut.razor index 5b34809..dd3f9b8 100644 --- a/FruitBankHybrid.Shared/Pages/MeasuringOut.razor +++ b/FruitBankHybrid.Shared/Pages/MeasuringOut.razor @@ -127,7 +127,7 @@ else { string? orderNote; - if (!(orderNote = SelectedOrder?.OrderNotes.FirstOrDefault()?.Note).IsNullOrWhiteSpace()) + if (!(orderNote = SelectedOrder?.OrderNotes.LastOrDefault(x=>x.Note.StartsWith('*'))?.Note).IsNullOrWhiteSpace()) {
Megjegyzés: @(orderNote) diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index d7e4954..e672593 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -1,9 +1,9 @@ -using System.Collections.ObjectModel; -using AyCode.Core.Extensions; +using AyCode.Core.Extensions; using AyCode.Core.Helpers; using AyCode.Core.Loggers; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; +using DevExpress.Utils.About; using FruitBank.Common; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; @@ -16,6 +16,7 @@ using Mango.Nop.Core.Dtos; using Mango.Nop.Core.Models; using MessagePack.Resolvers; using Nop.Core.Domain.Customers; +using System.Collections.ObjectModel; using System.ServiceModel.Channels; namespace FruitBankHybrid.Shared.Services.SignalRs @@ -221,6 +222,12 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task?> GetAllOrderItemPalletByProductId(int productId) => GetAllAsync>(SignalRTags.GetAllOrderItemPalletByProductId, [productId]); + + public Task?> GetStockQuantityHistoryDtos() + => GetAllAsync>(SignalRTags.GetStockQuantityHistoryDtos); + + public Task?> GetStockQuantityHistoryDtosByProductId(int productId) + => GetAllAsync>(SignalRTags.GetStockQuantityHistoryDtosByProductId, [productId]); #endregion Orders } } diff --git a/FruitBankHybrid.sln b/FruitBankHybrid.sln index 9880a46..c6f9f87 100644 --- a/FruitBankHybrid.sln +++ b/FruitBankHybrid.sln @@ -29,6 +29,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AyCode.Blazor.Models.Server EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AyCode.Maui.Core", "..\..\..\Aycode\Source\AyCode.Blazor\AyCode.Maui.Core\AyCode.Maui.Core.csproj", "{F7C67754-A59C-C355-2A10-C614F0585627}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}" + ProjectSection(SolutionItems) = preProject + SqlSchemaCompare_Dev_to_Prod.scmp = SqlSchemaCompare_Dev_to_Prod.scmp + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/SqlSchemaCompare_Dev_to_Prod.scmp b/SqlSchemaCompare_Dev_to_Prod.scmp index 477f3a1..779a84c 100644 --- a/SqlSchemaCompare_Dev_to_Prod.scmp +++ b/SqlSchemaCompare_Dev_to_Prod.scmp @@ -3,12 +3,12 @@ 10 - Data Source=195.26.231.218;Initial Catalog=FruitBank_DEV;Integrated Security=False;Persist Security Info=False;User ID=sa;Pooling=False;Trust Server Certificate=True + Data Source=195.26.231.218;Initial Catalog=FruitBank_DEV;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True - Data Source=195.26.231.218;Initial Catalog=FruitBank_PROD;Integrated Security=False;Persist Security Info=False;User ID=sa;Pooling=False;Trust Server Certificate=True + Data Source=195.26.231.218;Initial Catalog=FruitBank_PROD;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True