public override void SetPurchaseRestriction(List <TaxIdentification> tins, int orderMonth, string distributorId, IPurchaseRestrictionManager manager) { //check if is a elearning and set the new limits for the second order base.SetPurchaseRestriction(tins, orderMonth, distributorId, manager); var currentLimits = GetLimits(LimitsRestrictionType.PurchasingLimits, orderMonth, manager); if (HLConfigManager.Configurations.ShoppingCartConfiguration.CheckELearning) { PurchaseLimitType limitType = PurchaseLimitType.Volume; currentLimits.PurchaseLimitType = limitType; var session = SessionInfo.GetSessionInfo(distributorId, Locale); if (PurchaseRestrictionProvider.RequireTraining(distributorId, this.Locale, this.Country)) { if (currentLimits.RemainingVolume != currentLimits.maxVolumeLimit && !session.LimitsHasModified) { var used = (currentLimits.maxVolumeLimit - currentLimits.RemainingVolume); var shouldbe = 1100 - used; currentLimits.PurchaseLimitType = limitType; if (currentLimits.RemainingVolume != shouldbe && shouldbe > 0 && !session.LimitsHasModified) { currentLimits.RemainingVolume = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV - (currentLimits.maxVolumeLimit - currentLimits.RemainingVolume); session.LimitsHasModified = true; } } //check for the members without limits and create else if (currentLimits.RemainingVolume == -1 && currentLimits.maxVolumeLimit == -1 && !session.LimitsHasModified) { var currentLoggedInCounrtyCode = Locale.Substring(3); DistributorLoader distributorLoader = new DistributorLoader(); var distributorProfile = distributorLoader.Load(distributorId, currentLoggedInCounrtyCode); var remainingVolume = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV - distributorProfile.PersonallyPurchasedVolume; //PurchasingLimits_V01 newLimits = new PurchasingLimits_V01(); currentLimits.Month = currentLimits.Month; currentLimits.LastRead = DateTime.UtcNow; currentLimits.RemainingVolume = distributorProfile.PersonallyPurchasedVolume != 0 ? remainingVolume : 0; currentLimits.LimitsRestrictionType = LimitsRestrictionType.PurchasingLimits; currentLimits.PurchaseLimitType = limitType; currentLimits.LastRead = DateTime.UtcNow; currentLimits.maxVolumeLimit = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV; session.LimitsHasModified = true; } } } else { base.SetPurchaseRestriction(tins, orderMonth, distributorId, manager); } if (currentLimits == null) { return; } SetLimits(orderMonth, manager, currentLimits); }
private void checkLimits(MyHLShoppingCart hlCart) { var currentLimits = PurchasingLimitProvider.GetCurrentPurchasingLimits(hlCart.DistributorID); var session = SessionInfo.GetSessionInfo(hlCart.DistributorID, hlCart.Locale); string trainingCode = HLConfigManager.Configurations.ShoppingCartConfiguration.TrainingCode; if (session.DsTrainings == null || session.DsTrainings.Count == 0) { session.DsTrainings = DistributorOrderingProfileProvider.GetTrainingList(hlCart.DistributorID, hlCart.CountryCode); } if (session.DsTrainings != null && session.DsTrainings.Count > 0 && session.DsTrainings.Exists(t => t.TrainingCode == trainingCode && !t.TrainingFlag)) { //if is true the member place an order without taking the training and the limits shoud be applicable for only 1100 if (currentLimits.RemainingVolume != currentLimits.maxVolumeLimit && !session.LimitsHasModified) { var used = (currentLimits.maxVolumeLimit - currentLimits.RemainingVolume); var shouldbe = 1100 - used; PurchaseLimitType limitType = PurchaseLimitType.Volume; currentLimits.PurchaseLimitType = limitType; if (currentLimits.RemainingVolume != shouldbe && shouldbe > 0 && !session.LimitsHasModified) { currentLimits.RemainingVolume = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV - (currentLimits.maxVolumeLimit - currentLimits.RemainingVolume); session.LimitsHasModified = true; } string country = DistributorProfileModel.ProcessingCountryCode; PurchasingLimitProvider.savePurchasingLimitsToCache(ConvertCurrentLimitsToSave(currentLimits), hlCart.DistributorID); PurchasingLimitProvider.SavePurchaseLimitsToStore(country, hlCart.DistributorID); } //check for the members without limits and create else if (currentLimits.RemainingVolume == -1 && currentLimits.maxVolumeLimit == -1 && !session.LimitsHasModified) { var currentLoggedInCounrtyCode = Locale.Substring(3); DistributorLoader distributorLoader = new DistributorLoader(); var distributorProfile = distributorLoader.Load(hlCart.DistributorID, currentLoggedInCounrtyCode); var remainingVolume = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV - distributorProfile.PersonallyPurchasedVolume; PurchaseLimitType limitType = PurchaseLimitType.Volume; //PurchasingLimits_V01 newLimits = new PurchasingLimits_V01(); currentLimits.Month = currentLimits.Month; currentLimits.LastRead = DateTime.UtcNow; currentLimits.RemainingVolume = distributorProfile.PersonallyPurchasedVolume != 0 ? remainingVolume : 0; currentLimits.LimitsRestrictionType = LimitsRestrictionType.PurchasingLimits; currentLimits.PurchaseLimitType = limitType; currentLimits.LastRead = DateTime.UtcNow; currentLimits.maxVolumeLimit = HLConfigManager.Configurations.ShoppingCartConfiguration.eLearningMaxPPV; session.LimitsHasModified = true; string country = DistributorProfileModel.ProcessingCountryCode; PurchasingLimitProvider.savePurchasingLimitsToCache(ConvertCurrentLimitsToSave(currentLimits), hlCart.DistributorID); PurchasingLimitProvider.SavePurchaseLimitsToStore(country, hlCart.DistributorID); } } }
public IPurchaseRestrictionManager GetPurchaseRestrictionManager(string id) { //Load the DS/get it from cache.. ILoader <DistributorProfileModel, GetDistributorProfileById> distributorProfileLoader = new DistributorProfileLoader(); var locale = CultureInfo.CurrentCulture.Name; var currentLoggedInCounrtyCode = locale.Substring(3); var distributorProfileModel = distributorProfileLoader.Load(new GetDistributorProfileById { Id = id }); // to prevent recusive calls // get distributor ordering profile from Distributor_V01 DistributorLoader distributorLoader = new DistributorLoader(); var distributorProfile = distributorLoader.Load(id, currentLoggedInCounrtyCode); var distributorOrderingProfile = DistributorOrderingProfileFactory.GetDistributorOrderingProfile(distributorProfile, currentLoggedInCounrtyCode); return(_Cache.Retrieve(delegate { return new PurchaseRestrictionManager(id, currentLoggedInCounrtyCode, distributorProfileModel.TypeCode, distributorProfileModel.ProcessingCountryCode, locale, distributorOrderingProfile.TinList, distributorOrderingProfile.OrderSubType); }, GetCacheKey(id, currentLoggedInCounrtyCode), TimeSpan.FromMinutes(Settings.GetRequiredAppSetting( "PurchasingLimitsCacheMinutes", 30)))); }