Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Magento zamiast Fax data dsotawy
designez
post
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
designez
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


No to jakiś trigger który zapisze dane gdzie trzeba.
Go to the top of the page
+Quote Post
designez
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
designez
post
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
darko
post
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
designez
post
Post #9





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
darko
post
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
designez
post
Post #11





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ctom
post
Post #12





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


Cytat(designez @ 1.12.2015, 13:29:32 ) *
Po co mi API

srsly? (IMG:style_emoticons/default/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)

Go to the top of the page
+Quote Post
designez
post
Post #13





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

Ostrzeżenie: (0%)
-----


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


Ten post edytował designez 2.12.2015, 17:28:08
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 16:45