Class: Api::Partner::V1::MenuSectionsController

Inherits:
BaseController
  • Object
show all
Defined in:
app/controllers/api/partner/v1/menu_sections_controller.rb

Instance Method Summary collapse

Methods inherited from BaseController

#default_restaurant, #identity_cache_memoization, #render_unauthorize_action, #restaurants, #set_options

Methods included from LogrageCustomLogger

#append_info_to_payload

Methods included from ControllerHelpers

#check_boolean_param, #get_banners, #inventory_params, #reservation_params

Methods included from ResponseCacheConcern

#my_response_cache

Instance Method Details

#exportObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'app/controllers/api/partner/v1/menu_sections_controller.rb', line 31

def export
  permitted_parameters = params.require(:data).permit(:date_filter_type,
                                                      :date, :date_from, :date_to,
                                                      :menu_items_type, menu_items_ids: []
                                                      )

  messages = []

  if permitted_parameters[:menu_items_type].blank? || permitted_parameters[:date_filter_type].blank?
    messages << I18n.t('partner.errors.menu_sections.export.params_missing')
  end
  if permitted_parameters[:date_filter_type] == 'single' && permitted_parameters[:date].blank?
    messages << I18n.t('partner.errors.menu_sections.export.date_missing')
  end

  if permitted_parameters[:date_filter_type] == 'range' && (permitted_parameters[:date_from].blank? || permitted_parameters[:date_to].blank?)
    messages << I18n.t('partner.errors.menu_sections.export.start_end_date_missing')
  end

  if permitted_parameters[:menu_items_type] == "options" && permitted_parameters[:menu_items_ids].blank?
    messages << I18n.t('partner.errors.menu_sections.export.menu_missing')
  end

  return render json: { status: 'failed', message: messages } if messages.present?


  data = PartnerService::MenuSections::ExportMenuSectionsService.new(
    {
      restaurant_id: default_restaurant.id,
      date_filter_type: permitted_parameters.require(:date_filter_type),
      date: permitted_parameters[:date],
      date_from: permitted_parameters[:date_from],
      date_to: permitted_parameters[:date_to],
      menu_items_type: permitted_parameters.require(:menu_items_type),
      menu_items_ids: permitted_parameters[:menu_items_ids]
    }
  ).download

  filename = "Hungry-Hub-report-menu-items-#{Time.zone.today}-#{default_restaurant.id}.xlsx"
  send_data data, filename: filename
end

#indexObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/controllers/api/partner/v1/menu_sections_controller.rb', line 7

def index
  menu_sections_ids = default_restaurant.ayce_menu_sections.ids +
                      default_restaurant.pp_menu_sections.ids +
                      default_restaurant.hah_menu_sections.ids +
                      default_restaurant.xp_menu_sections.ids +
                      default_restaurant.hs_menu_sections.ids +
                      default_restaurant.bfp_menu_sections.ids +
                      default_restaurant.sm_menu_sections.ids
  menu_sections_list = HhPackage::Package::MenuSection.where(id: menu_sections_ids.uniq)
  filter_params = params.fetch(:filter, {})
  name = filter_params.fetch(:name, nil)
  menu_sections_filter = menu_sections_list.joins(:translations)
                                           .where("lower(#{HhPackage::Package::MenuSection::Translation.table_name}.name) LIKE ?", "%#{name.downcase}%")
                                           .group(:id) if name.present?
  menu_sections = name.present? ? menu_sections_filter : menu_sections_list
  overview = {
    total_menu_list: menu_sections_list.size,
    total_menu_items: menu_sections_list.map { |ms| ms.menus.size }.sum,
    total_menu_items_inactive: menu_sections_list.map { |ms| ms.menus.where(active: false).size }.sum
  }
  pagy, menu_sections = pagy(menu_sections, items: params[:per_page] || 10, page: params[:page] || 1)
  render json: ::Api::Partner::MenuSectionSerializer.new(menu_sections, set_options(pagy)).as_json.merge({ overview: overview })
end