Update of Order Cycle Management Reports to align with functionality of other reports

This commit is contained in:
Lynne Davis
2015-06-01 13:36:53 +01:00
parent 7de692b968
commit 24c3660ef6
3 changed files with 85 additions and 62 deletions

View File

@@ -72,14 +72,38 @@ Spree::Admin::ReportsController.class_eval do
end
def order_cycle_management
# -- Prepare parameters
params[:q] ||= {}
if params[:q][:completed_at_gt].blank?
params[:q][:completed_at_gt] = Time.zone.now.beginning_of_month
else
params[:q][:completed_at_gt] = Time.zone.parse(params[:q][:completed_at_gt]) rescue Time.zone.now.beginning_of_month
end
if params[:q] && !params[:q][:completed_at_lt].blank?
params[:q][:completed_at_lt] = Time.zone.parse(params[:q][:completed_at_lt]) rescue ""
end
params[:q][:meta_sort] ||= "completed_at.desc"
# -- Prepare form options
my_distributors = Enterprise.is_distributor.managed_by(spree_current_user)
my_suppliers = Enterprise.is_primary_producer.managed_by(spree_current_user)
# My distributors and any distributors distributing products I supply
@distributors = my_distributors | Enterprise.with_distributed_products_outer.merge(Spree::Product.in_any_supplier(my_suppliers))
# My suppliers and any suppliers supplying products I distribute
@suppliers = my_suppliers | my_distributors.map { |d| Spree::Product.in_distributor(d) }.flatten.map(&:supplier).uniq
@order_cycles = OrderCycle.active_or_complete.accessible_by(spree_current_user).order('orders_close_at DESC')
@report_types = REPORT_TYPES[:order_cycle_management]
@report_type = params[:report_type]
# -- Build Report with Order Grouper
@report = OpenFoodNetwork::OrderCycleManagementReport.new spree_current_user, params
@table = @report.table_items
csv_file_name = "#{params[:report_type]}_#{timestamp}.csv"
@search = Spree::Order.complete.not_state(:canceled).managed_by(spree_current_user).search(params[:q])
@orders = @search.result
render_report(@report.header, @report.table, params[:csv], "order_cycle_management_#{timestamp}.csv")
render_report(@report.header, @table, params[:csv], "order_cycle_management_#{timestamp}.csv")
end
def packing

View File

@@ -1,47 +1,46 @@
= form_tag spree.order_cycle_management_admin_reports_url do |f|
%br
= label_tag nil, "Order Cycle: "
= select_tag(:order_cycle_id,
options_for_select(report_order_cycle_options(@order_cycles), params[:order_cycle_id]),
include_blank: true)
%br
%br
= label_tag nil, "Payment Methods (hold Ctrl to select multiple payment methods)"
%br
= form_for @report.search, :url => spree.order_cycle_management_admin_reports_path do |f|
= render 'date_range_form', f: f
= select_tag(:payment_method_name,
options_for_select(report_payment_method_options(@orders), params[:payment_method_name]),
multiple: true, include_blank: true, size: 10)
%br
%br
= label_tag nil, "Shipping Method: "
= select_tag(:shipping_method_name,
options_for_select(report_shipping_method_options(@orders), params[:shipping_method_name]),
include_blank: true)
%br
%br
= label_tag nil, "Report Type: "
= select_tag(:report_type, options_for_select(@report_types, @report_type))
%br
%br
= check_box_tag :csv
= label_tag :csv, "Download as csv"
%br
%br
.row
.alpha.two.columns= label_tag nil, "Hubs: "
.omega.fourteen.columns= f.collection_select(:distributor_id_in, @distributors, :id, :name, {}, {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, "Order Cycles: "
.omega.fourteen.columns
= f.select(:order_cycle_id_in, report_order_cycle_options(@order_cycles), {selected: params[:q][:order_cycle_id_in]}, {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, "Payment Methods: "
.omega.fourteen.columns= select_tag(:payment_method_in, options_for_select(report_payment_method_options(@report.orders), params[:payment_method_in]), {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, "Shipping Methods: "
.omega.fourteen.columns= select_tag(:shipping_method_in, options_for_select(report_shipping_method_options(@report.orders), params[:shipping_method_in]), {class: "select2 fullwidth", multiple: true})
.row
.alpha.two.columns= label_tag nil, "Report Type: "
.omega.fourteen.columns= select_tag(:report_type, options_for_select(@report_types, @report_type))
.row
= check_box_tag :csv
= label_tag :csv, "Download as csv"
.row
= button t(:search)
%br
%br
%table#listing_order_payment_methods.index
%table#listing_ocm_orders.index
%thead
%tr{'data-hook' => "orders_header"}
- @report.header.each do |heading|
%th=heading
%tbody
- @report.table.each do |row|
- @table.each do |row|
%tr
- row.each do |column|
%td= column
- if @report.table.empty?
- if @table.empty?
%tr
%td{:colspan => "2"}= t(:none)

View File

@@ -16,24 +16,28 @@ module OpenFoodNetwork
end
end
def table
def search
Spree::Order.complete.where("spree_orders.state != ?", :canceled).managed_by(@user).search(params[:q])
end
def orders
filter search.result
end
def table_items
if is_payment_methods?
orders.map { |o| payment_method_row o }
else
orders.map { |o| delivery_row o }
end
end
end
def orders
filter Spree::Order.managed_by(@user).distributed_by_user(@user).complete.where("spree_orders.state != ?", :canceled)
end
def filter(orders)
filter_to_order_cycle filter_to_payment_method filter_to_shipping_method orders
def filter(search_result)
filter_to_payment_method filter_to_shipping_method search_result
end
private
private
def payment_method_row(order)
ba = order.billing_address
@@ -70,32 +74,28 @@ module OpenFoodNetwork
]
end
def filter_to_payment_method(orders)
if params[:payment_method_name].present?
orders.with_payment_method_name(params[:payment_method_name])
def filter_to_payment_method(search_result)
if params[:payment_method_in].present?
search_result.with_payment_method_name(params[:payment_method_in])
else
orders
search_result
end
end
def filter_to_shipping_method(orders)
if params[:shipping_method_name].present?
orders.joins(:shipping_method).where("spree_shipping_methods.name = ?", params[:shipping_method_name])
def filter_to_shipping_method(search_result)
if params[:shipping_method_in].present?
search_result.joins(:shipping_method).where("spree_shipping_methods.name = ?", params[:shipping_method_in])
else
orders
end
end
def filter_to_order_cycle(orders)
if params[:order_cycle_id].present?
orders.where(order_cycle_id: params[:order_cycle_id])
else
orders
search_result
end
end
def has_temperature_controlled_items?(order)
order.line_items.any? { |line_item| line_item.product.shipping_category.andand.temperature_controlled }
if order.line_items.any? { |line_item| line_item.product.shipping_category.andand.temperature_controlled }
"Yes"
else
"No"
end
end
def is_payment_methods?