Chciałbym aby podczas zmiany statusu zamówienia w wygenerowanym adminie zmieniał się automatycznie status wszystkich produktów składających się na to zamówienie.

Stworzyłem więc w pliku backend/modules/zamowienie/actions/actions.class.php metodę executeUpdate() i dodałem kod, który ma to zrobić, tzn. zmodyfikować produkty powiązane z edytowanym właśnie zamówieniem.

Problem polega na tym, że gdy ta metoda się wykonuje to statusy produktów co prawda się zmieniają, ale jednocześnie są kasowane relacje zamowienie_produkt z bazy. Więc kończę ze zmienonym zamówieniem (OK), zmienionymi produktami (OK), ale ze skasowanymi powiązaniami zamówienia z produktami (NIE OK). Będę wdzięczny za wskazówki co robię niewłaściwie.

Moja metoda executeUpdate() wygląda tak:

  1. class zamowienieActions extends autoZamowienieActions
  2. {
  3. public function executeUpdate(sfWebRequest $request)
  4. {
  5. $zamowienie = $this->getRoute()->getObject();
  6. $formularz = $request->getParameter('zamowienie');
  7.  
  8. if($formularz['zamowienie_status_id'] != $zamowienie->getZamowienieStatusId())
  9. {
  10. # zmieniono status zamówienia
  11. if(ZamowienieStatusPeer::retrieveByPk($formularz['zamowienie_status_id'])->getSlug() == 'rozliczone')
  12. {
  13. foreach($zamowienie->getZamowienieProdukts() as $produkt)
  14. {
  15. $c = new Criteria();
  16. $c->add(ProduktStatusPeer::SLUG, 'sprzedany');
  17. $produkt->getProdukt()->setProduktStatus(ProduktStatusPeer::doSelectOne($c));
  18. $produkt->getProdukt()->save();
  19. }
  20. }
  21. }
  22.  
  23. parent::executeUpdate($request);
  24. }
  25. }


Ok, rozwiązałem problem. Patrząc na jego przyczynę widzę, że po tym co napisałem nie dało mi się pomóc smile.gif
Otóż wyświetlałem sobie pod formularzem edycji zamówienia partial z listą produktów. Ale nigdzie nie wyświetlałem widgetu zamowienie_produkt_list wobec czego wyglądało jakbym zawsze odznaczał wszystkie powiązania przed wysłaniem formularza. Efektem było kasowanie relacji łączących zamówienie z produktem. Pozdrawiam.