/**
  * Update the procedures for this element with the given ids.
  *
  * @param $procedure_ids
  *
  * @throws Exception
  */
 public function updateProcedures($procedure_ids)
 {
     $current_procedures = array();
     foreach ($this->procedure_assignments as $pa) {
         $current_procedures[$pa->proc_id] = $pa;
     }
     foreach ($procedure_ids as $i => $proc_id) {
         $display_order = $i + 1;
         if (isset($current_procedures[$proc_id])) {
             $procedure_assignment = $current_procedures[$proc_id];
             if ($procedure_assignment->display_order != $display_order) {
                 $procedure_assignment->display_order = $display_order;
                 if (!$procedure_assignment->save()) {
                     throw new Exception('Unable to save procedure assignment');
                 }
             }
             unset($current_procedures[$proc_id]);
         } else {
             $procedure_assignment = new OphTrOperationnote_ProcedureListProcedureAssignment();
             $procedure_assignment->procedurelist_id = $this->id;
             $procedure_assignment->proc_id = $proc_id;
             $procedure_assignment->display_order = $display_order;
             if (!$procedure_assignment->save()) {
                 throw new Exception('Unable to save procedure assignment');
             }
         }
     }
     // delete remaining current procedures
     foreach ($current_procedures as $pa) {
         if (!$pa->delete()) {
             throw new Exception('Unable to delete procedure assignment: ' . print_r($pa->getErrors(), true));
         }
     }
 }