Professional Documents
Culture Documents
Project Proposal
Project Proposal
29.02.2024
─
Ogbuji Chibueze
ICPT Web Cafe
53, Labinjo Kalejaiye Street, Oshodi,
Lagos, Nigeria
Overview
Specifications
● Ecommerce - MedusaJs
We will adopt features from the following technologies:
● POS - Odoo Restaurant POS
● Inventory - Odoo MRP
● Table management - Odoo Restaurant POS, Ury POS
● Table reservation - Odoo Appointments
● Kitchen Display System - Ury Mosaic, Odoo Restaurant POS
● Reporting and Analytics - Ury Pulse
Ecommerce
MedusaJs is an open-source, headless ecommerce platform that offers a wide range
of features out-of the-box, including:
● Product management
● Order management
● Inventory management
● Customer management
● Payment processing
● Shipping management
● Tax calculation
● Analytics and reporting
MedusaJs is designed to be flexible and scalable, so it can be used to build a wide variety of
ecommerce stores, from small businesses to large enterprises. It is also well-suited for
headless ecommerce, which allows businesses to create custom storefronts that are
separate from their back-end ecommerce platform.
POS
Odoo Restaurant POS is a comprehensive point-of-sale (POS) system specifically
designed for the restaurant industry. It offers a wide range of features to help you manage
your restaurant efficiently, including:
● Menu management: Create and manage your menus easily, with support for
multiple languages and currencies.
● Payment processing: Accept cash, credit card, and gift card payments and from
customers' mobile devices using NFC or QR codes.
● Order management: Manage orders efficiently, with support for dine-in and
takeaway.
Odoo Restaurant POS is a powerful and easy-to-use POS system that can help you
streamline your restaurant operations and improve customer service.
Menu Management
Odoo Restaurant POS makes menu creation and management easy. You can add items,
categories, and modifiers, and set prices and availability. You can also create multiple
menus for different times of day or different locations.
Payment Processing
Odoo Restaurant POS supports a variety of payment methods, including cash, credit cards,
gift cards; It allows you to sell and manage gift cards, you can create gift cards of any value,
and customers can redeem them in-store or online, mobile payments; it also allows you to
accept payments from customers' mobile devices using NFC or QR codes. This makes it
easy for customers to pay for their meals without having to carry cash or cards. It also has a
feature for split bill payment.
Order Management
Odoo Restaurant POS allows you to manage orders efficiently. You can take orders for
dine-in, takeaway, modify orders, apply discounts and track the status of each order. You
can also print receipts and invoices.
Inventory
Odoo MRP (Manufacturing Resource Planning) can be leveraged as an inventory
specification for ingredients in the Food Frenzy restaurant management system. Here's
how Odoo MRP aligns with the requirements:
2. Real-Time Tracking:
Odoo MRP offers real-time inventory tracking, ensuring accurate visibility of ingredient
levels.
5. Recipe Management:
Recipes can be easily created and associated with BOMs, facilitating accurate ingredient
allocation.
7. Quality Control:
The system supports quality control processes, ensuring ingredients meet desired
standards.
Table Management
The table management system is a key component of the Food Frenzy restaurant
management system. It allows restaurants to manage their tables efficiently and provide a
seamless dining experience for their customers. The URY POS table management system
includes the following features:
● Support for multiple restaurants and locations
● Ability to create and manage table layouts
● Real-time table availability
● Table status updates (e.g., occupied, available, dirty)
● Integration with POS and kitchen display systems
Table Reservation
Odoo Appointments will be integrated into the Food Frenzy restaurant management
system to provide a seamless table reservation experience for customers.
Goals:
● Enable customers to easily reserve tables online or through the mobile app
● Provide real-time availability of tables
● Allow restaurants to manage reservations efficiently
Features:
● Online and mobile reservation booking
● Real-time table availability
● Reservation management
● Waitlist management
● Email and SMS notifications
● Integration with the Food Frenzy POS system
Implementation:
Odoo Appointments will be ported into the Food Frenzy POS system.
The Food Frenzy website and mobile app will be updated to include a reservation booking
widget.
Conclusion
URY Pulse is a powerful reporting and analytics tool that can help Food Frenzy improve its
operations and profitability. Using URY Pulse, Food Frenzy can better understand its
business and make informed decisions that will lead to success.
Milestones
I. Phase 1:
Inventory Management: Simplified inventory management with real-time tracking
and alert for low stock levels.
Ordering System: A seamless ordering process, reducing errors and expediting
order fulfillment from online and POS sales channels.
Sales Tracking: Robust sales tracking capabilities, providing insights into sales trends
and performance.
Customer Relationship Management: Effective customer relationship management
tools to build lasting relationships with customers.
II. Phase 2:
Table Management: Efficient table management to optimize seating arrangements
and reduce wait times for customers.
Reservation System: User-friendly reservation system for easy table booking and
management.
Online Ordering: Convenient online ordering facility for customers to place orders
from the comfort of their homes.
Mobile Application: A mobile application to keep customers connected and engaged
with your restaurant.
III. Phase 3:
Loyalty Program: A loyalty program designed to reward repeat customers and foster
brand loyalty.
Gift Card System: A versatile gift card system suitable for various occasions.
Marketing Automation: Automated marketing tools to reach a wider audience and
drive business growth.
Business Intelligence: Comprehensive business intelligence reports to provide
data-driven insights for informed decision-making.
Entities
● Owner
● Manager
● Chef
● Waiter
● Cashier
● Carrier
● Customer
● Location
● Table
● Reservation
● Order
Customer
Picking a table
When a customer picks a table and scans the QR code, if the table is not reserved, it
shows him a screen where he can choose between signaling a waiter for an order or
self-order.
Note: A waiter is subscribed to signal events.
We run a job (starting from open hour) every minute that runs a script to check the current
time, query the database for reservations happening in 1 hour, filter to find any with a start
time equal to the current time, if any is found, publish a reservation event. In our
reservation event handler, we set the table status to reserved, then set a timer for 15
minutes after which we cancel the reservation if it is not checked-in and set table status to
available. When the customer checks-in for the reservation, we publish a check-in event
that cancels the timer and sets the table status to occupied.
Note: A table can be occupied and reserved at the same time. A check-in is done when a
customer puts in the correct reservation code.
Else, if the table is reserved, we display a list of reservations for check-in or a button to
signal the waiter to ask for an available table. In case of a reservation conflict i.e a table
being reserved after order and there being no available seats, the waiter can move a
pending order to a new table.
Making a reservation
A table can have seats both occupied and reserved i.e. reservation events can occur while a
table is occupied, a code is asked for the reserved seats
A table can also have unoccupied and reserved seats, the customer can signal the waiter or
self-order for the remaining seats
A table can have all seats reserved and then it is locked i.e. reservations are displayed after
the table barcode scan
Simultaneous reservations
If a party of two makes a reservation on a table of four. It is stored in the database
with the table id for the time specified. If another reservation is made for the table for that
same time, it is stored also. When the reservation events are published, they are both
stored on the table reservation list and the table is locked i.e. reservations are displayed
awaiting codes which when input removes the reservation from the table and sets the
reservation to checked-in
A table has a list of reservations for particular times, we show a list of reservations specific
to the customer so he can select and put in his code and allows him to order i.e. becomes
occupied but the table still remains locked as there is still a reservation i.e. occupied and
reserved
First Case - Table is not reserved, scan a barcode, signal waiter or self-order
Second Case - Table is reserved, scan a barcode, display reservations, enter code. Seats are
remaining, self-order or signal waiter for order
Third Case - Table is reserved, scan a barcode, no seats remaining, signal waiter
Example:
A reservation event occurs
Table.reservations.add (Reservation)
If table of 4
3 seats are reserved, 2 are occupied:
If occupied chairs
(get reserved seats – we get the number of seats by looping/mapping
through the reservations and adding up the seats)
If reserved seats > (table.seats - occupied seats)
Lock table i.e. show reservations
Signal waiter for table
If table.seats - reserved seats > 0 (if seats are remaining)
Render self-order and signal waiter for order button
Else if reserved seats
Show reservations
Remaining seats = total seats – reserved seats
(check for occupied) remaining seats = remaining seats -
occupied seat
If (remaining seats <= 0)
Don’t render self-order button (as there are no remaining
seats)
Self-order
As a customer, when I scan a barcode, it opens a page where I have options to see
the menu or signal a Waiter. If the menu icon is clicked, the customer navigates to the
menu page, makes an order and sets how many seats he is ordering for. After the order is
made, he navigates to a page where he can see the order status (processing, done,
delivered) (Note: if all orders are delivered, which is achieved by the waiter clicking
delivered on all orders, we render the “see orders” button) or add another order or see
orders. The see orders button navigates to the order summary page where he can see the
total orders. Clicking on an order shows a drop-down of all menu items belonging to the
order(s) and a check-out button is shown which goes to a payment process page which has
three options:
1. Split bill
2. Card payment
3. Cash
Split bill navigates to a page where we list all orders for the table and the items with
checkmarks next to them so the user can decide which to pay for
Order Processing
There are only three sales channels: Online, POS and via mobile app
Waiter
As a Waiter, I want to take orders and send them to the kitchen. Two tabs are shown – table
layout and takeaway.
POS
On the admin dashboard sidebar navigation menu, we implement a POS menu item.
For the Manager, an “add new” POS session button is rendered which creates a session for
a particular location. Available sessions are shown for the cashier and waiter. A button
which implements a barcode scanner is used to scan the barcode on a table in the
restaurant which allows him to open the table view directly and a table layout button which
displays all the tables. Each table entity is associated with a barcode which encodes the
table id, when the id is resolved, it stores it on the request object and navigates to the main
POS screen where we take an order or from the table layout to the main POS screen. The
waiter sets how many seats are taken and places the order.
Chef
As a chef, I want to mark orders as done on the Kitchen Display Mosaic. (Done
orders are deleted from KDM and shown on the Orders to go page). On the Orders to go
page, the order slip is shown with the order id, type and status, an add button is shown on
the bottom right corner which displays available carriers if the order is online or waiters if
it’s a restaurant order. A carrier/waiter listed on the drop-down has the number of orders
assigned to him shown on the tab. Waitstaff or carriers are notified of orders (note:
waitstaff are subscribed to prepared orders). Chef assigns the waitstaff to deliver the order
(waitstaff is active), when order is delivered, waitstaff clicks done and is inactive)
Customer
● Scan a barcode
● Signal Waiter
○ Table availability
○ Bill payment
○ Make an order
Waitstaff
● Notified by customers for table availability, order, bill
● Scan a table barcode to open table view
● Access to POS
● Send order to kitchen
● Can edit orders
● Accept delivery tasks from Chef, decline delivery task and state reason
Note: During delivery, status shows delivering, when order is marked as done, order
status is set to delivered, and Waiter status is set to active
● Accept payment (Cash or Card)
● Can set status to active/inactive
● Access to Table layout
Note: If a Waiter is on a table, no other waiter can attend to it. A badge displays that the
table is being attended. Waiter get Order Delivery notifications
Chef
● Take orders from POS or Online sales channel
● Mark orders as done. Done orders are shown on the Orders to go page
● Assign Waiter or Carriers to deliver orders
● Access to Kitchen Display Mosaic
Note: All orders both Online and POS are shown on KDM. Chef is a subscriber to Orders
provider and gets notifications. Orders are assigned only to available waitstaff/carriers
Manager
● Create POS sessions
● Reservations CRUD for all reservations. Manage reservations
● Search by reservation code
Cashier
● Access Takeout screen
● Cash Register
● Access POS
Owner
● Create a new Store
● Create/assign staff/role
● Onboarding
User Stories
Onboarding:
● Create Owner Entity
● Associate a Store Entity with the Owner above
Store Management:
● As an owner, I want to create stores and switch between stores – the selected store
is attached to the request object and every entity associated with the store is
retrieved. The store drop-down is a provider to the functions that load entities
User Authentication:
● As an owner, I want to able to create accounts for my staff
● As a staff member, I want to log in securely with a unique username and password
Menu Management:
● As a chef, I want to add, edit, and delete menu items
● As a manager, I want to categorize menu items into sections (appetizers, main
courses, desserts)
Table Management:
● As a host/hostess, I want to assign tables to customers and set how many chairs are
used per order
● As a waiter, I want to know the status of each table (occupied, available, partially
booked, fully booked)
Reservation System:
● As a customer, I want to reserve a table for a specific date and time
● As a manager, I want to view and manage reservations
Inventory Control:
● As a manager, I want to track inventory levels of ingredients
● As a chef, I want to receive notifications for low stock (note: subscriber to low stock
event)
Employee Management:
● As a manager, I want to assign roles and permissions to staff
● As a staff member, I want to view my schedule and update my availability
Order Tracking
● Online
● POS
Features
● User Authentication and Authorization
○ Secure login/logout functionality
○ Role-based access control for different user roles (owner, manager, chef,
waiter, cashier, carrier)
● Menu Management
○ CRUD operations for menu items
○ Menu categorization functionality
● Order Processing
○ Order creation and management
○ Real-time order status updates
○ Integration with payment gateways
● Table Management
○ Table assignment and status tracking
○ Integration with order processing for real-time updates (table is
active/occupied when an order is made, and is made inactive/unavailable
after payment/checkout)
● Reservation System
o Reservation creation and management
(Reservations are canceled, if the customer is not checked-in 15 mins after
the reserved time. A check-in is done when the table barcode is scanned and
the code sent to the customer’s email/phone is input)
Logic: if table is reserved, input reservation code
o Notifications for Manager about upcoming reservations
● Inventory Control
○ Ingredient tracking and updates
○ Notifications for low stock (subscriber to low stock event)
● Employee Management
○ Role assignment and permissions
○ Schedule management for employees
Entities
User Entities:
● Owner
Roles & Permissions
○ Can create a new store and switch between stores
○ Create a POS session (A dropdown item is displayed which creates a new pos
session for the store, we can have multiple sessions.)
○ Create and assign roles to staff
Note: Owner Entity is the admin
● Manager
○ Create a POS session
○ Manage reservations
● Chef
○ Access KDS
○ Assign orders
● Waiter
○ Has access to the pos
○ Has access to table layout
● Cashier
● Carrier/Dispatch Rider
● Customer
Menu Entities
● Menu Item
● Menu Section
Order Entities
● Order
● Order Item
Table Entities
● Table
● Reservation
Inventory Entities
● Ingredient
● Stock
Employee Entities
● Employee
● Role
Reporting Entities
● Sales Report
● Inventory Report
● Employee Performance report
User Stories (continued):
Order Tracking:
Features (continued):
Order Tracking:
Entities (continued):
Order Status
Delivery Status
Features (continued):
Notifications for order status changes to customers (e.g., order accepted, in preparation,
out for delivery, delivered).
Notifications for wait staff regarding new orders and changes in order status.
Entities (continued):
Notification Entities:
Customer Notification
Waitstaff Notification
Additional Features:
Marketing Entities:
Loyalty Program
Feedback
Promotions
Table
● Orders (List)
● Id
● Barcode (automatically created with id on save)
● Name
● Capacity
● Occupied seats
● Location
● Status
● Active
● Reservations (List)
Order
● Id
● Type
● Status (delivered, Done)
● Table id
Location
● Id
● Name
● Active
Reservation
● Seats
● Time
● Code
● Table id
Menu
Medusa catalogs are menu sections e.g. Appetizers, Main Course, Desserts
Real world implementation:
https://codecanyon.net/item/foodking-restaurant-food-delivery-system-with-admin-panel-d
elivery-man-app-restaurant-pos/45845092#