def months_with_items
# Create a hash like
# {"January" => [<OrderLineItem>, <OrderLineItem>], "February" => [...]}
@months_with_items ||= (1..12).to_a.each_with_object({}) do |month_num, obj|
tmp_date = Date.new(@date.shipped_at_min.year, month_num, 1)
month_fulfillments = fulfillments.select do |f|
f.shipped_between?(tmp_date.beginning_of_month, tmp_date.end_of_month.end_of_day)
end
month_fulfillment_line_item_ids = month_fulfillments.map do |f|
f.fulfillment_line_item_ids
end.flatten
month_fulfillment_line_items = fulfillment_line_items.select do |i|
month_fulfillment_line_item_ids.include?(i.id)
end
month_order_line_item_ids = month_fulfillment_line_items.map do |f|
f.order_line_item_id
end
month = Date::MONTHNAMES[month_num]
obj[month] = order_line_items.select{|i| month_order_line_item_ids.include?(i.id)}
end
end
ICBkZWYgbW9udGhzX3dpdGhfaXRlbXMKICAgICMgQ3JlYXRlIGEgaGFzaCBsaWtlCiAgICAjIHsiSmFudWFyeSIgPT4gWzxPcmRlckxpbmVJdGVtPiwgPE9yZGVyTGluZUl0ZW0+XSwgIkZlYnJ1YXJ5IiA9PiBbLi4uXX0KICAgIEBtb250aHNfd2l0aF9pdGVtcyB8fD0gKDEuLjEyKS50b19hLmVhY2hfd2l0aF9vYmplY3Qoe30pIGRvIHxtb250aF9udW0sIG9ianwKICAgICAgdG1wX2RhdGUgPSBEYXRlLm5ldyhAZGF0ZS5zaGlwcGVkX2F0X21pbi55ZWFyLCBtb250aF9udW0sIDEpCgogICAgICBtb250aF9mdWxmaWxsbWVudHMgPSBmdWxmaWxsbWVudHMuc2VsZWN0IGRvIHxmfAogICAgICAgIGYuc2hpcHBlZF9iZXR3ZWVuPyh0bXBfZGF0ZS5iZWdpbm5pbmdfb2ZfbW9udGgsIHRtcF9kYXRlLmVuZF9vZl9tb250aC5lbmRfb2ZfZGF5KQogICAgICBlbmQKCiAgICAgIG1vbnRoX2Z1bGZpbGxtZW50X2xpbmVfaXRlbV9pZHMgPSBtb250aF9mdWxmaWxsbWVudHMubWFwIGRvIHxmfAogICAgICAgIGYuZnVsZmlsbG1lbnRfbGluZV9pdGVtX2lkcwogICAgICBlbmQuZmxhdHRlbgoKICAgICAgbW9udGhfZnVsZmlsbG1lbnRfbGluZV9pdGVtcyA9IGZ1bGZpbGxtZW50X2xpbmVfaXRlbXMuc2VsZWN0IGRvIHxpfCAKICAgICAgICBtb250aF9mdWxmaWxsbWVudF9saW5lX2l0ZW1faWRzLmluY2x1ZGU/KGkuaWQpCiAgICAgIGVuZAoKICAgICAgbW9udGhfb3JkZXJfbGluZV9pdGVtX2lkcyA9IG1vbnRoX2Z1bGZpbGxtZW50X2xpbmVfaXRlbXMubWFwIGRvIHxmfAogICAgICAgIGYub3JkZXJfbGluZV9pdGVtX2lkCiAgICAgIGVuZAoKICAgICAgbW9udGggPSBEYXRlOjpNT05USE5BTUVTW21vbnRoX251bV0KICAgICAgb2JqW21vbnRoXSA9IG9yZGVyX2xpbmVfaXRlbXMuc2VsZWN0e3xpfCBtb250aF9vcmRlcl9saW5lX2l0ZW1faWRzLmluY2x1ZGU/KGkuaWQpfQogICAgZW5kCmVuZA==