Newer
Older
dmpopidor / html / Plan.html
@Marta Ribeiro Marta Ribeiro on 3 Jun 2016 87 KB DMPonline4 - RAILS 4.0 (#4)
<!DOCTYPE html>

<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

<title>class Plan - DMPonline4 Documentation</title>

<link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">

<script type="text/javascript">
  var rdoc_rel_prefix = "./";
</script>

<script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>


<body id="top" class="class">
<nav id="metadata">
  <nav id="home-section" class="section">
  <h3 class="section-header">
    <a href="./index.html">Home</a>
    <a href="./table_of_contents.html#classes">Classes</a>
    <a href="./table_of_contents.html#methods">Methods</a>
  </h3>
</nav>


  <nav id="search-section" class="section project-section" class="initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <h3 class="section-header">
      <input type="text" name="search" placeholder="Search" id="search-field"
             title="Type to search, Up and Down to navigate, Enter to load">
    </h3>
  </form>

  <ul id="search-results" class="initially-hidden"></ul>
</nav>


  <div id="file-metadata">
    <nav id="file-list-section" class="section">
  <h3 class="section-header">Defined In</h3>
  <ul>
    <li>app/models/plan.rb
  </ul>
</nav>

    
  </div>

  <div id="class-metadata">
    
    <nav id="parent-class-section" class="section">
  <h3 class="section-header">Parent</h3>
  
  <p class="link">ActiveRecord::Base
  
</nav>

    
    <!-- Method Quickref -->
<nav id="method-list-section" class="section">
  <h3 class="section-header">Methods</h3>

  <ul class="link-list">
    
    <li><a href="#method-i-add_guidance_to_array">#add_guidance_to_array</a>
    
    <li><a href="#method-i-administerable_by">#administerable_by</a>
    
    <li><a href="#method-i-answer">#answer</a>
    
    <li><a href="#method-i-delete_recent_locks">#delete_recent_locks</a>
    
    <li><a href="#method-i-details">#details</a>
    
    <li><a href="#method-i-dmptemplate">#dmptemplate</a>
    
    <li><a href="#method-i-editable_by">#editable_by</a>
    
    <li><a href="#method-i-estimate_space_used">#estimate_space_used</a>
    
    <li><a href="#method-i-guidance_for_question">#guidance_for_question</a>
    
    <li><a href="#method-i-height_of_text">#height_of_text</a>
    
    <li><a href="#method-i-latest_update">#latest_update</a>
    
    <li><a href="#method-i-lock_all_sections">#lock_all_sections</a>
    
    <li><a href="#method-i-lock_section">#lock_section</a>
    
    <li><a href="#method-i-locked">#locked</a>
    
    <li><a href="#method-i-readable_by">#readable_by</a>
    
    <li><a href="#method-i-section_answers">#section_answers</a>
    
    <li><a href="#method-i-sections">#sections</a>
    
    <li><a href="#method-i-settings">#settings</a>
    
    <li><a href="#method-i-status">#status</a>
    
    <li><a href="#method-i-super_settings">#super_settings</a>
    
    <li><a href="#method-i-title">#title</a>
    
    <li><a href="#method-i-unlock_all_sections">#unlock_all_sections</a>
    
    <li><a href="#method-i-unlock_section">#unlock_section</a>
    
    <li><a href="#method-i-warning">#warning</a>
    
  </ul>
</nav>

  </div>

  <div id="project-metadata">
    <nav id="fileindex-section" class="section project-section">
  <h3 class="section-header">Pages</h3>

  <ul>
  
    <li class="file"><a href="./README_rdoc.html">README</a>
  
  </ul>
</nav>

    <nav id="classindex-section" class="section project-section">
  <h3 class="section-header">Class and Module Index</h3>

  <ul class="link-list">
  
    <li><a href="./Settings.html">Settings</a>
  
    <li><a href="./Settings/Dmptemplate.html">Settings::Dmptemplate</a>
  
    <li><a href="./Settings/PlanList.html">Settings::PlanList</a>
  
    <li><a href="./Settings/PlansController.html">Settings::PlansController</a>
  
    <li><a href="./Settings/ProjectsController.html">Settings::ProjectsController</a>
  
    <li><a href="./Settings/SettingsController.html">Settings::SettingsController</a>
  
    <li><a href="./ActiveAdmin.html">ActiveAdmin</a>
  
    <li><a href="./ActiveAdmin/Views.html">ActiveAdmin::Views</a>
  
    <li><a href="./ActiveAdmin/Views/Pages.html">ActiveAdmin::Views::Pages</a>
  
    <li><a href="./ActiveAdmin/Views/Pages/Base.html">ActiveAdmin::Views::Pages::Base</a>
  
    <li><a href="./Users.html">Users</a>
  
    <li><a href="./Users/OmniauthCallbacksController.html">Users::OmniauthCallbacksController</a>
  
    <li><a href="./Users/OmniauthShibbolethRequestController.html">Users::OmniauthShibbolethRequestController</a>
  
    <li><a href="./DMPonline4.html">DMPonline4</a>
  
    <li><a href="./DMPonline4/Application.html">DMPonline4::Application</a>
  
    <li><a href="./Ability.html">Ability</a>
  
    <li><a href="./Answer.html">Answer</a>
  
    <li><a href="./AnswersController.html">AnswersController</a>
  
    <li><a href="./ApplicationController.html">ApplicationController</a>
  
    <li><a href="./ApplicationHelper.html">ApplicationHelper</a>
  
    <li><a href="./Comment.html">Comment</a>
  
    <li><a href="./CommentsController.html">CommentsController</a>
  
    <li><a href="./ConfirmationsController.html">ConfirmationsController</a>
  
    <li><a href="./ContactsController.html">ContactsController</a>
  
    <li><a href="./CustomFailure.html">CustomFailure</a>
  
    <li><a href="./Dmptemplate.html">Dmptemplate</a>
  
    <li><a href="./DmptemplatesController.html">DmptemplatesController</a>
  
    <li><a href="./ExistingUsersController.html">ExistingUsersController</a>
  
    <li><a href="./ExportedPlan.html">ExportedPlan</a>
  
    <li><a href="./FileType.html">FileType</a>
  
    <li><a href="./FileUpload.html">FileUpload</a>
  
    <li><a href="./Guidance.html">Guidance</a>
  
    <li><a href="./GuidanceGroup.html">GuidanceGroup</a>
  
    <li><a href="./GuidanceGroupsController.html">GuidanceGroupsController</a>
  
    <li><a href="./GuidancesController.html">GuidancesController</a>
  
    <li><a href="./HomeController.html">HomeController</a>
  
    <li><a href="./Object.html">Object</a>
  
    <li><a href="./Option.html">Option</a>
  
    <li><a href="./OptionWarning.html">OptionWarning</a>
  
    <li><a href="./Organisation.html">Organisation</a>
  
    <li><a href="./OrganisationType.html">OrganisationType</a>
  
    <li><a href="./OrganisationUsersController.html">OrganisationUsersController</a>
  
    <li><a href="./OrganisationsController.html">OrganisationsController</a>
  
    <li><a href="./PasswordsController.html">PasswordsController</a>
  
    <li><a href="./Phase.html">Phase</a>
  
    <li><a href="./Plan.html">Plan</a>
  
    <li><a href="./PlanSection.html">PlanSection</a>
  
    <li><a href="./PlansController.html">PlansController</a>
  
    <li><a href="./PlansHelper.html">PlansHelper</a>
  
    <li><a href="./Project.html">Project</a>
  
    <li><a href="./ProjectGroup.html">ProjectGroup</a>
  
    <li><a href="./ProjectGroupsController.html">ProjectGroupsController</a>
  
    <li><a href="./ProjectPartner.html">ProjectPartner</a>
  
    <li><a href="./ProjectsController.html">ProjectsController</a>
  
    <li><a href="./Question.html">Question</a>
  
    <li><a href="./QuestionFormat.html">QuestionFormat</a>
  
    <li><a href="./RegistrationsController.html">RegistrationsController</a>
  
    <li><a href="./Role.html">Role</a>
  
    <li><a href="./Section.html">Section</a>
  
    <li><a href="./SessionsController.html">SessionsController</a>
  
    <li><a href="./SplashLog.html">SplashLog</a>
  
    <li><a href="./SplashLogsController.html">SplashLogsController</a>
  
    <li><a href="./StaticPagesController.html">StaticPagesController</a>
  
    <li><a href="./SuggestedAnswer.html">SuggestedAnswer</a>
  
    <li><a href="./Theme.html">Theme</a>
  
    <li><a href="./ThemesController.html">ThemesController</a>
  
    <li><a href="./User.html">User</a>
  
    <li><a href="./UserMailer.html">UserMailer</a>
  
    <li><a href="./UserOrgRole.html">UserOrgRole</a>
  
    <li><a href="./UserOrgRolesController.html">UserOrgRolesController</a>
  
    <li><a href="./UserRoleType.html">UserRoleType</a>
  
    <li><a href="./UserRoleTypesController.html">UserRoleTypesController</a>
  
    <li><a href="./UserStatus.html">UserStatus</a>
  
    <li><a href="./UserStatusesController.html">UserStatusesController</a>
  
    <li><a href="./UserType.html">UserType</a>
  
    <li><a href="./UserTypesController.html">UserTypesController</a>
  
    <li><a href="./UsersController.html">UsersController</a>
  
    <li><a href="./Version.html">Version</a>
  
  </ul>
</nav>

  </div>
</nav>

<div id="documentation">
  <h1 class="class">class Plan</h1>

  <div id="description" class="description">
    
  </div><!-- description -->

  
  
  
  <section id="5Buntitled-5D" class="documentation-section">
    

    

    
    <!-- Constants -->
    <section id="constants-list" class="section">
      <h3 class="section-header">Constants</h3>
      <dl>
      
        <dt id="A4_PAGE_HEIGHT">A4_PAGE_HEIGHT
        
        <dd class="description">
        
      
        <dt id="A4_PAGE_WIDTH">A4_PAGE_WIDTH
        
        <dd class="description">
        
      
        <dt id="FONT_HEIGHT_CONVERSION_FACTOR">FONT_HEIGHT_CONVERSION_FACTOR
        
        <dd class="description">
        
      
        <dt id="FONT_WIDTH_HEIGHT_RATIO">FONT_WIDTH_HEIGHT_RATIO
        
        <dd class="description">
        
      
        <dt id="ROUNDING">ROUNDING
        
        <dd class="description">
        
      
      </dl>
    </section>
    

    

    <!-- Methods -->
    
     <section id="public-instance-5Buntitled-5D-method-details" class="method-section section">
      <h3 class="section-header">Public Instance Methods</h3>

    
      <div id="method-i-add_guidance_to_array" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">add_guidance_to_array</span><span
            class="method-args">(guidance_array, guidance_group, theme, guidance)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="add_guidance_to_array-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 119</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidance_array</span>, <span class="ruby-identifier">guidance_group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
        
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>] = {}
        <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">theme</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">&quot;no_theme&quot;</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">&quot;no_theme&quot;</span>] = []
                <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">&quot;no_theme&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">guidance</span>) <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">&quot;no_theme&quot;</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">guidance</span>)
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>] = []
                <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">guidance</span>) <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">guidance</span>)
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>
        
<span class="ruby-keyword">return</span> <span class="ruby-identifier">guidance_array</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- add_guidance_to_array-source -->
          
        </div>

        

        
      </div><!-- add_guidance_to_array-method -->

    
      <div id="method-i-administerable_by" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">administerable_by</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="administerable_by-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 168</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">administerable_by</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">end</span></pre>
          </div><!-- administerable_by-source -->
          
        </div>

        

        
      </div><!-- administerable_by-method -->

    
      <div id="method-i-answer" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">answer</span><span
            class="method-args">(qid, create_if_missing = true)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="answer-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 53</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">qid</span>, <span class="ruby-identifier">create_if_missing</span> = <span class="ruby-keyword">true</span>)
        <span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:question_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">qid</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;created_at DESC&quot;</span>).<span class="ruby-identifier">first</span>
        <span class="ruby-identifier">question</span> = <span class="ruby-constant">Question</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">qid</span>)
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">create_if_missing</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">answer</span> = <span class="ruby-constant">Answer</span>.<span class="ruby-identifier">new</span>
                <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">plan_id</span> = <span class="ruby-identifier">id</span>
                <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">question_id</span> = <span class="ruby-identifier">qid</span>
                <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span> = <span class="ruby-identifier">question</span>.<span class="ruby-identifier">default_value</span>
                <span class="ruby-identifier">default_options</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
                <span class="ruby-identifier">question</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">option</span><span class="ruby-operator">|</span>
                        <span class="ruby-keyword">if</span> <span class="ruby-identifier">option</span>.<span class="ruby-identifier">is_default</span>
                                <span class="ruby-identifier">default_options</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">option</span>
                        <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">end</span>
                <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">options</span> = <span class="ruby-identifier">default_options</span>
        <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">answer</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- answer-source -->
          
        </div>

        

        
      </div><!-- answer-method -->

    
      <div id="method-i-delete_recent_locks" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">delete_recent_locks</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="delete_recent_locks-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 291</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">delete_recent_locks</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:user_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- delete_recent_locks-source -->
          
        </div>

        

        
      </div><!-- delete_recent_locks-method -->

    
      <div id="method-i-details" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">details</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="details-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 230</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">details</span>
        <span class="ruby-identifier">details</span> = {
                <span class="ruby-string">&quot;project_title&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">title</span>,
                <span class="ruby-string">&quot;phase_title&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title</span>,
                <span class="ruby-string">&quot;sections&quot;</span> =<span class="ruby-operator">&gt;</span> {}
        }
        <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">sort_by</span>(&amp;<span class="ruby-value">:&quot;number&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>] = {}
                <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;title&quot;</span>] = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>
                <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>] = {}
                <span class="ruby-identifier">s</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;number&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
                        <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>] = {}
                        <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;question_text&quot;</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span>
                        <span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)
                        <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
            <span class="ruby-identifier">q_format</span> = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">question_format</span>
                                <span class="ruby-keyword">if</span> (<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.checkbox&quot;</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.multi_select_box&quot;</span>) <span class="ruby-operator">||</span>
                                <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.radio_buttons&quot;</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.dropdown&quot;</span>)) <span class="ruby-keyword">then</span>
                                        <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;selections&quot;</span>] = {}
                                        <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span>
                                                <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;selections&quot;</span>][<span class="ruby-identifier">o</span>.<span class="ruby-identifier">number</span>] = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">text</span>
                                        <span class="ruby-keyword">end</span>
                                <span class="ruby-keyword">end</span>
                                <span class="ruby-identifier">details</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">&quot;answer_text&quot;</span>] = <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>
                        <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">details</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- details-source -->
          
        </div>

        

        
      </div><!-- details-method -->

    
      <div id="method-i-dmptemplate" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">dmptemplate</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="dmptemplate-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 36</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">dmptemplate</span>
        <span class="ruby-keyword">self</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">try</span>(<span class="ruby-value">:dmptemplate</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">Dmptemplate</span>.<span class="ruby-identifier">new</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- dmptemplate-source -->
          
        </div>

        

        
      </div><!-- dmptemplate-method -->

    
      <div id="method-i-editable_by" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">editable_by</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="editable_by-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 156</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">editable_by</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">editable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">end</span></pre>
          </div><!-- editable_by-source -->
          
        </div>

        

        
      </div><!-- editable_by-method -->

    
      <div id="method-i-guidance_for_question" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">guidance_for_question</span><span
            class="method-args">(question)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="guidance_for_question-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 81</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">guidance_for_question</span>(<span class="ruby-identifier">question</span>)
        <span class="ruby-identifier">guidances</span> = {}
        <span class="ruby-comment"># If project org isn&#39;t nil, get guidance by theme from any &quot;non-subset&quot; groups belonging to project org
</span>
        <span class="ruby-keyword">unless</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
                        <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">group</span>.<span class="ruby-identifier">optional_subset</span> <span class="ruby-operator">&amp;&amp;</span> (<span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">dmptemplate_id</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword">then</span>
                                <span class="ruby-identifier">group</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
                                        <span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">themes</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">&quot;id IN (?)&quot;</span>, <span class="ruby-identifier">question</span>.<span class="ruby-identifier">theme_ids</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">theme</span><span class="ruby-operator">|</span>
                                                <span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
                                        <span class="ruby-keyword">end</span>
                                <span class="ruby-keyword">end</span>
                        <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>

        <span class="ruby-comment"># Get guidance by theme from any guidance groups selected on creation
</span>
        <span class="ruby-identifier">project</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
                <span class="ruby-keyword">if</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">dmptemplate_id</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">group</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
                                <span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">themes</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">&quot;id IN (?)&quot;</span>, <span class="ruby-identifier">question</span>.<span class="ruby-identifier">theme_ids</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">theme</span><span class="ruby-operator">|</span>
                                        <span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
                                <span class="ruby-keyword">end</span>
                        <span class="ruby-keyword">end</span>
                <span class="ruby-keyword">end</span> 
<span class="ruby-keyword">end</span>
        
        <span class="ruby-comment"># Get guidance by question where guidance group was selected on creation or if group is organisation default
</span>
        <span class="ruby-identifier">question</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
                        <span class="ruby-keyword">if</span> (<span class="ruby-identifier">group</span>.<span class="ruby-identifier">organisation</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">group</span>.<span class="ruby-identifier">optional_subset</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">group</span>) <span class="ruby-keyword">then</span>
                                <span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">guidance</span>)
                        <span class="ruby-keyword">end</span>
    <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>

        <span class="ruby-keyword">return</span> <span class="ruby-identifier">guidances</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- guidance_for_question-source -->
          
        </div>

        

        
      </div><!-- guidance_for_question-method -->

    
      <div id="method-i-latest_update" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">latest_update</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="latest_update-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 321</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">latest_update</span>
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">any?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">last_answered</span> = <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;updated_at DESC&quot;</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">updated_at</span>
                <span class="ruby-keyword">if</span> <span class="ruby-identifier">last_answered</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">updated_at</span> <span class="ruby-keyword">then</span>
                        <span class="ruby-keyword">return</span> <span class="ruby-identifier">last_answered</span>
                <span class="ruby-keyword">else</span>
                        <span class="ruby-keyword">return</span> <span class="ruby-identifier">updated_at</span>
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">return</span> <span class="ruby-identifier">updated_at</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- latest_update-source -->
          
        </div>

        

        
      </div><!-- latest_update-method -->

    
      <div id="method-i-lock_all_sections" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">lock_all_sections</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="lock_all_sections-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 279</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">lock_all_sections</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">lock_section</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-value">1800</span>)
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- lock_all_sections-source -->
          
        </div>

        

        
      </div><!-- lock_all_sections-method -->

    
      <div id="method-i-lock_section" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">lock_section</span><span
            class="method-args">(section_id, user_id, release_time = 60)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="lock_section-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 297</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">lock_section</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-identifier">release_time</span> = <span class="ruby-value">60</span>)
        <span class="ruby-identifier">status</span> = <span class="ruby-identifier">locked</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
        <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;locked&quot;</span>] <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">plan_section</span> = <span class="ruby-constant">PlanSection</span>.<span class="ruby-identifier">new</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">plan_id</span> = <span class="ruby-identifier">id</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">section_id</span> = <span class="ruby-identifier">section_id</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">release_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">release_time</span>.<span class="ruby-identifier">seconds</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">user_id</span> = <span class="ruby-identifier">user_id</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">save</span>
        <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;current_user&quot;</span>] <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">plan_section</span> = <span class="ruby-constant">PlanSection</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;id&quot;</span>])
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">release_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">release_time</span>.<span class="ruby-identifier">seconds</span>
                <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">save</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- lock_section-source -->
          
        </div>

        

        
      </div><!-- lock_section-method -->

    
      <div id="method-i-locked" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">locked</span><span
            class="method-args">(section_id, user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="locked-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 260</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">locked</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
        <span class="ruby-identifier">plan_section</span> = <span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">&quot;section_id = ? AND user_id != ? AND release_time &gt; ?&quot;</span>, <span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>).<span class="ruby-identifier">last</span>
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">status</span> = {
                        <span class="ruby-string">&quot;locked&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">false</span>,
                        <span class="ruby-string">&quot;locked_by&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                        <span class="ruby-string">&quot;timestamp&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                        <span class="ruby-string">&quot;id&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>
                }
        <span class="ruby-keyword">else</span>
                <span class="ruby-identifier">status</span> = {
                        <span class="ruby-string">&quot;locked&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span>,
                        <span class="ruby-string">&quot;locked_by&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">user</span>.<span class="ruby-identifier">name</span>,
                        <span class="ruby-string">&quot;timestamp&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">updated_at</span>,
                        <span class="ruby-string">&quot;id&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">id</span>
                }
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- locked-source -->
          
        </div>

        

        
      </div><!-- locked-method -->

    
      <div id="method-i-readable_by" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">readable_by</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="readable_by-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 160</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">nil?</span>
                <span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- readable_by-source -->
          
        </div>

        

        
      </div><!-- readable_by-method -->

    
      <div id="method-i-section_answers" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">section_answers</span><span
            class="method-args">(section_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="section_answers-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 334</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">section_answers</span>(<span class="ruby-identifier">section_id</span>)
        <span class="ruby-identifier">section</span> = <span class="ruby-constant">Section</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">section_id</span>)
        <span class="ruby-identifier">section_questions</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
        <span class="ruby-identifier">counter</span> = <span class="ruby-value">0</span>
        <span class="ruby-identifier">section</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>] = {}
                <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;id&quot;</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>
                <span class="ruby-comment">#section_questions[counter][&quot;multiple_choice&quot;] = q.multiple_choice
</span>
                <span class="ruby-identifier">q_answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)
                <span class="ruby-keyword">if</span> <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_id&quot;</span>] = <span class="ruby-keyword">nil</span>
                        <span class="ruby-keyword">if</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">suggested_answers</span>.<span class="ruby-identifier">find_by_organisation_id</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation_id</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                                <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_text&quot;</span>] = <span class="ruby-string">&quot;&quot;</span>
                        <span class="ruby-keyword">else</span>
                                <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_text&quot;</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">default_value</span>
                        <span class="ruby-keyword">end</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_timestamp&quot;</span>] = <span class="ruby-keyword">nil</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_options&quot;</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
                <span class="ruby-keyword">else</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_id&quot;</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">id</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_text&quot;</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">text</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_timestamp&quot;</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">created_at</span>
                        <span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">&quot;answer_options&quot;</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>)
                <span class="ruby-keyword">end</span>
                <span class="ruby-identifier">counter</span> = <span class="ruby-identifier">counter</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
        <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">section_questions</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- section_answers-source -->
          
        </div>

        

        
      </div><!-- section_answers-method -->

    
      <div id="method-i-sections" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">sections</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="sections-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 72</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">sections</span>
        <span class="ruby-keyword">unless</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                <span class="ruby-identifier">sections</span> = <span class="ruby-identifier">version</span>.<span class="ruby-identifier">global_sections</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">all_sections</span>(<span class="ruby-identifier">version_id</span>)
        <span class="ruby-keyword">else</span>
                <span class="ruby-identifier">sections</span> = <span class="ruby-identifier">version</span>.<span class="ruby-identifier">global_sections</span>
        <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">sort_by</span> &amp;<span class="ruby-value">:number</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- sections-source -->
          
        </div>

        

        
      </div><!-- sections-method -->

    
      <div id="method-i-settings" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">settings</span><span
            class="method-args">(key)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          <p>Proxy through to the template settings (or defaults if this plan
doesn&#39;t have an associated template) if there are no settings stored
for this plan. `key` is required by rails-settings, so it&#39;s required
here, too.</p>
          

          
          <div class="method-source-code" id="settings-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 29</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">settings</span>(<span class="ruby-identifier">key</span>)
        <span class="ruby-identifier">self_settings</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">super_settings</span>(<span class="ruby-identifier">key</span>)
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">self_settings</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">self_settings</span>.<span class="ruby-identifier">value?</span>

        <span class="ruby-keyword">self</span>.<span class="ruby-identifier">dmptemplate</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-identifier">key</span>)
<span class="ruby-keyword">end</span></pre>
          </div><!-- settings-source -->
          
        </div>

        
        <div class="aliases">
          Also aliased as: <a href="Plan.html#method-i-super_settings">super_settings</a>
        </div>
        

        
      </div><!-- settings-method -->

    
      <div id="method-i-status" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">status</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="status-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 172</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">status</span>
        <span class="ruby-identifier">status</span> = {
                <span class="ruby-string">&quot;num_questions&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
                <span class="ruby-string">&quot;num_answers&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>,
                <span class="ruby-string">&quot;sections&quot;</span> =<span class="ruby-operator">&gt;</span> {},
                <span class="ruby-string">&quot;questions&quot;</span> =<span class="ruby-operator">&gt;</span> {},
                <span class="ruby-string">&quot;space_used&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-comment"># percentage of available space in pdf used
</span>
        }

        <span class="ruby-identifier">space_used</span> = <span class="ruby-identifier">height_of_text</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">title</span>, <span class="ruby-value">2</span>, <span class="ruby-value">2</span>)

        <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1</span>)
                <span class="ruby-identifier">section_questions</span> = <span class="ruby-value">0</span>
                <span class="ruby-identifier">section_answers</span> = <span class="ruby-value">0</span>
                <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>] = {}
                <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">&quot;questions&quot;</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
                <span class="ruby-identifier">s</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
                        <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;num_questions&quot;</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
                        <span class="ruby-identifier">section_questions</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
                        <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">&quot;questions&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>
                        <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {}
                        <span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)

                        <span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>
                        <span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">try</span>(<span class="ruby-value">:text</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">&#39;helpers.plan.export.pdf.question_not_answered&#39;</span>))

                        <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
                                <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {
                                        <span class="ruby-string">&quot;answer_id&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">id</span>,
                                        <span class="ruby-string">&quot;answer_created_at&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">created_at</span>.<span class="ruby-identifier">to_i</span>,
                                        <span class="ruby-string">&quot;answer_text&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>,
                                        <span class="ruby-string">&quot;answer_option_ids&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">option_ids</span>,
                                        <span class="ruby-string">&quot;answered_by&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">user</span>.<span class="ruby-identifier">name</span>
                                }
            <span class="ruby-identifier">q_format</span> = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">question_format</span>
                                <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;num_answers&quot;</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> (<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.checkbox&quot;</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.multi_select_box&quot;</span>) <span class="ruby-operator">||</span>
                                <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.radio_buttons&quot;</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">&quot;helpers.dropdown&quot;</span>)) <span class="ruby-operator">||</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>.<span class="ruby-identifier">present?</span>
                                <span class="ruby-identifier">section_answers</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
                                <span class="ruby-comment">#TODO: include selected options in space estimate
</span>
                        <span class="ruby-keyword">else</span>
                                <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;questions&quot;</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {
                                        <span class="ruby-string">&quot;answer_id&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                                        <span class="ruby-string">&quot;answer_created_at&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                                        <span class="ruby-string">&quot;answer_text&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                                        <span class="ruby-string">&quot;answer_option_ids&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>,
                                        <span class="ruby-string">&quot;answered_by&quot;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">nil</span>
                                }
                        <span class="ruby-keyword">end</span>
                        <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">&quot;num_questions&quot;</span>] = <span class="ruby-identifier">section_questions</span>
                        <span class="ruby-identifier">status</span>[<span class="ruby-string">&quot;sections&quot;</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">&quot;num_answers&quot;</span>] = <span class="ruby-identifier">section_answers</span>
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">end</span>

        <span class="ruby-identifier">status</span>[<span class="ruby-string">&#39;space_used&#39;</span>] = <span class="ruby-identifier">estimate_space_used</span>(<span class="ruby-identifier">space_used</span>)
        <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- status-source -->
          
        </div>

        

        
      </div><!-- status-method -->

    
      <div id="method-i-super_settings" class="method-detail method-alias">
        
        <div class="method-heading">
          <span class="method-name">super_settings</span><span
            class="method-args">(key)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
        </div>

        

        
        <div class="aliases">
          Alias for: <a href="Plan.html#method-i-settings">settings</a>
        </div>
        
      </div><!-- super_settings-method -->

    
      <div id="method-i-title" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">title</span><span
            class="method-args">()</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="title-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 40</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">title</span>
        <span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;Title in settings: #{self.settings(:export).title}&quot;</span>
        <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span>
    <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title?</span> <span class="ruby-keyword">then</span>
        <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title</span>
    <span class="ruby-keyword">else</span>
        <span class="ruby-keyword">return</span> <span class="ruby-string">&quot;DMP title&quot;</span>
                <span class="ruby-keyword">end</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">title</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- title-source -->
          
        </div>

        

        
      </div><!-- title-method -->

    
      <div id="method-i-unlock_all_sections" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">unlock_all_sections</span><span
            class="method-args">(user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="unlock_all_sections-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 285</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unlock_all_sections</span>(<span class="ruby-identifier">user_id</span>)
        <span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:user_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;created_at DESC&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- unlock_all_sections-source -->
          
        </div>

        

        
      </div><!-- unlock_all_sections-method -->

    
      <div id="method-i-unlock_section" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">unlock_section</span><span
            class="method-args">(section_id, user_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="unlock_section-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 315</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unlock_section</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
        <span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:section_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">section_id</span>, <span class="ruby-value">:user_id</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">&quot;created_at DESC&quot;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
                <span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- unlock_section-source -->
          
        </div>

        

        
      </div><!-- unlock_section-method -->

    
      <div id="method-i-warning" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">warning</span><span
            class="method-args">(option_id)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          
          

          
          <div class="method-source-code" id="warning-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 148</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">option_id</span>)
        <span class="ruby-keyword">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span>
                <span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
        <span class="ruby-keyword">else</span>
                <span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">option_id</span>)
        <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- warning-source -->
          
        </div>

        

        
      </div><!-- warning-method -->

    
    </section><!-- public-instance-method-details -->
  
     <section id="private-instance-5Buntitled-5D-method-details" class="method-section section">
      <h3 class="section-header">Private Instance Methods</h3>

    
      <div id="method-i-estimate_space_used" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">estimate_space_used</span><span
            class="method-args">(used_height)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          <p>Based on the height of the text gathered so far and the available vertical
space of the pdf, estimate a percentage of how much space has been used.
This is highly dependent on the layout in the pdf. A more accurate approach
would be to render the pdf and check how much space had been used, but that
could be very slow. NOTE: This is only an estimate, rounded up to the
nearest 5%; it is intended for guidance when editing plan data, not to be
100% accurate.</p>
          

          
          <div class="method-source-code" id="estimate_space_used-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 372</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">estimate_space_used</span>(<span class="ruby-identifier">used_height</span>)
        <span class="ruby-ivar">@formatting</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">formatting</span>

        <span class="ruby-keyword">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:font_size</span>] <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>

        <span class="ruby-identifier">margin_height</span>    = <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:top</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:bottom</span>].<span class="ruby-identifier">to_i</span>
        <span class="ruby-identifier">page_height</span>      = <span class="ruby-constant">A4_PAGE_HEIGHT</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">margin_height</span> <span class="ruby-comment"># 297mm for A4 portrait
</span>
        <span class="ruby-identifier">available_height</span> = <span class="ruby-identifier">page_height</span> * <span class="ruby-keyword">self</span>.<span class="ruby-identifier">dmptemplate</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">max_pages</span>

        <span class="ruby-identifier">percentage</span> = (<span class="ruby-identifier">used_height</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">available_height</span>) * <span class="ruby-value">100</span>
        (<span class="ruby-identifier">percentage</span> <span class="ruby-operator">/</span> <span class="ruby-constant">ROUNDING</span>).<span class="ruby-identifier">ceil</span> * <span class="ruby-constant">ROUNDING</span> <span class="ruby-comment"># round up to nearest five
</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- estimate_space_used-source -->
          
        </div>

        

        
      </div><!-- estimate_space_used-method -->

    
      <div id="method-i-height_of_text" class="method-detail ">
        
        <div class="method-heading">
          <span class="method-name">height_of_text</span><span
            class="method-args">(text, font_size_inc = 0, vertical_margin = 0)</span>
          <span class="method-click-advice">click to toggle source</span>
        </div>
        

        <div class="method-description">
          
          <p>Take a guess at the vertical height (in mm) of the given text based on the
font-size and left/right margins stored in the plan&#39;s settings. This
assumes a fixed-width for each glyph, which is obviously incorrect for the
font-face choices available; the idea is that they&#39;ll hopefully average
out to that in the long-run. Allows for hinting different font sizes
(offset from base via font_size_inc) and vertical margins (i.e. for heading
text)</p>
          

          
          <div class="method-source-code" id="height_of_text-source">
            <pre><span class="ruby-comment"># File app/models/plan.rb, line 392</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">font_size_inc</span> = <span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_margin</span> = <span class="ruby-value">0</span>)
        <span class="ruby-ivar">@formatting</span>     <span class="ruby-operator">||=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">formatting</span>
        <span class="ruby-ivar">@margin_width</span>   <span class="ruby-operator">||=</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:left</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:right</span>].<span class="ruby-identifier">to_i</span>
        <span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:font_size</span>]

        <span class="ruby-keyword">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>

        <span class="ruby-identifier">font_height</span> = <span class="ruby-constant">FONT_HEIGHT_CONVERSION_FACTOR</span> * (<span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">font_size_inc</span>)
        <span class="ruby-identifier">font_width</span>  = <span class="ruby-identifier">font_height</span> * <span class="ruby-constant">FONT_WIDTH_HEIGHT_RATIO</span> <span class="ruby-comment"># Assume glyph width averages at 2/5s the height
</span>
        <span class="ruby-identifier">leading</span>     = <span class="ruby-identifier">font_height</span> <span class="ruby-operator">/</span> <span class="ruby-value">2</span>

        <span class="ruby-identifier">chars_in_line</span> = (<span class="ruby-constant">A4_PAGE_WIDTH</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@margin_width</span>) <span class="ruby-operator">/</span> <span class="ruby-identifier">font_width</span> <span class="ruby-comment"># 210mm for A4 portrait
</span>
        <span class="ruby-identifier">num_lines</span> = (<span class="ruby-identifier">text</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">chars_in_line</span>).<span class="ruby-identifier">ceil</span>

        (<span class="ruby-identifier">num_lines</span> * <span class="ruby-identifier">font_height</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_margin</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">leading</span>
<span class="ruby-keyword">end</span></pre>
          </div><!-- height_of_text-source -->
          
        </div>

        

        
      </div><!-- height_of_text-method -->

    
    </section><!-- private-instance-method-details -->
  
  </section><!-- 5Buntitled-5D -->

</div><!-- documentation -->


<footer id="validator-badges">
  <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
  <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.2.
  <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
</footer>