From 6a0b8968159ea90462f4ab34f58ea3105578fce7 Mon Sep 17 00:00:00 2001 From: Sylvain Date: Mon, 10 Oct 2022 10:00:06 +0200 Subject: [PATCH] (bug) ArgumentError (comparison of Integer with nil failed) this crash occured when creating/updating a product without activating the low stock alert --- app/services/orders/order_service.rb | 2 +- app/services/product_service.rb | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/services/orders/order_service.rb b/app/services/orders/order_service.rb index e520f7b8c..6386ed07d 100644 --- a/app/services/orders/order_service.rb +++ b/app/services/orders/order_service.rb @@ -8,7 +8,7 @@ class Orders::OrderService ORDERS_PER_PAGE = 20 def list(filters, current_user) - orders = Order.includes(statistic_profile: [:user]).where(nil) + orders = Order.includes(statistic_profile: [user: [:profile]]).where(nil) orders = filter_by_user(orders, filters, current_user) orders = filter_by_reference(orders, filters, current_user) orders = filter_by_state(orders, filters) diff --git a/app/services/product_service.rb b/app/services/product_service.rb index fe73eaff1..926424dac 100644 --- a/app/services/product_service.rb +++ b/app/services/product_service.rb @@ -50,14 +50,7 @@ class ProductService } end || {} product.stock = remaining_stock - affected_stocks = stock_movements&.map { |m| m[:stock_type] }&.uniq - if (remaining_stock[:internal] < product.low_stock_threshold && affected_stocks&.include?('internal')) || - (remaining_stock[:external] < product.low_stock_threshold && affected_stocks&.include?('external')) - NotificationCenter.call type: 'notify_admin_low_stock_threshold', - receiver: User.admins_and_managers, - attached_object: product - end - product + notify_on_low_stock(product, stock_movements) end def create(product_params, stock_movement_params = []) @@ -173,5 +166,18 @@ class ProductService movements.where(reason: filters[:reason]) end + + def notify_on_low_stock(product, stock_movements) + return product unless product.low_stock_threshold + + affected_stocks = stock_movements&.map { |m| m[:stock_type] }&.uniq + if (remaining_stock[:internal] < product.low_stock_threshold && affected_stocks&.include?('internal')) || + (remaining_stock[:external] < product.low_stock_threshold && affected_stocks&.include?('external')) + NotificationCenter.call type: 'notify_admin_low_stock_threshold', + receiver: User.admins_and_managers, + attached_object: product + end + product + end end end