foxskav Posted July 1, 2016 Share Posted July 1, 2016 (edited) Witam, Potrzebuje obliczyć wartości rabatów dla każdego z produktów w zamówieniu. Presta łączy wszystkie wartości i podaje sumę. Niestety dla moich potrzeb to za mało. Idealnym rozwiązaniem byłoby dodanie do ps_order_detail kolumny z wartością rabatu dla produktu. Czy jest jakieś rozwiązanie na to? Pozdrawiam Edited July 1, 2016 by foxskav (see edit history) Link to comment Share on other sites More sharing options...
tomekmo Posted July 14, 2016 Share Posted July 14, 2016 Też przyłączę się do pytania, a przynajmniej dobrze by było aby w panelu w podsumowaniu zamówienia podać sumę po rabacie bez kosztów wysyłki. Link to comment Share on other sites More sharing options...
foxskav Posted July 15, 2016 Author Share Posted July 15, 2016 Na ten moment wiem tyle: Wszystkie rabaty są przeliczane w koszyku i z koszyka leci cena końcowa. classes/CartRule.php W zależności od sposobu naliczanego rabatu odpowiednia funkcja jest odpowiedzialna za to. Udało mi się zdobyć ID koszyka, ID produktu, Cenę po rabacie. Dalej nie wiem jak to zrobić żeby to miało ręce i nogi. Póki co dla testu wysyłam te dane do osobnej tabeli. Link to comment Share on other sites More sharing options...
milosz_sulkowski Posted July 12, 2018 Share Posted July 12, 2018 (edited) Czy ktoś znalazł rozwiązanie? Edited July 13, 2018 by milosz_sulkowski (see edit history) Link to comment Share on other sites More sharing options...
design4VIP Posted August 5, 2019 Share Posted August 5, 2019 On 7/12/2018 at 12:43 PM, milosz_sulkowski said: Czy ktoś znalazł rozwiązanie? przylacze sie do pytania Link to comment Share on other sites More sharing options...
foxskav Posted August 6, 2019 Author Share Posted August 6, 2019 Tak urzeźbiłem to dawno temu. Ogólnie robiłem to poprzez php + zapytania mySQL. Najpierw pobierałem wszystkie rabaty do zamówienia. Jedyne zapytanie jakie znalazłem SELECT o_c_r.id_order, c_r_p_r_v.id_item, c_r_p_r.type, c_r_p_r.id_product_rule, c_r_p_r.id_product_rule_group, c_r_p_r_g.id_cart_rule, o_c_r.value, c_r.reduction_percent, c_r.reduction_amount FROM ps_order_cart_rule o_c_r LEFT JOIN ps_cart_rule c_r ON (o_c_r.id_cart_rule = c_r.id_cart_rule) LEFT JOIN ps_cart_rule_product_rule_group c_r_p_r_g ON (c_r.id_cart_rule=c_r_p_r_g.id_cart_rule) LEFT JOIN ps_cart_rule_product_rule c_r_p_r ON (c_r_p_r_g.id_product_rule_group=c_r_p_r.id_product_rule_group) LEFT JOIN ps_cart_rule_product_rule_value c_r_p_r_v ON (c_r_p_r.id_product_rule = c_r_p_r_v.id_product_rule) WHERE o_c_r.id_order = Dane te wprowadzałem do tablicy. Później każdy produkt w zamówieniu sprawdzałem czy pasuje według tej tablicy czy pasuje po manufacturers, products, categories ( przy kategoriach też pobierałem wszystkie kategorie produktu do tablicy i porównywałem każda kategorie). Link to comment Share on other sites More sharing options...
design4VIP Posted August 6, 2019 Share Posted August 6, 2019 Dzięki, jest to jakiś trop. Chociaż mój cel jest nieco inny. Chcę pozbierać wszystkie produkty z przedziału czasu i korzystając z 'wholesale_price' wyliczać realny zarobek uwzględniając rabaty i reguły cenowe. Ale tak patrząc "na sucho" (bo do komputera siądę dopiero wieczorem) też powyższe może być bardzo przydatne. Jeszcze raz dzięki Link to comment Share on other sites More sharing options...
marcin_jaworski Posted August 6, 2019 Share Posted August 6, 2019 (edited) W prestashop są tak jakby dwa rodzaje rabatów. 1 .Rabaty na produktach, na przykład można ustawić, że przy zakupie 5 sztuk produkt jest tańszy. 2. Rabat/kody rabatowe na całe zamówienie. Da się zrobić przeliczenie rabatu koszykowego na produkty, ale nie jest to dobre rozwiązanie, po pierwsze jest problem z zaokrągleniami. Prosty przykład, klient kupił jeden produkt za 1000zł i 100szt. produktu za 1zł. Zrobił rabat na 200zł. Jaki rabat ma dostać produkt kupiony za 1zł? Moim zdaniem to jest bez sensu, po prostu co innego jest rabat na zamówieniu, a co innego rabat na produkcie. Edited August 6, 2019 by marcin_jaworski (see edit history) Link to comment Share on other sites More sharing options...
design4VIP Posted August 6, 2019 Share Posted August 6, 2019 (edited) oczywiscie jak najbardziej sie zgodze. jednak zaokraglenie to najmniejszy problem, grosz w jedna czy druga. to raczej do celow informacyjnych ile w rzeczywistosci sie zarobilo (plus/minus) niz dane ksiegowe wiesz jak to jest.. Klient placi, Klient wymaga. takie cos sobie moj Klient wymyslil i kombinuj nie wazne czy jest do zrobienia czy nie. a wymaganiem jest rozbicie zamowienia na pojedyncze produkty, zsumowanie produktow identycznych, wykaz zarobku itp. bajery... kiedys jak siedzialem w Presta dniami i nocami moze poszlo by i szybciej, myslenie tez inne, ale od dluzszego czasu w presta w ogole nie siedzialem z racji zmiany branzy, teraz to juz tak hobbistycznie po pracy, po godzinach grzebie i tok myslowy juz nie ten.... dawniej nie takie "przekrety" sie robilo na presta takze kazde najmniejsza wskazowka jest na wage zlota Edited August 6, 2019 by design4VIP (see edit history) Link to comment Share on other sites More sharing options...
marcin_jaworski Posted August 6, 2019 Share Posted August 6, 2019 Ok. Jeżeli tych rabatow nie musi widziec kupujacy to w sumie wszystkie potrzebne rzeczy beda w tabeli ps_orders, ps_orders_detail jakos tak. Tam sa kwoty do zaplacenia bez rabatow i z rabatami. Mozesz yo zrobic tworzac modul, ktory korzysta z hooka orderafter, nie pamietam jak dokladnie sie nazywa. Znajdziesz w dokumentacji. Zeby modul byl "ladny"' to chyba lepiej zeby mial swoje tabele w ktorych beda te nowe rabaty. Jezeli to ma byc widoczne na froncie to musisz kombinowac z koszykiem. Link to comment Share on other sites More sharing options...
design4VIP Posted August 6, 2019 Share Posted August 6, 2019 (edited) nie nie, to tylko ma byc widoczne dla sprzedawcy w module. poukladac to w helpery, formy, tabele itp to juz najmniejszy problem. w sumie to juz mam gotowe wraz z szablonami tabeli itp. zostala kwestia wyciagniecia danych. ps_orders, ps_orders_detail za wiele nie daje bo wszedzie rabaty np. ilsociowe sa juz w tabelach laczone, jak sama nazwa wskazuje sa to "reguly koszyka" wiec presta juz pokracznie wszystko laczy w calosciowe rabaty dla zamowienia a nie rozgranicza na produkty. poniekad ma to jakis sens optymalizacyjny. zawsze to mniej zapytan do bazy danych. ale jak widac... niekiedy psuje pomysly i komplikuje prace a ten hook? pierwsze slysze o takim... ze niby co w nim mialo by sie przed zamowieniem robic? w ktorym miejscu mialby sie wywolywac i przez ktory kontroler? to ma byc Action/Display? co w nim mialo by sie robic przed zamowieniem ? moze chodzilo o OrderConfirmation? EDIT znalazlem cos takiego w OrderDetail::setDetailProductPrice() teoretycznie to chyba to o co mi chodzi, tylko w odwrotnej kolejnosci moze spotkal ktos fukcje odwrotna do tej i dla tablicy zamowien Order a nie pojedynczego... i jeszcze jedno pytanie, bo juz chyba dzisiaj zagotowalem sie za bardzo i ciezko mi myslec... jak z id_order wyciagnac id_cart z ktorego powstalo zamowienie? nie chodzi mi o zapytanie do bazy, bo jak nie znajde to napisze fukcje gdzie wycigagne konretnie co bede chcial bez smieci. chodzi mi oajas gotowa fukcje do podpiecia. mam $id_order i potrzebuje wyciagniac tylko $id_cart Edited August 6, 2019 by design4VIP (see edit history) Link to comment Share on other sites More sharing options...
marcin_jaworski Posted August 6, 2019 Share Posted August 6, 2019 Można w sumie to podczepić pod jakiś hook display Order, ale wtedy to będzie się liczyło wiele razy, wiec chyba lepiej to obliczyć w action po złożeniu zamówienia i gdzieś zapisać. Z tym id_cart to możesz przejrzeć klasy Order i Cart tam coś może być. W bazie koszyk jest powiązany poprzez id_order w ps_cart. Hooki 1.6 https://mypresta.eu/en/art/developer/prestashop-hook-list.html Hooki 1.7 https://devdocs.prestashop.com/1.7/modules/concepts/hooks/list-of-hooks/ Chyba musisz porobić zamówienia i sprawdzać co jak się w bazie zapisuje. Wydaje mi się, że `ps_orders`.`total_discounts` to jest cały rabat koszykowy, a `ps_order_detail`.`reduction_amount`, `ps_order_detail`.`reduction_percent` to chyba będą specyficzne ceny na produktach. Ja jak robiłem rozbijanie na produkty to było coś takiego Sekwencja obliczeń 1. Obliczamy udział procentowy kwoty rabatu w wartości produktów objętych rabatem 2. Obniżamy ceny jednostkowe brutto o wyliczony procent rabatu i zaokrąglamy do dwóch miejsc po przecinku Czyli obliczałem rabat koszykowy ( `ps_orders`.`total_discounts` ) jaki to jest procent od kwoty zamówienia bez rabatu. Kwota zamówienia bez rabatu to będzie `ps_orders`.`total_products_wt` (z podatkiem) + `ps_orders`.`total_shipping_tax_incl` i później ten wyliczony procent odejmowałem od kwoty zakupu produktu. To będzie w ps_order_detail. Link to comment Share on other sites More sharing options...
design4VIP Posted August 7, 2019 Share Posted August 7, 2019 Właśnie nie za bardzo wchodzi kwestia forzucania czegoś do tabeli. To byłoby najprostsze i najszybsze rozwiązanie. Ale już jest multum zamówień, które też mają być w wykazach.... Czyli to odpada. Kontrolery ju przeglądałem i za cholerne nie mogę znaleźć czegoś typu getIdCartfromIdOrder() ale to najmniejszy pikuś. To sobie wyciągnę z bazy. A rozbicie i obliczanie tak jak to opisujesz nie za bardzo się nadaje. Przyklad: w koszyku jest 10 produktów z reguła ilościowe (przypisany rabat) i 2 produkty z ceną specyficzna. Tu już za bardzo nie rozdziele procentowo reguły koszyka.... Nic, kombinuje dalej. Jak da się wyliczyć w podsumowaniu zamówienia rabaty w jedną stronę to i musi dać się w drugą Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now