Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Сохранять изначальную дату оплаты при отмене заказа #565

Open
f213 opened this issue Oct 23, 2021 · 5 comments
Labels
enhancement New feature or request

Comments

@f213
Copy link
Contributor

f213 commented Oct 23, 2021

Сейчас при возврате заказа мы сохраняем дату возврата и трём дату оплаты — это нужно, чтобы заказ повторно не отправился. Нужно где-нибудь сохранять и изначальную дату оплаты — так мы сможем строить кешфлоу по дням.

@f213 f213 added the enhancement New feature or request label Oct 23, 2021
@Abdujabbar
Copy link
Contributor

Я думаю наверное будет правильно не трогать данные в поле paid, и просто добавить поле cancel(cancel_date), и при отмене просто записывать дату отмены. Такой вариант не подойдет-ли?

@f213
Copy link
Contributor Author

f213 commented Jan 7, 2022

Это норм, но придётся перелопачивать всю бизнес-логику, в которой мы проверяем заказ на то, что он оплачен. К примеру вот это.

К тому же нам придётся перелопачивать все аналитические дешборды, которые ходят в БД, чтобы они учитывали новый признак.

А раз уж так придётся делать, то я бы вообще подумал над нормально ахритектурой биллинга. Думаю, следующий шаг в рамках этой задачи — сделать нормальную архитектуру, и его должен сделать я.

@paulinenik
Copy link
Contributor

Сделано в рамках частичных возвратов - тут

@f213
Copy link
Contributor Author

f213 commented Apr 22, 2024

А можешь пожалуйста здесь явно прописать, как и какие поля сейчас себя ведут при возврате? Ну, или в коде.

А то сейчас логика довольно сложная, из кода не считывается

@paulinenik
Copy link
Contributor

Было
При возврате мы терли дату оплаты paid и записывали дату возврата unpaid.
При этом для дашбордов, к примеру, чтобы посчитать деньги за период, мы берём все заказы, у которых paid is not null and between period_start and period_end и делаем SUM(price * acquiring_percent).
В таком случае заказы с возвратами в эту аналитику не попадали

Проблема
Для частичных возвратов такой подход не работает, ведь заказы по-прежнему оставались бы paid, а значение price не отражало бы реального положения дел, потому что не учитывало бы возвраты - дашборды отражали бы неправильные данные

Стало
Добавили денормализацию цены заказа. При оформлении возврата мы сохраняем дату оплаты paid, дату возврата храним в модели Refund, а order.price при каждом возврате уменьшаем на сумму возврата. Таким образом, мы в дашбордах делаем аналитику с учетом возвратов, а значение order.price = initial order price - already refunded amount

Комментарий в коде тоже добавила

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants