If you have experience with ePOS systems you may be familiar with a model that has products or items that represent the items sold in a store. And seperately from that a menu structure, recipe or questions which is used to present the products in a particular way.
This design, where products are distinct from layout makes sense for an ePOS solution as products can have a complex set of properties (tax rates, images, stock levels, weight, various prices depending on where and when sold, etc) and it may be desirable to display the products in different ways - eg. in a single list on device type or in a more hierarchical view on another device type. Seperation of products from their presentation gives flexibility at the expense of complexity.
The Flipdish menu has a different, more focused, set of requirements and requires less flexibility.
It combines the products (MenuSectionItems & MenuOptionSetItems) and layout into a single structure, knows as the Menu.
The Menu is made up of MenuSections which contain MenuSectionItems.
MenuSectionItems may be standalone or contain MenuItemOptionSets. Each MenuItemOptionSet will contain one or more MenuItemOptionSetItem.
A MenuItemOptionSet contains a boolean flag named
IsMasterOptionSet. This would be set to
true for options that could be treated as standalone products, as opposed to additions to a product (eg. "Ketchup") or a modification to a product (eg. "large").
IsMasterOptionSet is set to true on a MenuItemOptionSet, the price of the menu item is calculated based on the MenuItemOptionSetItems in the MenuItemOptionSet, and the price set on the MenuSectionItem is ignored.
An order will consist of a list of MenuSectionItemIds and associated MenuItemOptionSetItemIds.
MenuSections, MenuSectionItems, MenuItemOptionSets and MenuItemOptionSetItems are collectively known as Menu Entities.