Class: CloverSandboxSimulator::Services::Clover::InventoryService
- Inherits:
-
BaseService
- Object
- BaseService
- CloverSandboxSimulator::Services::Clover::InventoryService
- Defined in:
- lib/clover_sandbox_simulator/services/clover/inventory_service.rb
Overview
Manages Clover inventory: categories, items, modifiers
Instance Attribute Summary
Attributes inherited from BaseService
Instance Method Summary collapse
-
#associate_item_with_category(item_id, category_id) ⇒ Object
Associate item with category.
-
#associate_item_with_modifier_group(item_id, modifier_group_id) ⇒ Object
Associate a modifier group with an item.
-
#create_category(name:, sort_order: nil) ⇒ Object
Create a category.
-
#create_item(name:, price:, category_id: nil, sku: nil, hidden: false) ⇒ Object
Create an item.
-
#create_modifier(modifier_group_id:, name:, price: 0) ⇒ Object
Create a modifier within a group.
-
#create_modifier_group(name:, min_required: 0, max_allowed: nil) ⇒ Object
Create a modifier group.
-
#delete_all ⇒ Object
Delete all categories and items.
-
#delete_category(category_id) ⇒ Object
Delete a category.
-
#delete_item(item_id) ⇒ Object
Delete an item.
-
#delete_modifier_group(modifier_group_id) ⇒ Object
Delete a modifier group.
-
#get_categories ⇒ Object
Fetch all categories.
-
#get_items ⇒ Object
Fetch all items.
-
#get_modifier_groups ⇒ Object
Fetch all modifier groups.
Methods inherited from BaseService
Constructor Details
This class inherits a constructor from CloverSandboxSimulator::Services::BaseService
Instance Method Details
#associate_item_with_category(item_id, category_id) ⇒ Object
Associate item with category
66 67 68 69 70 71 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 66 def associate_item_with_category(item_id, category_id) logger.debug "Associating item #{item_id} with category #{category_id}" request(:post, endpoint("category_items"), payload: { "elements" => [{ "item" => { "id" => item_id }, "category" => { "id" => category_id } }] }) end |
#associate_item_with_modifier_group(item_id, modifier_group_id) ⇒ Object
Associate a modifier group with an item
109 110 111 112 113 114 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 109 def associate_item_with_modifier_group(item_id, modifier_group_id) logger.debug "Associating item #{item_id} with modifier group #{modifier_group_id}" request(:post, endpoint("item_modifier_groups"), payload: { "elements" => [{ "item" => { "id" => item_id }, "modifierGroup" => { "id" => modifier_group_id } }] }) end |
#create_category(name:, sort_order: nil) ⇒ Object
Create a category
18 19 20 21 22 23 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 18 def create_category(name:, sort_order: nil) logger.info "Creating category: #{name}" payload = { "name" => name } payload["sortOrder"] = sort_order if sort_order request(:post, endpoint("categories"), payload: payload) end |
#create_item(name:, price:, category_id: nil, sku: nil, hidden: false) ⇒ Object
Create an item
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 43 def create_item(name:, price:, category_id: nil, sku: nil, hidden: false) logger.info "Creating item: #{name} ($#{price / 100.0})" payload = { "name" => name, "price" => price, "priceType" => "FIXED", "hidden" => hidden, "defaultTaxRates" => true } payload["sku"] = sku if sku item = request(:post, endpoint("items"), payload: payload) # Associate with category if provided if item && category_id associate_item_with_category(item["id"], category_id) end item end |
#create_modifier(modifier_group_id:, name:, price: 0) ⇒ Object
Create a modifier within a group
100 101 102 103 104 105 106 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 100 def create_modifier(modifier_group_id:, name:, price: 0) logger.info "Creating modifier: #{name} in group #{modifier_group_id}" request(:post, endpoint("modifier_groups/#{modifier_group_id}/modifiers"), payload: { "name" => name, "price" => price }) end |
#create_modifier_group(name:, min_required: 0, max_allowed: nil) ⇒ Object
Create a modifier group
89 90 91 92 93 94 95 96 97 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 89 def create_modifier_group(name:, min_required: 0, max_allowed: nil) logger.info "Creating modifier group: #{name}" payload = { "name" => name, "minRequired" => min_required } payload["maxAllowed"] = max_allowed if max_allowed request(:post, endpoint("modifier_groups"), payload: payload) end |
#delete_all ⇒ Object
Delete all categories and items
123 124 125 126 127 128 129 130 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 123 def delete_all logger.warn "Deleting all inventory..." get_items.each { |item| delete_item(item["id"]) } get_categories.each { |cat| delete_category(cat["id"]) } logger.info "All inventory deleted" end |
#delete_category(category_id) ⇒ Object
Delete a category
26 27 28 29 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 26 def delete_category(category_id) logger.info "Deleting category: #{category_id}" request(:delete, endpoint("categories/#{category_id}")) end |
#delete_item(item_id) ⇒ Object
Delete an item
74 75 76 77 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 74 def delete_item(item_id) logger.info "Deleting item: #{item_id}" request(:delete, endpoint("items/#{item_id}")) end |
#delete_modifier_group(modifier_group_id) ⇒ Object
Delete a modifier group
117 118 119 120 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 117 def delete_modifier_group(modifier_group_id) logger.info "Deleting modifier group: #{modifier_group_id}" request(:delete, endpoint("modifier_groups/#{modifier_group_id}")) end |
#get_categories ⇒ Object
Fetch all categories
9 10 11 12 13 14 15 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 9 def get_categories logger.info "Fetching categories..." response = request(:get, endpoint("categories")) elements = response&.dig("elements") || [] logger.info "Found #{elements.size} categories" elements end |
#get_items ⇒ Object
Fetch all items
32 33 34 35 36 37 38 39 40 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 32 def get_items logger.info "Fetching items..." response = request(:get, endpoint("items"), params: { expand: "categories,modifierGroups" }) elements = response&.dig("elements") || [] # Filter out deleted items active_items = elements.reject { |item| item["deleted"] == true } logger.info "Found #{active_items.size} active items" active_items end |
#get_modifier_groups ⇒ Object
Fetch all modifier groups
80 81 82 83 84 85 86 |
# File 'lib/clover_sandbox_simulator/services/clover/inventory_service.rb', line 80 def get_modifier_groups logger.info "Fetching modifier groups..." response = request(:get, endpoint("modifier_groups"), params: { expand: "modifiers" }) elements = response&.dig("elements") || [] logger.info "Found #{elements.size} modifier groups" elements end |