From 09869623c7f37f27b98c25cab7411fa1f8836c73 Mon Sep 17 00:00:00 2001 From: Bahamin1 Date: Fri, 21 Jun 2024 23:03:59 +0300 Subject: [PATCH] update cart func and add status for table --- src/Dorder/Table.mo | 18 ++++++++++++++---- src/Dorder/main.mo | 32 +++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/src/Dorder/Table.mo b/src/Dorder/Table.mo index 7407c7f..5918f00 100644 --- a/src/Dorder/Table.mo +++ b/src/Dorder/Table.mo @@ -21,7 +21,14 @@ module { reserveTime : ?Time.Time; userWantsToJoin : [Principal]; seatedCustomers : [Principal]; - order : ?Cart.Order; + status : TableStatus; + order : [Cart.CartItem]; + }; + + public type TableStatus = { + #Open; + #OnOrder; + #Finalized; }; public type TableMap = Map.Map; @@ -45,9 +52,10 @@ module { capacity = capacity; reservedBy = null; reserveTime = null; + status = #Open; userWantsToJoin = []; seatedCustomers = []; - order = null; + order = []; }; @@ -72,9 +80,10 @@ module { capacity = table.capacity; reservedBy = ?reservedBy; reserveTime = ?Time.now(); + status = #OnOrder; userWantsToJoin = []; seatedCustomers = []; - order = null; + order = []; }; put(tables, tableId, updatedTable); return #ok(tables); @@ -102,9 +111,10 @@ module { capacity = table.capacity; reservedBy = null; reserveTime = null; + status = #Open; userWantsToJoin = []; seatedCustomers = []; - order = null; + order = []; }; put(tables, tableId, updatedTable); diff --git a/src/Dorder/main.mo b/src/Dorder/main.mo index d964b39..61de06d 100644 --- a/src/Dorder/main.mo +++ b/src/Dorder/main.mo @@ -437,9 +437,39 @@ shared ({ caller = manager }) actor class Dorder() = this { createdAt = Time.now(); }; Map.set(cartMap, phash, caller, newOrder); - return newOrder; + return #ok(newOrder); }; + + public shared ({ caller }) func addOrderToTable(items : [Menu.MenuItem], tableId : Nat) : async Result.Result { + switch (Table.get(tableMap, tableId)) { + case (?table) { + if (table.status == #Finalized) { + return #err("Cannot add order. The table has finalized orders."); + }; + + let newOrder = { + id = Time.now(); + items = items; + totalPrice = items.foldLeft(0, func(acc, item) { acc + item.price }); + tableId = ?tableId; + orderType = #OnTable; + orderStatus = #Pending; + orderedBy = caller; + orderedAt = Time.now(); + finalized = false; + }; + + table.orders.add(newOrder); + Table.put(tableMap, tableId, table); + + return #ok("Order added to table successfully."); + }; + case (null) { + return #err("Table not found."); + }; + }; + }; }; // public shared ({ caller }) func addToCart(menuId : Nat, quantity : Nat) : async Result.Result {