Author: sevein
Date: Thu Jul  5 13:47:41 2012
New Revision: 11858

Log:
Add accruals support and linking existing information objects from the 
accession edit form, issue 2178

Modified:
   trunk/data/fixtures/settings.yml
   trunk/data/fixtures/taxonomyTerms.yml
   trunk/lib/model/QubitTerm.php
   trunk/lib/task/migrate/arUpgrader120.class.php
   trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php
   
trunk/plugins/qtAccessionPlugin/modules/accession/actions/deleteAction.class.php
   
trunk/plugins/qtAccessionPlugin/modules/accession/actions/editAction.class.php
   trunk/plugins/qtAccessionPlugin/modules/accession/templates/deleteSuccess.php
   trunk/plugins/qtAccessionPlugin/modules/accession/templates/editSuccess.php
   trunk/plugins/qtAccessionPlugin/modules/accession/templates/indexSuccess.php

Modified: trunk/data/fixtures/settings.yml
==============================================================================
--- trunk/data/fixtures/settings.yml    Thu Jul  5 13:45:58 2012        (r11857)
+++ trunk/data/fixtures/settings.yml    Thu Jul  5 13:47:41 2012        (r11858)
@@ -3,7 +3,7 @@
     name: version
     editable: 0
     deleteable: 0
-    value: 84
+    value: 85
   QubitSetting_2:
     name: upload_dir
     editable: 0

Modified: trunk/data/fixtures/taxonomyTerms.yml
==============================================================================
--- trunk/data/fixtures/taxonomyTerms.yml       Thu Jul  5 13:45:58 2012        
(r11857)
+++ trunk/data/fixtures/taxonomyTerms.yml       Thu Jul  5 13:47:41 2012        
(r11858)
@@ -985,6 +985,13 @@
       nl: 'naam ontsluitingsterm'
       pt: 'ponto de acesso - nome'
       sl: 'ime vhodne točke'
+  QubitTerm_accrual:
+    taxonomy_id: 49
+    parent_id: 110
+    id: 175
+    source_culture: en
+    name:
+      en: Accrual
   QubitTerm_accession:
     taxonomy_id: 49
     parent_id: 110

Modified: trunk/lib/model/QubitTerm.php
==============================================================================
--- trunk/lib/model/QubitTerm.php       Thu Jul  5 13:45:58 2012        (r11857)
+++ trunk/lib/model/QubitTerm.php       Thu Jul  5 13:47:41 2012        (r11858)
@@ -137,7 +137,10 @@
     RIGHT_BASIS_POLICY_ID = 173,
 
     // Language note
-    LANGUAGE_NOTE_ID = 174;
+    LANGUAGE_NOTE_ID = 174,
+
+    // Accrual relation type
+    ACCRUAL_ID = 175;
 
 
   public function isProtected()
@@ -145,6 +148,7 @@
     // The following terms cannot be edited by users because their values are 
used in application logic
     return in_array($this->id, array(
       QubitTerm::ACCESSION_ID,
+      QubitTerm::ACCRUAL_ID,
       QubitTerm::ACCUMULATION_ID,
       QubitTerm::ALTERNATIVE_LABEL_ID,
       QubitTerm::ARCHIVAL_MATERIAL_ID,

Modified: trunk/lib/task/migrate/arUpgrader120.class.php
==============================================================================
--- trunk/lib/task/migrate/arUpgrader120.class.php      Thu Jul  5 13:45:58 
2012        (r11857)
+++ trunk/lib/task/migrate/arUpgrader120.class.php      Thu Jul  5 13:47:41 
2012        (r11858)
@@ -258,6 +258,10 @@
         // $sql = sprintf('ALTER TABLE %s ADD COLUMN ref_id varchar(255);', 
QubitTerm::TABLE_NAME);
         return false;
 
+      // TODO Add accrual constant to term table
+      case 85:
+        return false;
+
       // Return false if no upgrade available
       default:
         return false;

Modified: trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php
==============================================================================
--- trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php        Thu Jul 
 5 13:45:58 2012        (r11857)
+++ trunk/plugins/qtAccessionPlugin/lib/model/QubitAccession.php        Thu Jul 
 5 13:47:41 2012        (r11858)
@@ -55,6 +55,20 @@
     return parent::delete($connection);
   }
 
+  public function isAccrual()
+  {
+    if (!isset($this->id))
+    {
+      return false;
+    }
+
+    $criteria = new Criteria;
+    $criteria->add(QubitRelation::TYPE_ID, QubitTerm::ACCRUAL_ID);
+    $criteria->add(QubitRelation::OBJECT_ID, $this->id);
+
+    return 0 < count(QubitRelation::get($criteria));
+  }
+
   public static function getAccessionNumber($incrementCounter)
   {
     $setting = QubitSetting::getSettingByName('accession_counter');

Modified: 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/deleteAction.class.php
==============================================================================
--- 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/deleteAction.class.php
    Thu Jul  5 13:45:58 2012        (r11857)
+++ 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/deleteAction.class.php
    Thu Jul  5 13:47:41 2012        (r11858)
@@ -31,6 +31,13 @@
       QubitAcl::forwardUnauthorized();
     }
 
+    // Accruals
+    $criteria = new Criteria;
+    $criteria->add(QubitRelation::TYPE_ID, QubitTerm::ACCRUAL_ID);
+    $criteria->add(QubitRelation::OBJECT_ID, $this->resource->id);
+    $criteria->addJoin(QubitRelation::SUBJECT_ID, QubitAccession::ID);
+    $this->accruals = QubitAccession::get($criteria);
+
     if ($request->isMethod('delete'))
     {
       foreach ($this->resource->deaccessions as $item)

Modified: 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/editAction.class.php
==============================================================================
--- 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/editAction.class.php  
    Thu Jul  5 13:45:58 2012        (r11857)
+++ 
trunk/plugins/qtAccessionPlugin/modules/accession/actions/editAction.class.php  
    Thu Jul  5 13:47:41 2012        (r11858)
@@ -28,6 +28,7 @@
       'creators',
       'date',
       'identifier',
+      'informationObjects',
       'locationInformation',
       'resourceType',
       'physicalCharacteristics',
@@ -212,6 +213,25 @@
 
         break;
 
+      case 'informationObjects':
+        $criteria = new Criteria;
+        $criteria->add(QubitRelation::OBJECT_ID, $this->resource->id);
+        $criteria->add(QubitRelation::TYPE_ID, QubitTerm::ACCESSION_ID);
+
+        ProjectConfiguration::getActive()->loadHelpers('Qubit');
+
+        $value = $choices = array();
+        foreach ($this->informationObjects = QubitRelation::get($criteria) as 
$item)
+        {
+          $choices[$value[] = $this->context->routing->generate(null, 
array($item->subject, 'module' => 'informationobject'))] = 
render_title($item->subject, false);
+        }
+
+        $this->form->setDefault($name, $value);
+        $this->form->setValidator($name, new sfValidatorPass);
+        $this->form->setWidget($name, new sfWidgetFormSelect(array('choices' 
=> $choices, 'multiple' => true)));
+
+        break;
+
       default:
 
         return parent::addField($name);
@@ -272,6 +292,38 @@
       case 'identifier':
         break;
 
+      case 'informationObjects':
+        $value = $filtered = array();
+        foreach ($this->form->getValue('informationObjects') as $item)
+        {
+          $params = $this->context->routing->parse(Qubit::pathInfo($item));
+          $resource = $params['_sf_route']->resource;
+          $value[$resource->id] = $filtered[$resource->id] = $resource;
+        }
+
+        foreach ($this->informationObjects as $item)
+        {
+          if (isset($value[$item->objectId]))
+          {
+            unset($filtered[$item->objectId]);
+          }
+          else
+          {
+            $item->delete();
+          }
+        }
+
+        foreach ($filtered as $item)
+        {
+          $relation = new QubitRelation;
+          $relation->subject = $item;
+          $relation->typeId = QubitTerm::ACCESSION_ID;
+
+          $this->resource->relationsRelatedByobjectId[] = $relation;
+        }
+
+        break;
+
       default:
         return parent::processField($field);
     }
@@ -281,6 +333,27 @@
   {
     parent::execute($request);
 
+    // Parameter "accession" is sent when creating an accrual
+    if (isset($request->accession))
+    {
+      $params = 
$this->context->routing->parse(Qubit::pathInfo($request->accession));
+
+      if (isset($params['_sf_route']))
+      {
+        $this->accession = $params['_sf_route']->resource;
+
+        if ($this->accession->isAccrual())
+        {
+          throw new sfException('This accession can\'t be created.');
+        }
+
+        // Add id of the information object source
+        $this->form->setDefault('accession', $request->accession);
+        $this->form->setValidator('accession', new sfValidatorString);
+        $this->form->setWidget('accession', new sfWidgetFormInputHidden);
+      }
+    }
+
     if ($request->isMethod('post'))
     {
       $this->form->bind($request->getPostParameters());
@@ -299,6 +372,16 @@
           }
         }
 
+        // Relation between accesion will only be accepted if the object is new
+        if (!isset($this->resource->id) && isset($this->accession))
+        {
+          $relation = new QubitRelation;
+          $relation->object = $this->accession;
+          $relation->typeId = QubitTerm::ACCRUAL_ID;
+
+          $this->resource->relationsRelatedBysubjectId[] = $relation;
+        }
+
         $this->processForm();
 
         $this->resource->save();

Modified: 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/deleteSuccess.php
==============================================================================
--- 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/deleteSuccess.php   
    Thu Jul  5 13:45:58 2012        (r11857)
+++ 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/deleteSuccess.php   
    Thu Jul  5 13:47:41 2012        (r11858)
@@ -9,6 +9,15 @@
   </ul>
 <?php endif; ?>
 
+<?php if (0 < count($accruals)): ?>
+  <h2><?php echo __('It has %1% accruals. They will not be deleted.', 
array('%1%' => count($accruals))) ?></h2>
+  <ul>
+    <?php foreach ($accruals as $item): ?>
+      <li><?php echo link_to(render_title($item), array($item, 'module' => 
'accession')) ?></li>
+    <?php endforeach; ?>
+  </ul>
+<?php endif; ?>
+
 <?php echo $form->renderFormTag(url_for(array($resource, 'module' => 
'accession', 'action' => 'delete')), array('method' => 'delete')) ?>
 
   <div class="actions section">

Modified: 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/editSuccess.php
==============================================================================
--- trunk/plugins/qtAccessionPlugin/modules/accession/templates/editSuccess.php 
Thu Jul  5 13:45:58 2012        (r11857)
+++ trunk/plugins/qtAccessionPlugin/modules/accession/templates/editSuccess.php 
Thu Jul  5 13:47:41 2012        (r11858)
@@ -2,6 +2,12 @@
 
 <h1 class="label"><?php echo render_title($resource) ?></h1>
 
+<?php if (isset($accession)): ?>
+  <div class="messages status">
+    <?php echo __('You are creating an accrual of the accession %1%', 
array('%1%' => $accession)) ?>
+  </div>
+<?php endif; ?>
+
 <?php echo $form->renderGlobalErrors() ?>
 
 <?php if (isset($sf_request->getAttribute('sf_route')->resource)): ?>
@@ -106,6 +112,23 @@
 
   </fieldset>
 
+  <fieldset class="collapsible collapsed" id="informationObjectArea">
+
+    <legend><?php echo __('Information object area') ?></legend>
+
+    <div class="form-item">
+      <?php echo $form->informationObjects
+        ->label(__('Information objects'))
+        ->renderLabel() ?>
+      <?php echo $form->informationObjects->render(array('class' => 
'form-autocomplete')) ?>
+      <?php if (QubitAcl::check(QubitActor::getRoot(), 'create')): ?>
+        <input class="add" type="hidden" value="<?php echo 
url_for(array('module' => 'informationobject', 'action' => 'add')) ?> #title"/>
+      <?php endif; ?>
+      <input class="list" type="hidden" value="<?php echo 
url_for(array('module' => 'informationobject', 'action' => 'autocomplete')) 
?>"/>
+    </div>
+
+  </fieldset>
+
   <div class="actions section">
 
     <h2 class="element-invisible"><?php echo __('Actions') ?></h2>

Modified: 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/indexSuccess.php
==============================================================================
--- 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/indexSuccess.php    
    Thu Jul  5 13:45:58 2012        (r11857)
+++ 
trunk/plugins/qtAccessionPlugin/modules/accession/templates/indexSuccess.php    
    Thu Jul  5 13:47:41 2012        (r11858)
@@ -73,6 +73,29 @@
 
   <?php echo render_show(__('Processing notes'), 
render_value($resource->getProcessingNotes(array('cultureFallback' => true)))) 
?>
 
+  <div class="field">
+    <h3><?php echo __('Accruals') ?></h3>
+    <div>
+      <ul>
+        <?php foreach (QubitRelation::getRelationsByObjectId($resource->id, 
array('typeId' => QubitTerm::ACCRUAL_ID)) as $item): ?>
+          <li><?php echo link_to(render_title($item->subject), 
array($item->subject, 'module' => 'accession')) ?></li>
+        <?php endforeach; ?>
+      </ul>
+    </div>
+  </div>
+
+  <div class="field">
+    <h3><?php echo __('Accrued to') ?></h3>
+    <div>
+      <ul>
+        <?php foreach (QubitRelation::getRelationsBySubjectId($resource->id, 
array('typeId' => QubitTerm::ACCRUAL_ID)) as $item): ?>
+          <li><?php echo link_to(render_title($item->object), 
array($item->object, 'module' => 'accession')) ?></li>
+          <?php $accrued = true ?>
+        <?php endforeach; ?>
+      </ul>
+    </div>
+  </div>
+
 </div> <!-- /.section#administrativeArea -->
 
 <div class="section" id="rightsArea">
@@ -90,7 +113,7 @@
   <?php foreach (QubitRelation::getRelationsByObjectId($resource->id, 
array('typeId' => QubitTerm::ACCESSION_ID)) as $item): ?>
 
     <div class="field">
-      <h3>Information object</h3>
+      <h3><?php echo __('Information object') ?></h3>
       <div>
         <?php echo link_to(render_title($item->subject), array($item->subject, 
'module' => 'informationobject')) ?>
       </div>
@@ -107,7 +130,7 @@
   <?php foreach ($resource->deaccessions as $item): ?>
 
     <div class="field">
-      <h3>Deaccession</h3>
+      <h3><?php echo __('Deaccession') ?></h3>
       <div>
         <?php echo link_to(render_title($item), array($item, 'module' => 
'deaccession')) ?>
       </div>
@@ -134,6 +157,10 @@
 
       <li><?php echo link_to(__('Deaccession'), array('module' => 
'deaccession', 'action' => 'add', 'accession' => $resource->id)) ?></li>
 
+      <?php if (!isset($accrued)): ?>
+        <li><?php echo link_to(__('Accrual'), array('module' => 'accession', 
'action' => 'add', 'accession' => url_for(array($resource, 'module' => 
'accession')))) ?></li>
+      <?php endif; ?>
+
       <li><?php echo link_to(__('Create %1%', array('%1%' => 
sfConfig::get('app_ui_label_informationobject'))), array($resource, 'module' => 
'accession', 'action' => 'addInformationObject')) ?></li>
 
     </ul>

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to