База данных инвентаря для торговой точки (любая х за £ х) - PullRequest
0 голосов
/ 26 марта 2012

Я работаю над системой инвентаризации / счета-фактуры, написанной на MySQL / PHP (возможно, с каким-то интерфейсом Access, а также с веб-интерфейсом).

Проблема в том, что я хочу инвентаризацию продуктовуметь справляться с товарами со скидками на несколько магазинов, такими как «любые два за £ 10».Я хочу, чтобы, если, скажем, 10 единиц товара были добавлены к счету, он может сработать, если какой-либо из этих пунктов соответствует требованиям «любой x за £ x» и применить скидку.Дополнительным осложнением является то, что любой товар может иметь различные множественные скидки, такие как «любые 2 за £ 10», а также «любые 3 за £ 12».По сути, это то, что делают супермаркеты - это легко и просто для конечного пользователя.

Это прекрасно работает, если я хочу, чтобы какой-либо элемент SAME был введен в ту же строку счета, но он должен быть более гибким, чем этот.

У кого-нибудь есть идеи, как мне это сделать?Заранее спасибо.Я очень хорошо с HTML / MySQL / PHP / JavaScript и т. Д.

Ответы [ 3 ]

0 голосов
/ 26 марта 2012

Я бы создал объект, представляющий различные скидки (я буду использовать синтаксис C #)

public interface IOrderProcessor
{
   bool CanBeApplied(OrderItem item);
   void Apply(OrderItem item);
}

public class TwoForOneProcessor : IOrderProcessor
{
   public bool CanApply(OrderItem item)
   {
      // check if the product is in 2 for 1 discount
   }

   public void Apply(OrderItem orderItem)
   {
      // apply the discount
   }
}

и обработчик заказов, который возьмет все объекты скидки и применит их к товарам в заказе. Данные для процессора могут быть сохранены в базе данных (то есть, к какому продукту они могут быть применены и т. Д.)

0 голосов
/ 26 марта 2012

Возможно, вам потребуется создать некую таблицу «скидок», в которой будет содержаться базовая информация о скидке, например уникальный идентификатор и описание (это также может быть связано с правилами приемлемости, необходимыми для активации этой скидки - промо-код дляпример).

Эта таблица также должна содержать правила создания пакетов скидок для вашего примера, например, «количество продуктов, необходимых для запуска скидки» и «стоимость пакета» - для гибкости этих полейдолжно быть NULLable, чтобы у вас не было для использования пакетов;Вы можете использовать отдельные цены, определенные в таблице «скидка товара».

В качестве базового примера вы можете иметь таблицу скидок, например:

+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ...         | ...            | ...          | ...        | ...      |

... и ссылку product_to_discount.Таблица типа:

+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ...        | ...         | ...            | ...        |

Затем вы связываете продукты со скидками, поэтому, если у вас есть что-то вроде «Купите 3 предмета из этого диапазона всего за 10 фунтов стерлингов», вам нужно будет связать весь ассортиментвозможные подходящие товары со скидкой и установите units_required на 3 - тогда, если какие-либо 3 из этих предметов находятся в «корзине», примените bundle_price.

Возможно, вам придется выполнить некоторую фильтрацию, чтобы отсортироватькакой пакет имеет преимущество, если существует более одной возможности (возможно, путем расчета, который дает наибольшую скидку).

Другая возможность с такой установкой заключается в том, что она также позволяет вам делать намного более простые скидки.Вы можете просто оставить units_required и bundle_price как NULL и связать только один продукт со скидкой;потенциально много раз с разными ценовыми разрывами при разных значениях product_to_discount.units_required - так что вы можете установить значение скидки для отдельного продукта или большую скидку на единицу для больших объемов.

Вы также можете добавить в поле, напримерproduct_to_discount.product_is_discount, если вы хотите сделать что-то вроде «Купите X, Y или Z и получите Q БЕСПЛАТНО».

Это довольно расплывчатый план, но я надеюсь, что это поможет вам указать «правильное» направление...

О, еще одна вещь, которую следует иметь в виду, если ваша система ведет какие-либо учетные записи, вам нужно будет передать «линию дисконта», чтобы учесть расхождения между ожидаемой ценой продукта и дисконтированнойодин.

0 голосов
/ 26 марта 2012

Работая с PHP и MySQL, вы можете иметь таблицу «скидок», в которой вы сохраняете идентификатор продукта, количество продуктов, цену и название предложения. Таким образом, с помощью простого запроса, когда вы вычисляете окончательное значение для счета, который вы проверяете по таблице, существует ли предложение для каждого продукта:

SELECT * FROM discounts WHERE product_id = x AND quantity >= y

Итак, в итоге у вас есть таблица продуктов и цен и соответствующая таблица предложений.

...