Exemplo n.º 1
0
 /**
  * @param \DLigo\Animaltool\Domain\Model\Animal $animal
  * @param \DLigo\Animaltool\Domain\Model\Owner $owner
  * @param array<\DLigo\Animaltool\Domain\Model\Bread> $bread
  * @param string $tag
  * @param array $externals
  * @param array $treatments   
  * @Flow\Validate (argumentName="$treatments", type="\DLigo\Animaltool\Validation\Validator\TreatmentValidator",options={"isArray"=true} )
  * @Flow\Validate (argumentName="$animal.photo", type="NotEmpty")
  * @return void
  */
 public function updateAction(Animal $animal, $owner, $bread, $tag, $externals = array(), $treatments = array())
 {
     if ($animal->getIsPrivate()) {
         $animal->setRFID($tag);
         $oldowner = $animal->getOwner();
         if ($oldowner) {
             foreach (array('Name', 'FirstName', 'IDNumber', 'CNP', 'Phone', 'Street', 'HouseNumber', 'ZipCode', 'City', 'Region', 'Country', 'PassId', 'Comment') as $field) {
                 $get = 'get' . $field;
                 $set = 'set' . $field;
                 $oldowner->{$set}($owner->{$get}());
             }
         } else {
             $animal->setOwner($owner);
         }
     } else {
         $animal->setEarTag($tag);
         $animal->setOwner(null);
     }
     foreach ($externals as $eid => $eArray) {
         $external = $this->externalRepository->findByIdentifier($eid);
         foreach (array('name', 'firstName', 'lastName', 'externalType', 'isPermanent', 'phone', 'street', 'houseNumber', 'zipCode', 'city', 'region', 'country', 'comment') as $field) {
             $set = 'set' . ucfirst($field);
             $external->{$set}($eArray[$field]);
         }
         if ($external->getExternalType() == \DLigo\Animaltool\Domain\Model\External::CLINIC) {
             $external->setIsPermanent(false);
         }
         if ($external->getExternalType() == \DLigo\Animaltool\Domain\Model\External::ADOPTION) {
             $external->setIsPermanent(true);
         }
         if ($external->getIsPermanent()) {
             $external->stopExternal();
         } else {
             $open = true;
         }
         $this->externalRepository->update($external);
     }
     foreach ($treatments as $trid => $treatArray) {
         $treatment = $this->treatmentRepository->findByIdentifier($trid);
         $treatment->setComment($treatArray['comment']);
         $doctor = $this->userRepository->findByIdentifier(isset($treatArray['doctor']['__identity']) ? $treatArray['doctor']['__identity'] : $treatArray['doctor']);
         $treatment->setDoctor($doctor);
         $therapies = new \Doctrine\Common\Collections\ArrayCollection();
         $extras = new \Doctrine\Common\Collections\ArrayCollection();
         if (is_array($treatArray['therapies'])) {
             foreach ($treatArray['therapies'] as $thid) {
                 $therapy = $this->therapyRepository->findByIdentifier($thid);
                 if ($therapy->getHasExtraData()) {
                     $extra = $this->treatmentExtraRepository->findByTherapyAndTreatment($thid, $treatment)->getFirst();
                     if (!$extra) {
                         $extra = new \DLigo\Animaltool\Domain\Model\TreatmentExtra();
                         $extra->setTreatment($treatment);
                         $extra->setTherapy($therapy);
                     }
                     $extra->setValue($treatArray['treatmentExtra'][$thid]);
                     unset($treatArray['treatmentExtra'][$thid]);
                     $extras->add($extra);
                 }
                 $therapies->add($therapy);
             }
         }
         $treatment->setTherapies($therapies);
         $treatment->setTreatmentExtras($extras);
         $this->treatmentRepository->update($treatment);
         if (isset($treatArray['treatmentExtra']) && is_array($treatArray['treatmentExtra'])) {
             foreach ($treatArray['treatmentExtra'] as $thid => $value) {
                 $extra = $this->treatmentExtraRepository->findByTherapyAndTreatment($thid, $treatment)->getFirst();
                 if ($extra != null) {
                     $this->treatmentExtraRepository->remove($extra);
                 }
             }
         }
     }
     $speciesid = $this->persistenceManager->getIdentifierByObject($animal->getSpecies());
     /*    $breadid=isset($bread[$speciesid]['__identity'])?$bread[$speciesid]['__identity']:$bread[$speciesid];
         $animal->setBread($this->breadRepository->findByIdentifier($breadid));
     */
     $animal->setBread($bread[$speciesid]);
     $this->animalRepository->update($animal);
     $this->addFlashMessage('Updated the animal.', '', \TYPO3\Flow\Error\Message::SEVERITY_OK, array(), 'flash.animal.update');
     $this->redirect('index');
 }