Skip to content

Commit

Permalink
Merge pull request #12930 from chahmedejaz/task/12878-add-variant-nam…
Browse files Browse the repository at this point in the history
…e-in-od-report

Report Orders and Distributors should display variant
  • Loading branch information
filipefurtad0 authored Nov 20, 2024
2 parents 60d4cd6 + d62d304 commit 22f3afc
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 32 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class UpdateItemNameToProductInOdReport < ActiveRecord::Migration[7.0]
class ReportRenderingOptions < ActiveRecord::Base
self.belongs_to_required_by_default = false

belongs_to :user, class_name: "Spree::User"
serialize :options, Hash, coder: YAML
end

# OD: Orders and Distributors
def up
# adding subtype filter just to be safe
options = ReportRenderingOptions.where(report_type: 'orders_and_distributors', report_subtype: nil)

options.find_each do |option|
begin
fields_to_show = option.options[:fields_to_show]
next if fields_to_show&.exclude?('item_name')

fields_to_show.delete('item_name')
fields_to_show << 'product'
option.save
rescue StandardError => e
puts "Failed to update rendering option with id: #{option.id}"
puts "Error: #{e.message}"
end
end
end

def down
options = ReportRenderingOptions.where(report_type: 'orders_and_distributors', report_subtype: nil)

options.find_each do |option|
begin
fields_to_show = option.options[:fields_to_show]
next if fields_to_show&.exclude?('product')

fields_to_show.delete('product')
fields_to_show << 'item_name'
option.update(options: option.options)
rescue StandardError => e
puts "Failed to revert rendering option with id: #{option.id}"
puts "Error: #{e.message}"
end
end
end
end
4 changes: 2 additions & 2 deletions lib/reporting/reports/orders_and_distributors/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ def columns
customer_phone: proc { |line_item| line_item.order.bill_address.phone },
customer_city: proc { |line_item| line_item.order.bill_address.city },
sku: proc { |line_item| line_item.product.sku },
item_name: proc { |line_item| line_item.product.name },
variant: proc { |line_item| line_item.unit_to_display },
product: proc { |line_item| line_item.product.name },
variant: proc { |line_item| line_item.full_name },
quantity: proc { |line_item| line_item.quantity },
max_quantity: proc { |line_item| line_item.max_quantity },
cost: proc { |line_item| line_item.price * line_item.quantity },
Expand Down
7 changes: 7 additions & 0 deletions spec/factories/report_rendering_options_factory.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

FactoryBot.define do
factory :orders_and_distributors_options, class: ReportRenderingOptions do
report_type { "orders_and_distributors" }
end
end
71 changes: 42 additions & 29 deletions spec/lib/reports/orders_and_distributors_report_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
[
'Order date', 'Order Id',
'Customer Name', 'Customer Email', 'Customer Phone', 'Customer City',
'SKU', 'Item name', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost',
'SKU', 'Product', 'Variant', 'Quantity', 'Max Quantity', 'Cost', 'Shipping Cost',
'Payment Method',
'Distributor', 'Distributor address', 'Distributor city', 'Distributor postcode',
'Shipping Method', 'Shipping instructions'
Expand All @@ -37,7 +37,7 @@
}
let(:payment_method) { create(:payment_method, distributors: [distributor]) }
let(:payment) { create(:payment, payment_method:, order:) }
let(:line_item) { create(:line_item_with_shipment, product:, order:) }
let(:line_item) { create(:line_item_with_shipment, variant:, order:) }
subject { described_class.new user }

before do
Expand All @@ -46,33 +46,35 @@
order.line_items << line_item
end

it 'should denormalise order and distributor details for display as csv' do
allow(subject).to receive(:unformatted_render?).and_return(true)
table = subject.table_rows

expect(table.size).to eq 1
expect(table[0]).to eq([
order.reload.completed_at.strftime("%F %T"),
order.id,
bill_address.full_name,
order.email,
bill_address.phone,
bill_address.city,
line_item.product.sku,
line_item.product.name,
line_item.unit_to_display,
line_item.quantity,
line_item.max_quantity,
line_item.price * line_item.quantity,
line_item.distribution_fee,
payment_method.name,
distributor.name,
distributor.address.address1,
distributor.address.city,
distributor.address.zipcode,
shipping_method.name,
shipping_instructions
])
context "without variant name" do
it 'should denormalise order and distributor details for display as csv' do
allow(subject).to receive(:unformatted_render?).and_return(true)
table = subject.table_rows

expect(table.size).to eq 1
expect(table[0]).to eq([
order.reload.completed_at.strftime("%F %T"),
order.id,
bill_address.full_name,
order.email,
bill_address.phone,
bill_address.city,
line_item.product.sku,
line_item.product.name,
"1g",
line_item.quantity,
line_item.max_quantity,
line_item.price * line_item.quantity,
line_item.distribution_fee,
payment_method.name,
distributor.name,
distributor.address.address1,
distributor.address.city,
distributor.address.zipcode,
shipping_method.name,
shipping_instructions
])
end
end

it "prints one row per line item" do
Expand Down Expand Up @@ -149,6 +151,17 @@
"Spree::ShippingMethod Load",
]
end

context "with variant name present" do
before do
variant.update_columns(display_name: 'Variant Name');
end
let(:row) { subject.table_rows.first }

it "should display variant name with unit" do
expect(row).to include("Variant Name (1g)")
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

require 'spec_helper'
require_relative '../../db/migrate/20241011071014_update_item_name_to_product_in_od_report'

RSpec.describe UpdateItemNameToProductInOdReport, type: :migration do
let!(:report_option_without_item_name_product) do
create(
:orders_and_distributors_options,
options: { fields_to_show: ['other_field'] }
)
end

describe '#up' do
let!(:report_option_with_item_name) do
create(
:orders_and_distributors_options,
options: { fields_to_show: ['item_name', 'other_field'] }
)
end
before { subject.up }

it 'updates fields_to_show from item_name to product only if options have item_name' do
report_option_with_item_name.reload
expect(fields_to_show(report_option_with_item_name)).to eq(['other_field', 'product'])
expect(fields_to_show(report_option_without_item_name_product)).to eq(['other_field'])
end
end

describe '#down' do
let!(:report_option_with_product) do
create(
:orders_and_distributors_options,
options: { fields_to_show: ['product', 'other_field'] }
)
end
before { subject.down }

it 'reverts fields_to_show from product to item_name only if options have product' do
report_option_with_product.reload
expect(fields_to_show(report_option_with_product)).to eq(['other_field', 'item_name'])
expect(fields_to_show(report_option_without_item_name_product)).to eq(['other_field'])
end
end

def fields_to_show(report_options)
report_options.options[:fields_to_show]
end
end
2 changes: 1 addition & 1 deletion spec/system/admin/reports/orders_and_distributors_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
context "as an enterprise user" do
let(:header) {
["Order date", "Order Id", "Customer Name", "Customer Email", "Customer Phone",
"Customer City", "SKU", "Item name", "Variant", "Quantity", "Max Quantity",
"Customer City", "SKU", "Product", "Variant", "Quantity", "Max Quantity",
"Cost", "Shipping Cost", "Payment Method", "Distributor", "Distributor address",
"Distributor city", "Distributor postcode", "Shipping Method",
"Shipping instructions"]
Expand Down

0 comments on commit 22f3afc

Please sign in to comment.