using FruitBank.Common.Entities; using LinqToDB; using Mango.Nop.Core.Repositories; using Nop.Core.Caching; using Nop.Core.Configuration; using Nop.Core.Events; using Nop.Data; using Nop.Services.Logging; namespace Nop.Plugin.Misc.FruitBankPlugin.Domains.DataLayer; public class ShippingItemDbTable : MgDbTableBase { public ShippingItemDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings, ILogger logger) : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings, logger) { } protected override void OnUpdate(ShippingItem entity) { RoundMeasuredValue(entity); base.OnUpdate(entity); } protected override void OnInsert(ShippingItem entity) { RoundMeasuredValue(entity); base.OnInsert(entity); } public override IQueryable GetAll() => base.GetAll(); public IQueryable GetAll(bool loadRelations) { return loadRelations ? GetAll() .LoadWith(si => si.ShippingDocument).ThenLoad(s => s.Shipping) .LoadWith(si => si.ShippingDocument).ThenLoad(p => p.Partner) .LoadWith(si => si.ShippingDocument).ThenLoad(sd => sd.ShippingDocumentToFiles).ThenLoad(sdtof => sdtof.ShippingDocumentFile) .LoadWith(si => si.ShippingItemPallets) .LoadWith(si => si.ProductDto).ThenLoad(prod => prod.GenericAttributes) .LoadWith(si => si.Pallet) : GetAll().LoadWith(si => si.ShippingItemPallets).LoadWith(si => si.ProductDto).ThenLoad(prod => prod.GenericAttributes).LoadWith(si => si.Pallet); } public IQueryable GetAllNotMeasured(bool loadRelations) => GetAll(loadRelations).Where(si => !si.IsMeasured); public Task GetByIdAsync(int id, bool loadRelations) => GetAll(loadRelations).FirstOrDefaultAsync(si => si.Id == id); public IQueryable GetAllByProductIdAsync(int productid, bool loadRelations) => GetAll(loadRelations).Where(si => si.ProductId == productid); public IQueryable GetAllByShippingDocumentIdAsync(int shippingDocumentId, bool loadRelations) => GetAll(loadRelations).Where(si => si.ShippingDocumentId == shippingDocumentId); private static void RoundMeasuredValue(ShippingItem shippingItem) { shippingItem.MeasuredNetWeight = double.Round(shippingItem.MeasuredNetWeight, 1); shippingItem.MeasuredGrossWeight = double.Round(shippingItem.MeasuredGrossWeight, 1); } }