Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Magento zamiast Fax data dsotawy
Forum PHP.pl > Forum > PHP
designez
Witam, staram się uporać z modyfikacją i nie mogę przejść jednego ostatniego problemu. Chcę w tabeli gdzie domyślnie jest fax umeiścić wybrany termin dostawy.


Tabela "sales_flat_order_address" przechowuje dane klienta i FAX pole które mnie interesuje
Tabela "sales_flat_order" przechowuje inne informacje np "shipping_date"

Mamy integracje z zewnętrznym programem który pobiera zamówienia niestety tylko z jednej tabeli "sales_flat_order_address" i nie możemy dodać własnej kolumny bo XML jest dosyć restrykcyjny (Linnworks)
data dostawy to nasz pomysł i klient ją wybiera dla dużych przedmiotów.

Te tabele nie są tworzone jednocześnie i nie wiem która jest pierwsza a która jako druga. Czy jest możliwość jakimś kluczem przenieść np datę do Fax albo może ktoś ma pomysł jak podczas finalizowania tranzakcji uzyskać
dostęp do tabeli i podmienić dane. Magento ma ogrom plikówuczę się tego i proszę o pomoc.

Obie tabele mają relacje i klucz "entity_id"

Pozdrawiam
viking
A ten zewnętrzny system nie może pobrać danych z widoku? Wtedy byś sobie zapisał co tam potrzebujesz nawet dając może nazwę kolumny specjalną dla systemu.
designez
Magento ma własną walidację i myślę że boją się dopuścić jakieś pole które może mieć niekontrolowany kod.
Niestety musi być to ta sama tabela "sales_flat_order_address"
viking
No to jakiś trigger który zapisze dane gdzie trzeba.
designez
Jest problem nie znam na tyle magebnto nie jest to na zasadzie że napisze sobie kod w php i mam dostęp do bazy wszystko muszę zadeklarować.
W moim przypadku Fax jest w kroku 1 a w 3 gdzie jest wybór daty nie mam już dostępu do sesji fax-u
viking
Tu nie potrzebna ci wiedza z magento tylko samej bazy.
http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

Ustaw żeby before insert on sales_flat_order_address new.fax = data
designez
Nigdy tego nie robiłem mógłbyś mi trochę pomóc.

sales_flat_order_address - kolumna fax tu chcę datę
sales_flat_order - kolumna shipping_date
Obe tabele mają wspólny klucz entity_id

Złączenia itd trigery to niejest moja mocna strona kiedyś po studiach ok ale minęło już trochę czasu i nie kumam już tego.

Pozdrawiam i będę wdzięczny za przykład takiego trigera
darko
Masz gotową metodę API wystawioną do tego celu:
http://www.magentocommerce.com/api/soap/cu...dress.info.html

Do sales także:
http://www.magentocommerce.com/api/soap/sales/sales.html
designez
Po co mi API skoro firma która pobiera zamówienia nie jest w stanie albo nie chcę rozszeżyć ilości pobieranych danuych. Jedyna opcja to wpisanie w Pole Fax daty dostawy.
darko
Skoro tak, to bez customowych rozwiązań się nie obejdzie. Wygląda to tak, że mógłbyś napisać moduł, który wykorzystuje event checkout_type_onepage_save_order_after i w momencie tuż po złożeniu zamówienia w modelu obsługującym ten event po prostu na chama skopiować wybraną datę dostawy do pola przeznaczonego do przechowywania numeru faksu. Inaczej tego nie widzę, jeśli z tą zewnętrzną firmą nie da rady negocjować. Pytanie tylko co robić, jeśli ten numer faksu kiedyś będzie faktycznie potrzebny? Jeśli nie jest nigdzie wykorzystywany obecnie, to można byłoby faktycznie tak zrobić. Zobacz przykład pobrania adresu po id zamówienia:
http://stackoverflow.com/questions/3600452...ore-api#4819873
designez
Właśnie niestety firma nie chcę zmieniać pliku importu już interweniowaliśmy w tej sprawie. Jedyne co nam zasugerowali to umieszczenie tych danych w Fax. Tego pola nigdy nie będziemy wykorzystywać to relikt przeszłości. Może ten triger to dobre rozwiązanie brzmi sensownie ja niestety nigdy czegoś takiego nie robiłem.
ctom
Cytat(designez @ 1.12.2015, 13:29:32 ) *
Po co mi API

srsly? smile.gif


Cytat(designez @ 1.12.2015, 13:29:32 ) *
Jedyna opcja to wpisanie w Pole Fax daty dostawy.


skup się na tym .... ale nie 'after order' tylko zmodyfikuj przygotowywane dane "eksportowe" dla zewnetrzenj usługi - pewnie korzystają z SOAP a nie szorują Ci po bazie .... każdą klase możesz rozszerzyć i nadpisać jej metody tym samym zwrócić im w polach co chcesz ( może prawie co chcesz)

designez
poniższy kod działa jest jeden problem. Wychodzi na to że Magento najpierw zapisuje "sales_flat_order" potem "sales_flat_order_address" więc nie mogę pobrać danych bo ich tam jeszcze nie ma


  1. CREATE OR REPLACE TRIGGER sales
  2. after INSERT ON sales_flat_order
  3. FOR each row
  4.  
  5. UPDATE sales_flat_order_address v
  6. INNER JOIN sales_flat_order vi ON v.parent_id = vi.entity_id
  7. SET v.fax = vi.shipping_date
  8. WHERE v.parent_id = LAST_INSERT_ID()
  9.  


Witam, poniższy triger nie działa. Neistety nie mamy unikalnych wartości poza id które są takei same w obu tabelach.
  1. CREATE OR REPLACE TRIGGER sales
  2. after INSERT ON sales_flat_order_status_history
  3. FOR each row
  4.  
  5. UPDATE sales_flat_order_address v
  6. INNER JOIN sales_flat_order vi ON v.parent_id = vi.entity_id
  7. SET v.fax = vi.shipping_date
  8. WHERE v.parent_id = LAST_INSERT_ID()



Natomiast ten działa jednak dla wszystkich rekordów. Jak zrobić aby zmianiał datę tylko w 2 świeżych rekordach po najwyższym ID
  1. CREATE OR REPLACE TRIGGER sales
  2. after INSERT ON sales_flat_order_status_history
  3. FOR each row
  4.  
  5. UPDATE sales_flat_order_address v
  6. INNER JOIN sales_flat_order vi ON v.parent_id = vi.entity_id
  7. SET v.fax = vi.shipping_date
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.