/// <summary> /// Deletes a <see cref="IShipRateTier"/> /// </summary> /// <param name="shipRateTier">The <see cref="IShipRateTier"/> to be deleted</param> /// <param name="raiseEvents">Optional boolean indicating whether or not to raise events.</param> public void Delete(IShipRateTier shipRateTier, bool raiseEvents = true) { if (raiseEvents) { if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs <IShipRateTier>(shipRateTier), this)) { ((ShipRateTier)shipRateTier).WasCancelled = true; return; } } using (new WriteLock(Locker)) { var uow = UowProvider.GetUnitOfWork(); using (var repository = RepositoryFactory.CreateShipRateTierRepository(uow)) { repository.Delete(shipRateTier); uow.Commit(); } } if (raiseEvents) { Deleted.RaiseEvent(new DeleteEventArgs <IShipRateTier>(shipRateTier), this); } }
/// <summary> /// Deletes a row /// </summary> /// <param name="shipRateTier"> /// The ship Rate Tier. /// </param> public void DeleteRow(IShipRateTier shipRateTier) { if (MerchelloContext.Current == null) { throw new InvalidOperationException("MerchelloContext.Current is null"); } if (!IsTest) { DeleteRow(MerchelloContext.Current.Services.GatewayProviderService, MerchelloContext.Current.Cache.RuntimeCache, this, shipRateTier); } _shipRateTiers.Remove(shipRateTier); }
/// <summary> /// Asserts the ranges in the rate tier are low to high, non zero and not equal. /// </summary> /// <param name="shipRateTier"> /// The ship Rate Tier. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> private static bool ValidateRateTier(ref IShipRateTier shipRateTier) { if (shipRateTier.RangeLow < 0 || shipRateTier.RangeHigh < 0) { return(false); } if (shipRateTier.RangeLow == shipRateTier.RangeHigh) { return(false); } if (shipRateTier.RangeHigh > shipRateTier.RangeLow) { return(true); } var temp = shipRateTier.RangeLow; shipRateTier.RangeLow = shipRateTier.RangeHigh; shipRateTier.RangeHigh = temp; return(true); }
internal static ShipRateTierDisplay ToShipRateTierDisplay(this IShipRateTier shipRateTier) { return(AutoMapper.Mapper.Map <ShipRateTierDisplay>(shipRateTier)); }
/// <summary> /// Adds a rate tier row to the ship rate table /// </summary> /// <param name="shipRateTier"> /// The ship Rate Tier. /// </param> /// <remarks> /// Requires a call to Save() to persist /// </remarks> internal void AddRow(IShipRateTier shipRateTier) { if (!ValidateRateTier(ref shipRateTier)) { return; } // TODO : Refactor this validation if (!Rows.Any()) { shipRateTier.RangeLow = 0; _shipRateTiers.Add(shipRateTier); } else { // confirm there is not already a matching tier if (Rows.FirstOrDefault(x => x.RangeLow == shipRateTier.RangeLow && x.RangeHigh == shipRateTier.RangeHigh) != null) { return; } // find the insertion point var index = Rows.IndexOf(Rows.Where(y => y.RangeHigh >= shipRateTier.RangeLow).OrderBy(z => z.RangeLow).FirstOrDefault()); if (index < 0) { shipRateTier.RangeLow = Rows.Last().RangeHigh; AddRow(shipRateTier); return; } // not found or at the end of the table if (index < 0 || index == Rows.IndexOf(Rows.Last())) { if (shipRateTier.RangeLow >= Rows.Last().RangeLow&& shipRateTier.RangeHigh < Rows.Last().RangeHigh) { shipRateTier.RangeLow = Rows.Last().RangeLow; Rows.Last().RangeLow = shipRateTier.RangeHigh; } ////shipRateTier.RangeLow = Rows.Last().RangeHigh; if (shipRateTier.RangeHigh <= shipRateTier.RangeLow) { return; } _shipRateTiers.Add(shipRateTier); } else { // insert in the middle of the table // verify that inserting this tier will not create a span encapsulating another tier if (shipRateTier.RangeHigh >= _shipRateTiers[index + 1].RangeHigh) { return; } if (shipRateTier.RangeLow <= _shipRateTiers[index].RangeLow) { return; } // match the range low to range high in the following tier _shipRateTiers[index + 1].RangeLow = shipRateTier.RangeHigh; // verify that the high value at the current index is equal to the low value of the tier to be insert _shipRateTiers[index].RangeHigh = shipRateTier.RangeLow; _shipRateTiers.Insert(index + 1, shipRateTier); } } }
/// <summary> /// The delete row. /// </summary> /// <param name="gatewayProviderService"> /// The gateway provider service. /// </param> /// <param name="cache"> /// The cache. /// </param> /// <param name="rateTable"> /// The rate table. /// </param> /// <param name="shipRateTier"> /// The ship rate tier. /// </param> internal static void DeleteRow(IGatewayProviderService gatewayProviderService, IRuntimeCacheProvider cache, IShippingFixedRateTable rateTable, IShipRateTier shipRateTier) { var row = rateTable.Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); if (!rateTable.Rows.Any() || row == null) { return; } if (rateTable.Rows.IndexOf(rateTable.Rows.Last()) != rateTable.Rows.IndexOf(row)) { rateTable.Rows.First(x => x.RangeLow == row.RangeHigh).RangeLow = row.RangeLow; } // clear the current cached item // TODO : This should use the distributed cache referesher cache.ClearCacheItem(CacheKeys.GatewayShipMethodCacheKey(rateTable.ShipMethodKey)); gatewayProviderService.Save(rateTable.Rows); gatewayProviderService.Delete(shipRateTier); cache.GetCacheItem(CacheKeys.GatewayShipMethodCacheKey(rateTable.ShipMethodKey), () => rateTable, TimeSpan.FromHours(6)); }
internal static void DeleteRow(IGatewayProviderService gatewayProviderService, IRuntimeCacheProvider cache, IUPSShippingRateTable rateTable, IShipRateTier shipRateTier) { //var row = Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); //if (!Rows.Any() || row == null) return; //if (Rows.IndexOf(Rows.Last()) != Rows.IndexOf(row)) //{ // _shipRateTiers[Rows.IndexOf(row) + 1].RangeLow = row.RangeLow; //} //_shipRateTiers.Remove(row); var row = rateTable.Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); if (!rateTable.Rows.Any() || row == null) return; if (rateTable.Rows.IndexOf(rateTable.Rows.Last()) != rateTable.Rows.IndexOf(row)) { rateTable.Rows.First(x => x.RangeLow == row.RangeHigh).RangeLow = row.RangeLow; } gatewayProviderService.Save(rateTable.Rows); gatewayProviderService.Delete(shipRateTier); }
/// <summary> /// Saves a single <see cref="IShipRateTier"/> /// </summary> /// <param name="shipRateTier"></param> public void Save(IShipRateTier shipRateTier) { _shipRateTierService.Save(shipRateTier); }
/// <summary> /// Deletes a <see cref="IShipRateTier"/> /// </summary> /// <param name="shipRateTier">The <see cref="IShipRateTier"/> to be deleted</param> /// <param name="raiseEvents">Optional boolean indicating whether or not to raise events.</param> public void Delete(IShipRateTier shipRateTier, bool raiseEvents = true) { if(raiseEvents) if (Deleting.IsRaisedEventCancelled(new DeleteEventArgs<IShipRateTier>(shipRateTier), this)) { ((ShipRateTier) shipRateTier).WasCancelled = true; return; } using (new WriteLock(Locker)) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateShipRateTierRepository(uow)) { repository.Delete(shipRateTier); uow.Commit(); } } if(raiseEvents) Deleted.RaiseEvent(new DeleteEventArgs<IShipRateTier>(shipRateTier), this); }
internal static void DeleteRow(IGatewayProviderService gatewayProviderService, IRuntimeCacheProvider cache, IUPSShippingRateTable rateTable, IShipRateTier shipRateTier) { //var row = Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); //if (!Rows.Any() || row == null) return; //if (Rows.IndexOf(Rows.Last()) != Rows.IndexOf(row)) //{ // _shipRateTiers[Rows.IndexOf(row) + 1].RangeLow = row.RangeLow; //} //_shipRateTiers.Remove(row); var row = rateTable.Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); if (!rateTable.Rows.Any() || row == null) { return; } if (rateTable.Rows.IndexOf(rateTable.Rows.Last()) != rateTable.Rows.IndexOf(row)) { rateTable.Rows.First(x => x.RangeLow == row.RangeHigh).RangeLow = row.RangeLow; } gatewayProviderService.Save(rateTable.Rows); gatewayProviderService.Delete(shipRateTier); }
/// <summary> /// Deletes a row /// </summary> /// <param name="shipRateTier"></param> public void DeleteRow(IShipRateTier shipRateTier) { if (MerchelloContext.Current == null) throw new InvalidOperationException("MerchelloContext.Current is null"); if(!IsTest) DeleteRow(MerchelloContext.Current.Services.GatewayProviderService, MerchelloContext.Current.Cache.RuntimeCache, this, shipRateTier); _shipRateTiers.Remove(shipRateTier); }
/// <summary> /// Asserts the ranges in the rate tier are low to high, non zero and not equal. /// </summary> /// <param name="shipRateTier"></param> /// <returns></returns> private static bool ValidateRateTier(ref IShipRateTier shipRateTier) { if (shipRateTier.RangeLow < 0 || shipRateTier.RangeHigh < 0) return false; if (shipRateTier.RangeLow == shipRateTier.RangeHigh) return false; if (shipRateTier.RangeHigh > shipRateTier.RangeLow) return true; var temp = shipRateTier.RangeLow; shipRateTier.RangeLow = shipRateTier.RangeHigh; shipRateTier.RangeHigh = temp; return true; }
/// <summary> /// Adds a rate tier row to the ship rate table /// </summary> /// <param name="shipRateTier"></param> /// <remarks> /// Requires a call to Save() to persist /// </remarks> internal void AddRow(IShipRateTier shipRateTier) { if (!ValidateRateTier(ref shipRateTier)) return; // TODO : Refactor this validation if (!Rows.Any()) { shipRateTier.RangeLow = 0; _shipRateTiers.Add(shipRateTier); } else { // confirm there is not already a matching tier if(Rows.FirstOrDefault(x => x.RangeLow == shipRateTier.RangeLow && x.RangeHigh == shipRateTier.RangeHigh) != null) return; // find the insertion point var index = Rows.IndexOf(Rows.Where(y => y.RangeHigh >= shipRateTier.RangeLow).OrderBy(z => z.RangeLow).FirstOrDefault()); if (index < 0) { shipRateTier.RangeLow = Rows.Last().RangeHigh; AddRow(shipRateTier); return; } // not found or at the end of the table if (index < 0 || index == Rows.IndexOf(Rows.Last())) { if (shipRateTier.RangeLow >= Rows.Last().RangeLow && shipRateTier.RangeHigh < Rows.Last().RangeHigh) { shipRateTier.RangeLow = Rows.Last().RangeLow; Rows.Last().RangeLow = shipRateTier.RangeHigh; } //shipRateTier.RangeLow = Rows.Last().RangeHigh; if (shipRateTier.RangeHigh <= shipRateTier.RangeLow) return; _shipRateTiers.Add(shipRateTier); } else // insert in the middle of the table { // verify that inserting this tier will not create a span encapsulating another tier if (shipRateTier.RangeHigh >= _shipRateTiers[index + 1].RangeHigh) return; if (shipRateTier.RangeLow <= _shipRateTiers[index].RangeLow) return; // match the range low to range high in the following tier _shipRateTiers[index + 1].RangeLow = shipRateTier.RangeHigh; // verify that the high value at the current index is equal to the low value of the tier to be insert _shipRateTiers[index].RangeHigh = shipRateTier.RangeLow; _shipRateTiers.Insert(index + 1, shipRateTier); } } }
internal static IShipRateTier ToShipRateTier(this ShipRateTierDisplay shipRateTierDisplay, IShipRateTier destination) { if (shipRateTierDisplay.Key != Guid.Empty) { destination.Key = shipRateTierDisplay.Key; } destination.RangeHigh = shipRateTierDisplay.RangeHigh; destination.RangeLow = shipRateTierDisplay.RangeLow; destination.Rate = shipRateTierDisplay.Rate; return(destination); }
/// <summary> /// Deletes a <see cref="IShipRateTier"/> /// </summary> /// <param name="shipRateTier"></param> public void Delete(IShipRateTier shipRateTier) { _shipRateTierService.Delete(shipRateTier); }
internal static IShipRateTier ToShipRateTier(this ShipRateTierDisplay shipRateTierDisplay, IShipRateTier destination) { if (shipRateTierDisplay.Key != Guid.Empty) { destination.Key = shipRateTierDisplay.Key; } destination.RangeHigh = shipRateTierDisplay.RangeHigh; destination.RangeLow = shipRateTierDisplay.RangeLow; destination.Rate = shipRateTierDisplay.Rate; return destination; }
/// <summary> /// The delete row. /// </summary> /// <param name="gatewayProviderService"> /// The gateway provider service. /// </param> /// <param name="cache"> /// The cache. /// </param> /// <param name="rateTable"> /// The rate table. /// </param> /// <param name="shipRateTier"> /// The ship rate tier. /// </param> internal static void DeleteRow(IGatewayProviderService gatewayProviderService, IRuntimeCacheProvider cache, IShippingFixedRateTable rateTable, IShipRateTier shipRateTier) { var row = rateTable.Rows.FirstOrDefault(x => x.Key == shipRateTier.Key); if (!rateTable.Rows.Any() || row == null) return; if (rateTable.Rows.IndexOf(rateTable.Rows.Last()) != rateTable.Rows.IndexOf(row)) { rateTable.Rows.First(x => x.RangeLow == row.RangeHigh).RangeLow = row.RangeLow; } // clear the current cached item // TODO : This should use the distributed cache referesher cache.ClearCacheItem(CacheKeys.GatewayShipMethodCacheKey(rateTable.ShipMethodKey)); gatewayProviderService.Save(rateTable.Rows); gatewayProviderService.Delete(shipRateTier); cache.GetCacheItem(CacheKeys.GatewayShipMethodCacheKey(rateTable.ShipMethodKey), () => rateTable); }