diff --git a/engines/dfc_provider/app/controllers/dfc_provider/persons_controller.rb b/engines/dfc_provider/app/controllers/dfc_provider/persons_controller.rb index a09adbd4ae..4e9cfb234b 100644 --- a/engines/dfc_provider/app/controllers/dfc_provider/persons_controller.rb +++ b/engines/dfc_provider/app/controllers/dfc_provider/persons_controller.rb @@ -13,6 +13,11 @@ module DfcProvider def affiliate_sales_data render json: DfcIo.export( AffiliateSalesDataBuilder.build_person(user), + *AffiliateSalesDataBuilder.build_addresses, + *AffiliateSalesDataBuilder.build_producers, + *AffiliateSalesDataBuilder.build_supplied_products, + *AffiliateSalesDataBuilder.build_catalogue_items, + *AffiliateSalesDataBuilder.build_offers, *AffiliateSalesDataBuilder.build_order_lines, *AffiliateSalesDataBuilder.build_orders ) diff --git a/engines/dfc_provider/app/services/affiliate_sales_data_builder.rb b/engines/dfc_provider/app/services/affiliate_sales_data_builder.rb index a3575c25ef..2908a810f6 100644 --- a/engines/dfc_provider/app/services/affiliate_sales_data_builder.rb +++ b/engines/dfc_provider/app/services/affiliate_sales_data_builder.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true +# rubocop:disable Metrics/ClassLength class AffiliateSalesDataBuilder < DfcBuilder class << self def build_person(user) @@ -16,6 +17,26 @@ class AffiliateSalesDataBuilder < DfcBuilder enterprises.map { |enterprise| build_enterprise(enterprise.id) } end + def build_addresses + sales_data.map { |sale| build_address(sale) } + end + + def build_producers + sales_data.map { |sale| build_producer(sale) } + end + + def build_supplied_products + sales_data.map { |sale| build_supplied_product(sale) } + end + + def build_catalogue_items + sales_data.map { |sale| build_catalogue_item(sale) } + end + + def build_offers + sales_data.map { |sale| build_offer(sale) } + end + def build_order_lines sales_data.map { |sale| build_order_line(sale) } end @@ -34,6 +55,54 @@ class AffiliateSalesDataBuilder < DfcBuilder DataFoodConsortium::Connector::Enterprise.new(urls.enterprise_url(id)) end + def build_address(sale) + DataFoodConsortium::Connector::Address.new( + urls.address_url(sale.producer_id), + postalCode: sale.producer_postcode, + country: nil, + latitude: nil, + longitude: nil, + region: nil, + street: nil, + city: 'test' + ) + end + + def build_producer(sale) + DataFoodConsortium::Connector::Enterprise.new( + urls.enterprise_url(sale.producer_id), + suppliedProducts: build_supplied_product(sale), + localizations: build_address(sale) + ) + end + + def build_supplied_product(sale) + DataFoodConsortium::Connector::SuppliedProduct.new( + urls.enterprise_supplied_product_url(sale.producer_id, sale.product_id), + name: sale.product_name, + description: nil, + alcoholPercentage: nil, + lifetime: nil, + usageOrStorageConditions: nil, + totalTheoreticalStock: nil, + catalogItems: build_catalogue_item(sale), + quantity: build_quantity(sale) + ) + end + + def build_catalogue_item(sale) + DataFoodConsortium::Connector::CatalogItem.new( + urls.enterprise_catalog_item_url(sale.producer_id, sale.product_id), + offers: build_offer(sale) + ) + end + + def build_offer(sale) + DataFoodConsortium::Connector::Offer.new( + urls.enterprise_offer_url(sale.producer_id, sale.product_id) + ) + end + def build_order_line(sale) DataFoodConsortium::Connector::OrderLine.new( urls.enterprise_order_order_line_url(sale.producer_id, sale.order_id, sale.line_item_id), @@ -81,3 +150,4 @@ class AffiliateSalesDataBuilder < DfcBuilder end end end +# rubocop:enable Metrics/ClassLength diff --git a/engines/dfc_provider/app/services/affiliate_sales_query.rb b/engines/dfc_provider/app/services/affiliate_sales_query.rb index 2df2194c05..9bc1a77502 100644 --- a/engines/dfc_provider/app/services/affiliate_sales_query.rb +++ b/engines/dfc_provider/app/services/affiliate_sales_query.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class AffiliateSalesQuery class << self def call @@ -27,6 +29,7 @@ class AffiliateSalesQuery <<~SQL.squish spree_orders.id AS order_id, spree_orders.created_at AS order_date, + spree_products.id AS product_id, spree_products.name AS product_name, spree_variants.display_name AS unit_name, spree_products.variant_unit AS unit_type, @@ -47,6 +50,7 @@ class AffiliateSalesQuery def sales_data_group <<~SQL.squish spree_orders.id, + spree_products.id, spree_products.name, spree_variants.display_name, spree_variants.unit_value, diff --git a/engines/dfc_provider/config/routes.rb b/engines/dfc_provider/config/routes.rb index baa404d081..3fe958b650 100644 --- a/engines/dfc_provider/config/routes.rb +++ b/engines/dfc_provider/config/routes.rb @@ -8,6 +8,7 @@ DfcProvider::Engine.routes.draw do resources :supplied_products, only: [:create, :show, :update] resources :social_medias, only: [:show] resources :sale_sessions, only: [:show] + resources :offers, only: [:show] resources :orders, only: [:show] do resources :order_lines, only: [:show] end