# frozen_string_literal: true # Business logic around trainings module Trainings; end # Automatically cancel trainings authorizations when the configured period has expired class Trainings::AuthorizationService class << self # @param training [Training] def auto_cancel_authorizations(training) return unless training.authorization training.statistic_profile_trainings .where('created_at < ?', Time.current - training.authorization_period.months) .find_each do |spt| NotificationCenter.call type: 'notify_member_training_authorization_expired', receiver: spt.statistic_profile.user, attached_object: spt.training spt.destroy! end end # update the given training, depending on the provided settings # @param training [Training] # @param authorization [Setting,NilClass] # @param duration [Setting,NilClass] def update_authorization(training, authorization, duration) previous_authorization = if authorization.nil? Setting.find_by(name: 'trainings_authorization_validity').value else authorization.previous_value end previous_duration = duration.nil? ? Setting.find_by(name: 'trainings_authorization_validity_duration').value : duration.previous_value is_default = training.authorization.to_s == previous_authorization.to_s && training.authorization_period.to_s == previous_duration.to_s return unless is_default # update parameters if the given training is default params = {} params[:authorization] = authorization.value unless authorization.nil? params[:authorization_period] = duration.value unless duration.nil? training.update(params) end # @param training [Training] # @return [Boolean] def override_settings?(training) training.authorization.to_s != Setting.find_by(name: 'trainings_authorization_validity')&.value.to_s || training.authorization_period.to_s != Setting.find_by(name: 'trainings_authorization_validity_duration')&.value.to_s end end end