Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1.   public function configure()
  2.   {
  3.       $this->embedBeneficiarios();
  4.   }
  5.  
  6.   public function addBeneficiarioForm($key)
  7.   {
  8.     $beneficiarioForm = new PersonaBeneficiarioForm(new Persona());
  9.    
  10.     // embebiendo el nuevo beneficiario en el container
  11.     $this->embeddedForms['beneficiarios']->embedForm($key,$beneficiarioForm);
  12.     // re-embebiendo el formulario container
  13.     $this->embedForm('beneficiarios',$this->embeddedForms['beneficiarios']);
  14.   }
  15.  
  16.   public function updateEmbeddedBeneficiarios($pariente)
  17.   {  
  18.     $values['persona'] = $this->object->getId();
  19.     $values['pariente'] = $pariente->getId();
  20.     $values['beneficiario'] = 1;
  21.     $beneficiario = new Beneficiario();
  22.     $beneficiario->fromArray($values,BasePeer::TYPE_FIELDNAME);
  23.     $beneficiario->save();
  24.   }
  25.  
  26.    protected function getBeneficiarios()
  27.    {
  28.       if (!$this->object->getBeneficiariosRelatedByPersona())
  29.       {
  30.         return new Beneficiario();
  31.       }
  32.       else
  33.       {
  34.       return $this->object->getBeneficiariosRelatedByPersona();
  35.       }
  36.    }
  37.  
  38.   protected function embedBeneficiarios()
  39.   {
  40.     $BeneficiariosForm = new sfForm();
  41.    
  42.     // solo necesitamos embeber al fromulario via ajax
  43.     if (false === sfContext::getInstance()->getRequest()->isXmlHttpRequest())
  44.     {
  45.       $beneficiarios = $this->getObject()->getBeneficiariosRelatedByPersona();
  46.       if(count($beneficiarios) == 0)
  47.       {
  48.     // creamos 1 por default
  49.     for ($i=0; $i<1; $i++)
  50.     {
  51.       $persona = new Persona();
  52. //    $persona->setId($this->getObject()->getId());
  53.       $beneficiarios[] = $persona;
  54.     }
  55.       }
  56.       else
  57.       {
  58.     foreach($beneficiarios as $i => $beneficiario)
  59.     {
  60.       $beneficiarios[$i] = BeneficiarioPeer::toPersona($beneficiario);
  61.     }
  62.       }
  63.       foreach($beneficiarios as $key => $v)
  64.       {
  65.     $beneficiarioForm = new PersonaBeneficiarioForm($v);
  66.     $BeneficiariosForm->embedForm('beneficiario'.($key+1),$beneficiarioForm);
  67.     $BeneficiariosForm->widgetSchema['beneficiario'.($key+1)]->setLabel('Beneficiario '.($key+1));
  68.       }
  69.     }
  70.    
  71.     $this->embedForm('beneficiarios', $BeneficiariosForm);
  72.     $this->widgetSchema['beneficiarios']->setLabel('Beneficiarios');
  73.   }
  74.   /**
  75.   **    Sobreescribirmos el método bind para manejar los formularios embebidos
  76.   **/
  77.   public function  bind(array  $taintedValues = null, array $taintedFiles = null)
  78.   {
  79.     foreach($taintedValues['beneficiarios'] as $key => $form) {
  80.         if(false === $this->embeddedForms['beneficiarios']->offsetExists($key))
  81.     {
  82.       $this->addBeneficiarioForm($key);
  83.     }
  84.     }
  85.     parent::bind($taintedValues,$taintedFiles);
  86.   }
  87.  
  88.   /**
  89.   *  sobreescribimos el método saveEmbeddedForms para que guarde correctamente
  90.   */
  91.   public function saveEmbeddedForms($con = null, $forms = null)
  92.   {
  93.     if(null === $con)
  94.     {
  95.       $con = $this->getConnection();
  96.     }
  97.  
  98.     if(null === $forms)
  99.     {
  100.       $beneficiarios = $this->getValue('beneficiarios');
  101.       $forms = $this->embeddedForms;
  102.      
  103.       foreach($this->embeddedForms['beneficiarios'] as $name => $form)
  104.       {
  105.     if(!isset($beneficiarios[$name]))
  106.     {
  107.       unset($forms['beneficiarios'][$name]);
  108.     }
  109.       }
  110.     }
  111.  
  112.     foreach($forms as $form)
  113.     {
  114.       if($form instanceof sfFormObject)
  115.       {
  116.     if($form->getObject()->isNew())
  117.     {
  118.       $form->saveEmbeddedForms($con);
  119.       $form->getObject()->save($con);
  120.       $this->updateEmbeddedBeneficiarios($form->getObject());
  121.     }
  122.       }
  123.       else
  124.       {
  125.     $this->saveEmbeddedForms($con,$form->getEmbeddedForms());
  126.       }
  127.     }
  128.   }// saveEmbeddedForms()
  129.  
  130. /**
  131. * esto es el action de tu clase actions
  132. */
  133.   public function executeAddBeneficiarioForm(sfWebRequest $request)
  134.   {
  135.     $this->forward404Unless($request->isXmlHttpRequest());
  136.     $number = intval($request->getParameter("num")+1);
  137.     $key = 'beneficiario'.$number;
  138.    
  139.     if($asociado = AsociadoPeer::toPersona(AsociadoPeer::retrieveByPk($request->getParameter('id'))))
  140.     {
  141.       $form = new PersonaForm($asociado);
  142.     }
  143.     else
  144.     {
  145.       $form = new PersonaForm(null);
  146.     }
  147.    
  148.     $form->addBeneficiarioForm($key);
  149.  
  150.     return $this->renderPartial('addBeneficiario',array('field'=>$form['beneficiarios'][$key],'num'=>$number));
  151.   }