[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Бонусный баланс и история операций
braindbrigada
Доброго субботнего дня!

Есть три переменные:

$user_bonus - бонусный баланс клиента
$order_bonus - сумма бонусов оплаченная за заказ
$post_bonus - сумма которую указала администрация при редактирование заказа

Переменные не могут быть только больше нуля.

История записывается в отдельную таблицу в которой учитывается: user_id, order_id, summa, type

Тип - это название операции может быть:
1 - начислено за покупку
2 - списано за покупку
3 - начислено Администрацией
4 - списано Администрацией
5 - списано за отмененный заказ
6 - возврат бонусов

Уже голову сломал чтобы построить логику учитывающую все возможные исходы...

Вот пример суждений:

if($order_bonus == 0 && $user_bonus >= $post_bonus)
// Спишем с баланса клиента $post_bonus
// Запишем в историю сумму $post_bonus списано за покупку
// Запишем в заказ сколько оплачено $post_bonus


if($order_bonus == 0 && $user_bonus < $post_bonus)
// Запишем в историю сумму $post_bonus-$user_bonus начислено Администрацией
// Запишем в историю сумму $post_bonus списано за покупку
// Cпишем с баланса клиента $post_bonus
// Запишем в заказ сколько оплачено $post_bonus



Такой подход считаю не реальным...

Уважаемые, как это правильно делается???

Если не хватает исходных данных буду дополнять. Просто уже голова кругом! :huh:
McLotos
Не совсем понятно что имеется ввиду. Что нужно делать с этими данными?

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
mvg
Пусть СУБД все записывает! Делай соответствующие запросы.
braindbrigada
Задача вести учет бонусных операций и менять значения в бонусном балансе клиента и суммы бонусов в заказе с возможностью администрации прописывать в заказ сумму бонусов большую чем есть на балансе у клиента. Примерно так.
braindbrigada
Цитата (mvg @ 17.01.2015 - 09:55)
Пусть СУБД все записывает! Делай соответствующие запросы.

Будет записывать не в этом геморой, а в условиях. Чтобы записать нужно понять, какое условие произошло и исходя из этого формировать запрос. Вот как предусмотреть все возможные комбинации событий?
braindbrigada
Вроде задача достаточно тривиальная...
braindbrigada
Мне код не нужен - нужен алгоритм.
Razzwan
Ты лучше пример на пальцах напиши, а то довольно сложно понять, что тебе нужно.

Клиент купил весч и ему начислили бонус за покупку, $user_bonus. Так? Что дальше?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
braindbrigada
Сделал сам B)

// Если есть отличия
if($order_bonus != $post_bonus && $this->order->user_id > 0){
// Считаем сумму баланса клиента
$edit_user_bonus = ($user_bonus+$order_bonus)-$post_bonus;
if($edit_user_bonus <= 0){
$edit_user_bonus = 0;
$edit_history_summa = (($user_bonus+$order_bonus)-$post_bonus)*(($user_bonus+$order_bonus)-$post_bonus);
}
// Что записать в историю
if($user_bonus < ($post_bonus-$order_bonus)){
// Начислено Админом
$query = sql_placeholder('INSERT INTO bonus_history(user_id, order_id, summa, type, date) VALUES(?, 0, ?, 3, NOW())',
$this->order->user_id, $post_bonus-$order_bonus);
$this->db->query($query);
// Списано за заказ
$query = sql_placeholder('INSERT INTO bonus_history(user_id, order_id, summa, type, date) VALUES(?, ?, ?, 2, NOW())',
$this->order->user_id, $this->order->order_id, $post_bonus-$order_bonus);
$this->db->query($query);
}else{
if($post_bonus < $order_bonus){
// Возврат бонусов
$query = sql_placeholder('INSERT INTO bonus_history(user_id, order_id, summa, type, date) VALUES(?, ?, ?, 6, NOW())',
$this->order->user_id, $this->order->order_id, $order_bonus-$post_bonus);
$this->db->query($query);
}else{
// Списано за заказ
$query = sql_placeholder('INSERT INTO bonus_history(user_id, order_id, summa, type, date) VALUES(?, ?, ?, 2, NOW())',
$this->order->user_id, $this->order->order_id, $post_bonus-$order_bonus);
$this->db->query($query);
}
}

// Изменим у клиента
if(!empty($edit_user_bonus)){
$query = sql_placeholder('UPDATE users SET bonus=? WHERE user_id=?', $edit_user_bonus, $this->order->user_id);
$this->db->query($query);
}
// Запишим в заказ
$query = sql_placeholder("UPDATE orders SET bonus=? WHERE order_id=?", $post_bonus, $this->order->order_id);
$this->db->query($query);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.