From 1273cc085bb5de58f61a1af59103be2cfb382551 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Fri, 12 Oct 2018 17:13:03 +0800 Subject: [PATCH] Include payment fees in enterprise fee summary --- config/locales/en.yml | 2 + .../enterprise_fee_type_total_summarizer.rb | 28 +++++- .../reports/enterprise_fee_summary/scope.rb | 86 +++++++++++++------ .../report_service_spec.rb | 14 ++- 4 files changed, 95 insertions(+), 35 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 1a0ae8547a..a209afda26 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -2695,6 +2695,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using enterprise_fee_summary: date_end_before_start_error: "must be after start" fee_calculated_on_transfer_through_all: "All" + fee_type: + payment_method: "Payment Transaction" fee_placements: supplier: "Incoming" distributor: "Outgoing" diff --git a/lib/order_management/reports/enterprise_fee_summary/enterprise_fee_type_total_summarizer.rb b/lib/order_management/reports/enterprise_fee_summary/enterprise_fee_type_total_summarizer.rb index e3c5b8683a..0c81ee1f3a 100644 --- a/lib/order_management/reports/enterprise_fee_summary/enterprise_fee_type_total_summarizer.rb +++ b/lib/order_management/reports/enterprise_fee_summary/enterprise_fee_type_total_summarizer.rb @@ -9,15 +9,27 @@ module OrderManagement end def fee_type - data["fee_type"].capitalize if data["fee_type"] + if for_payment_method? + i18n_translate("fee_type.payment_method") + else + data["fee_type"].try(:capitalize) + end end def enterprise_name - data["enterprise_name"] + if for_payment_method? + data["payment_hub_name"] + else + data["enterprise_name"] + end end def fee_name - data["fee_name"] + if for_payment_method? + data["payment_method_name"] + else + data["fee_name"] + end end def customer_name @@ -25,10 +37,14 @@ module OrderManagement end def fee_placement + return if for_payment_method? + i18n_translate("fee_placements.#{data['placement_enterprise_role']}") end def fee_calculated_on_transfer_through_name + return if for_payment_method? + transfer_through_all_string = i18n_translate("fee_calculated_on_transfer_through_all") data["incoming_exchange_enterprise_name"] || data["outgoing_exchange_enterprise_name"] || @@ -36,6 +52,8 @@ module OrderManagement end def tax_category_name + return if for_payment_method? + data["tax_category_name"] || data["product_tax_category_name"] end @@ -45,6 +63,10 @@ module OrderManagement private + def for_payment_method? + data["payment_method_name"].present? + end + def i18n_translate(translation_key) I18n.t("order_management.reports.enterprise_fee_summary.#{translation_key}") end diff --git a/lib/order_management/reports/enterprise_fee_summary/scope.rb b/lib/order_management/reports/enterprise_fee_summary/scope.rb index e6557fd772..c9b160b8b0 100644 --- a/lib/order_management/reports/enterprise_fee_summary/scope.rb +++ b/lib/order_management/reports/enterprise_fee_summary/scope.rb @@ -13,11 +13,12 @@ module OrderManagement protected def setup_default_scope - find_adjustments_for_enterprise_fees + find_adjustments_for_enterprise_fees_and_payment_methods include_adjustment_metadata - include_enterprise_fee_details include_order_details + include_payment_fee_details + include_enterprise_fee_details include_line_item_details include_incoming_exchange_details include_outgoing_exchange_details @@ -26,8 +27,8 @@ module OrderManagement select_attributes end - def find_adjustments_for_enterprise_fees - find_adjustments.for_orders.for_enterprise_fees + def find_adjustments_for_enterprise_fees_and_payment_methods + find_adjustments.for_orders.for_enterprise_fees_and_payment_methods end def find_adjustments @@ -42,9 +43,9 @@ module OrderManagement end end - def for_enterprise_fees + def for_enterprise_fees_and_payment_methods chain_to_scope do - where(originator_type: "EnterpriseFee") + where(originator_type: ["EnterpriseFee", "Spree::PaymentMethod"]) end end @@ -57,6 +58,50 @@ module OrderManagement ) end + # Includes: + # * Order + # * Customer + def include_order_details + join_scope( + <<-JOIN_STRING.strip_heredoc + LEFT OUTER JOIN spree_orders + ON ( + spree_adjustments.adjustable_type = 'Spree::Order' + AND spree_orders.id = spree_adjustments.adjustable_id + ) + JOIN_STRING + ) + + join_scope("LEFT OUTER JOIN customers ON (customers.id = spree_orders.customer_id)") + end + + # If for payment fee + # + # Includes: + # * Payment method + # * Hub + def include_payment_fee_details + join_scope( + <<-JOIN_STRING.strip_heredoc + LEFT OUTER JOIN spree_payment_methods + ON ( + spree_adjustments.originator_type = 'Spree::PaymentMethod' + AND spree_payment_methods.id = spree_adjustments.originator_id + ) + JOIN_STRING + ) + + join_scope( + <<-JOIN_STRING.strip_heredoc + LEFT OUTER JOIN enterprises AS payment_hubs + ON ( + spree_payment_methods.id IS NOT NULL + AND payment_hubs.id = spree_orders.distributor_id + ) + JOIN_STRING + ) + end + # Includes: # * Enterprise fee # * Enterprise @@ -87,23 +132,6 @@ module OrderManagement ) end - # Includes: - # * Order - # * Customer - def include_order_details - join_scope( - <<-JOIN_STRING.strip_heredoc - LEFT OUTER JOIN spree_orders - ON ( - spree_adjustments.adjustable_type = 'Spree::Order' - AND spree_orders.id = spree_adjustments.adjustable_id - ) - JOIN_STRING - ) - - join_scope("LEFT OUTER JOIN customers ON (customers.id = spree_orders.customer_id)") - end - # If for line item - Use data only if spree_line_items.id is present # # Includes: @@ -225,6 +253,7 @@ module OrderManagement def group_data chain_to_scope do group("enterprise_fees.id", "enterprises.id", "customers.id", + "spree_payment_methods.id", "payment_hubs.id", "adjustment_metadata.enterprise_role", "spree_tax_categories.id", "product_tax_categories.id", "incoming_exchange_enterprises.id", "outgoing_exchange_enterprises.id") @@ -235,11 +264,12 @@ module OrderManagement chain_to_scope do select( <<-JOIN_STRING.strip_heredoc - SUM(spree_adjustments.amount) AS total_amount, enterprises.name AS enterprise_name, - enterprise_fees.fee_type AS fee_type, customers.name AS customer_name, - customers.email AS customer_email, enterprise_fees.fee_type AS fee_type, - enterprise_fees.name AS fee_name, spree_tax_categories.name AS tax_category_name, - product_tax_categories.name AS product_tax_category_name, + SUM(spree_adjustments.amount) AS total_amount, spree_payment_methods.name AS + payment_method_name, payment_hubs.name AS payment_hub_name, enterprises.name AS + enterprise_name, enterprise_fees.fee_type AS fee_type, customers.name AS + customer_name, customers.email AS customer_email, enterprise_fees.fee_type AS + fee_type, enterprise_fees.name AS fee_name, spree_tax_categories.name AS + tax_category_name, product_tax_categories.name AS product_tax_category_name, adjustment_metadata.enterprise_role AS placement_enterprise_role, incoming_exchange_enterprises.name AS incoming_exchange_enterprise_name, outgoing_exchange_enterprises.name AS outgoing_exchange_enterprise_name diff --git a/spec/lib/order_management/reports/enterprise_fee_summary/report_service_spec.rb b/spec/lib/order_management/reports/enterprise_fee_summary/report_service_spec.rb index 31d1262ca7..9f9345b276 100644 --- a/spec/lib/order_management/reports/enterprise_fee_summary/report_service_spec.rb +++ b/spec/lib/order_management/reports/enterprise_fee_summary/report_service_spec.rb @@ -5,7 +5,9 @@ require "order_management/reports/enterprise_fee_summary/parameters" describe OrderManagement::Reports::EnterpriseFeeSummary::ReportService do let!(:shipping_method) { create(:shipping_method) } - let!(:payment_method) { create(:payment_method) } + let!(:payment_method) do + create(:payment_method, name: "Sample Payment Method", calculator: per_item_calculator(2.0)) + end let!(:distributor) do create(:distributor_enterprise, name: "Sample Distributor").tap do |enterprise| @@ -91,7 +93,7 @@ describe OrderManagement::Reports::EnterpriseFeeSummary::ReportService do totals = service.enterprise_fee_type_totals - expect(totals.list.length).to eq(12) + expect(totals.list.length).to eq(14) # Data is sorted by the following, in order: # * fee_type @@ -112,8 +114,12 @@ describe OrderManagement::Reports::EnterpriseFeeSummary::ReportService do "Outgoing", "Sample Coordinator", "Sample Distributor Tax", "4.00"], ["Admin", "Sample Distributor", "Included Distributor Fee 1", "Sample Customer", "Outgoing", "Sample Coordinator", "Sample Distributor Tax", "8.00"], - ["Sales", "Sample Coordinator", "Included Coordinator Fee 2", "Another Customer", - "Coordinator", "All", "Sample Product Tax", "1024.00"], + ["Payment Transaction", "Sample Distributor", "Sample Payment Method", + "Another Customer", nil, nil, nil, "2.00"], + ["Payment Transaction", "Sample Distributor", "Sample Payment Method", + "Sample Customer", nil, nil, nil, "4.00"], + ["Sales", "Sample Coordinator", "Included Coordinator Fee 2", + "Another Customer", "Coordinator", "All", "Sample Product Tax", "1024.00"], ["Sales", "Sample Coordinator", "Included Coordinator Fee 2", "Sample Customer", "Coordinator", "All", "Sample Product Tax", "2048.00"], ["Sales", "Sample Distributor", "Included Distributor Fee 2", "Another Customer",