module GroupOrdersHelper def data_to_js(ordering_data) ordering_data[:order_articles].map { |id, data| [id, data[:price], data[:unit], data[:total_price], data[:others_quantity], data[:others_tolerance], data[:used_quantity], data[:quantity_available]] }.map { |row| "addData(#{row.join(', ')});" }.join("\n") end # Returns a link to the page where a group_order can be edited. # If the option :show is true, the link is for showing the group_order. def link_to_ordering(order, options = {}, &block) group_order = order.group_order(current_user.ordergroup) path = if options[:show] && group_order group_order_path(group_order) elsif group_order edit_group_order_path(group_order, :order_id => order.id) else new_group_order_path(:order_id => order.id) end options.delete(:show) name = block_given? ? capture(&block) : order.name path ? link_to(name, path, options) : name end # Return css class names for order result table def order_article_class_name(quantity, tolerance, result) if (quantity + tolerance > 0) result > 0 ? 'success' : 'failed' else 'ignored' end end def get_order_results(order_article, group_order_id) goa = order_article.group_order_articles.detect { |goa| goa.group_order_id == group_order_id } quantity, tolerance, result, sub_total = if goa.present? [goa.quantity, goa.tolerance, goa.result, goa.total_price(order_article)] else [0, 0, 0, 0] end { group_order_article: goa, quantity: quantity, tolerance: tolerance, result: result, sub_total: sub_total } end def get_missing_units_css_class(quantity_missing) if (quantity_missing == 1) return 'missing-few'; elsif (quantity_missing == 0) return '' else return 'missing-many' end end def price_per_base_unit(article:, price:) quantity_unit = QuantityUnit.parse(article.unit) return nil unless quantity_unit.present? scaled_price, base_unit = quantity_unit.scale_price_to_base_unit(price) "#{number_to_currency(scaled_price)}/#{base_unit}" end end