def plan
      # si el usuario no tiene plan_id en su modelo, se le asigna el plan_id seleccionado en el formulario
      # recordar que ese plan_id llega en los params del contexto y por tanto tenemos acceso a el
      # como variable de clase @plan_id

      if @current_user.plan_id.nil?
        if @plan_id.nil?
          raise StandardError, 'Error creando plan, plan_id null'
        end
        # se almacena en el user
        @current_user.update_attribute(:plan_id, @plan_id)
        # despues de tenerlo almacenado en la bd, llamamos nuevamente este metodo plan
        plan
      else
        # el usuario tiene un plan_id asignado, se le actualiza el plan_id en caso de que haya seleccionado uno
        # diferente al que tiene actualmente
        @current_user.update_attribute(:plan_id, @plan_id)
        # obtener informacion del plan de la BD
        plan_db = @current_user.plan
        #
        # NOTA: los planes deben tener un plan_code es OBLIGATORIO para el buen funcionamiento
        #
        if plan_db.plan_code.nil? || plan_db.plan_code.empty?
          raise StandardError, 'Error creando plan, code null'
        end
        # con el plan_code lo buscamos en payu
        plan_payu = PayuLatam::Plan.new(plan_db.plan_code)
        # si existe?
        if plan_payu.success?
          # llenar la variable plan con la instancia de clase PayuLatam:Plan
          @plan = plan_payu
        else
          # si no existe en pyu, crearlo con el metodo del modelo plan
          plan_db.create_payu_plan
          # llamado recursivo
          plan
        end
      end
    end
def plan
      # si el usuario no tiene plan_id en su modelo, se le asigna el plan_id seleccionado en el formulario
      # recordar que ese plan_id llega en los params del contexto y por tanto tenemos acceso a el
      # como variable de clase @plan_id

      if @current_user.plan_id.nil?
        if @plan_id.nil?
          raise StandardError, 'Error creando plan, plan_id null'
        end
        # se almacena en el user
        @current_user.update_attribute(:plan_id, @plan_id)
        # despues de tenerlo almacenado en la bd, llamamos nuevamente este metodo plan
        plan
      else
        # el usuario tiene un plan_id asignado, se le actualiza el plan_id en caso de que haya seleccionado uno
        # diferente al que tiene actualmente
        @current_user.update_attribute(:plan_id, @plan_id)
        # obtener informacion del plan de la BD
        plan_db = @current_user.plan
        #
        # NOTA: los planes deben tener un plan_code es OBLIGATORIO para el buen funcionamiento
        #
        if plan_db.plan_code.nil? || plan_db.plan_code.empty?
          raise StandardError, 'Error creando plan, code null'
        end
        # con el plan_code lo buscamos en payu
        plan_payu = PayuLatam::Plan.new(plan_db.plan_code)
        # si existe?
        if plan_payu.success?
          # llenar la variable plan con la instancia de clase PayuLatam:Plan
          @plan = plan_payu
        else
          # si no existe en pyu, crearlo con el metodo del modelo plan
          plan_db.create_payu_plan
          # llamado recursivo
          plan
        end
      end
    end
crea o carga un plan en un cliente de payu
 se utiliza el current_user, el payu_id del cliente y el plan_code del plan