diff --git a/app/controllers/pickups_controller.rb b/app/controllers/pickups_controller.rb new file mode 100644 index 00000000..ad877788 --- /dev/null +++ b/app/controllers/pickups_controller.rb @@ -0,0 +1,26 @@ +class PickupsController < ApplicationController + + def index + @orders = Order.finished_not_closed.order('pickup DESC').group_by { |o| o.pickup } + end + + def document + return redirect_to pickups_path, alert: t('.empty_selection') unless params[:orders] + + order_ids = params[:orders].map(&:to_i) + + if params[:articles_pdf] + klass = OrderByArticles + elsif params[:groups_pdf] + klass = OrderByGroups + elsif params[:matrix_pdf] + klass = OrderMatrix + end + + return redirect_to pickups_path, alert: t('.invalid_document') unless klass + + date = params[:date] + pdf = klass.new(order_ids, title: t('.title', date: date), show_supplier: true) + send_data pdf.to_pdf, filename: t('.filename', date: date) + '.pdf', type: 'application/pdf' + end +end diff --git a/app/views/pickups/index.html.haml b/app/views/pickups/index.html.haml new file mode 100644 index 00000000..1464a08a --- /dev/null +++ b/app/views/pickups/index.html.haml @@ -0,0 +1,34 @@ +- title t('.title') + +- @orders.each do |pickup, orders| + = form_tag document_pickups_path do + = hidden_field_tag 'date', l(pickup, format: :long) + %h2 + - if pickup + = l pickup, format: :long + - else + = t '.without_pickup' + %span{style:'float:right'} + = submit_tag t('.article_pdf'), name: 'articles_pdf', class: 'btn' + = submit_tag t('.group_pdf'), name: 'groups_pdf', class: 'btn' + = submit_tag t('.matrix_pdf'), name: 'matrix_pdf', class: 'btn' + + %table.table.table-striped + %thead + %tr + %th{style:'width:50%'}= heading_helper Order, :name + %th{style:'width:50%'}= heading_helper Order, :note + %th{style:'width:1px'}= t 'ui.actions' + %tbody + - for order in orders + %tr + %td + = check_box_tag "orders[]", order.id, true #, style: 'float:left' + - if current_user.role_orders? + = link_to order.name, order_path(order) + - else + = order.name + %td= truncate order.note + %td{style:'white-space:nowrap'} + = render 'shared/order_download_button', order: order, klass: 'btn-small' + = receive_button order, class: 'btn-small' diff --git a/config/locales/de.yml b/config/locales/de.yml index df271261..be7a1a86 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1451,6 +1451,7 @@ de: archive: Meine Bestellungen manage: Bestellverwaltung ordering: Bestellen! + pickups: Abholtage title: Bestellungen tasks: Aufgaben wiki: @@ -1672,6 +1673,17 @@ de: title: "%{title} - Version %{version}" title_version: Version view_current: Aktuelle Version sehen + pickups: + document: + empty_selection: Es muss zumindest eine Bestellung ausgewählt sein. + filename: Abholungen für %{date} + invalid_document: Ungültiger Dokumententyp + title: Abholungen für %{date} + index: + article_pdf: Artikel PDF + group_pdf: Gruppen PDF + matrix_pdf: Matrix PDF + title: Abholtage sessions: logged_in: Angemeldet! logged_out: Abgemeldet! diff --git a/config/locales/en.yml b/config/locales/en.yml index 5bc9ba0b..10a0fd20 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1461,6 +1461,7 @@ en: archive: My Orders manage: Manage orders ordering: Place order! + pickups: Pickup days title: Orders tasks: Tasks wiki: @@ -1682,6 +1683,17 @@ en: title: "%{title} - version %{version}" title_version: Version view_current: See current version + pickups: + document: + empty_selection: At least one order must be selected. + filename: Pickup for %{date} + invalid_document: Invalid document type + title: Pickup for %{date} + index: + article_pdf: Article PDF + group_pdf: Group PDF + matrix_pdf: Matrix PDF + title: Pickup days sessions: logged_in: Logged in! logged_out: Logged out! diff --git a/config/navigation.rb b/config/navigation.rb index 17ae3d40..178556ad 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -24,6 +24,7 @@ SimpleNavigation::Configuration.run do |navigation| subnav.item :ordering, I18n.t('navigation.orders.ordering'), group_orders_path subnav.item :ordering_archive, I18n.t('navigation.orders.archive'), archive_group_orders_path subnav.item :orders, I18n.t('navigation.orders.manage'), orders_path, if: Proc.new { current_user.role_orders? } + subnav.item :pickups, I18n.t('navigation.orders.pickups'), pickups_path, if: Proc.new { current_user.role_orders? } end primary.item :articles, I18n.t('navigation.articles.title'), '#', diff --git a/config/routes.rb b/config/routes.rb index c982ad4c..705e5bca 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -51,6 +51,10 @@ Foodsoft::Application.routes.draw do resources :order_articles end + resources :pickups, only: [:index] do + post :document, on: :collection + end + resources :group_orders do get :archive, on: :collection end diff --git a/lib/render_pdf.rb b/lib/render_pdf.rb index 348dc150..1adf3b15 100644 --- a/lib/render_pdf.rb +++ b/lib/render_pdf.rb @@ -85,7 +85,7 @@ class RenderPDF < Prawn::Document } ) - header = title + header = options[:title] || title footer = I18n.l(Time.now, format: :long) header_size = 0