Zrobiłem zwrot i zmienił mi się historyczny zysk. Dlaczego?
Wystawienie zwrotu każe WooCommerce przeliczyć koszt każdej pozycji pierwotnego zamówienia bieżącym kosztem produktu. To rdzeń i nie da się tego cofnąć.
Krótka odpowiedź
Bo wystawienie zwrotu każe WooCommerce przeliczyć koszt każdej pozycji pierwotnego zamówienia z kosztu produktu takiego, jaki jest dzisiaj — a nie z kosztu zapisanego w chwili sprzedaży.
Jeśli cena zakupu zmieniła się w międzyczasie, zapisana historia zmienia się razem z nią. To zachowanie rdzenia WooCommerce, dotyczy każdej wtyczki czytającej to pole i nie ma ustawienia, które by je wyłączyło.
Co naprawdę robi WooCommerce
Na końcu wc_create_refund(), już po zapisaniu zwrotu, rdzeń robi to zamówieniu
nadrzędnemu:
if ( ...->feature_is_enabled() && $order->has_cogs() ) {
$order->calculate_cogs_total_value();
}
$order->save();
a przeliczenie sumy zamówienia przechodzi po każdej pozycji, wołając calculate_cogs_value(),
które czyta bieżący koszt produktu. Zapis zamówienia wpisuje potem wszystkie te pozycje z powrotem.
Czyli zwrot jednej sztuki przepisuje zapisany koszt wszystkich pozycji tego zamówienia. A jeśli koszt produktu został w międzyczasie wyczyszczony, przeliczenie daje zero — co, jak opisano w koszt zero a brak kosztu, kasuje wartość zamiast ją zapisać. Pierwotny koszt przepada bezpowrotnie.
Co z tym zrobić
- Zmieniaj koszty, nie czyść ich. Wyzerowanie pola kosztu to jedyny ruch, który zamienia zwrot w trwałą utratę danych na tym zamówieniu.
- Eksportuj CSV na koniec każdego miesiąca. Dziesięć sekund, a dostajesz zapis tego, jak miesiąc wyglądał w chwili zamknięcia. To jedyna obrona, która nie zależy od tego, czy rdzeń zmieni zachowanie.
- Spodziewaj się niewielkich rozjazdów na zamówieniach ze zwrotami i wiedz, skąd biorą się, zamiast podejrzewać raport.
Jak to pokazuje Merchgain
Merchgain pokazuje to, co jest w bazie. Nie trzyma drugiej, własnej kopii historii kosztów i nie zapisuje niczego do zamówienia — więc nie może Cię przed tym uchronić i nie będzie udawał, że rozjazdu nie ma.
To także powód, dla którego eksport CSV jest w wersji darmowej i tam zostanie: dla sklepu, który wystawia zwroty, comiesięczny eksport jest różnicą między posiadaniem historii kosztów a wiarą, że nic jej nie przepisało.
Powiązane odpowiedzi
Nie zgadza się z tym, co widzisz w sklepie? Napisz — każda wiadomość jest czytana. contact@merchgain.com