diff --git a/app/assets/images/role-pickups.png b/app/assets/images/role-pickups.png new file mode 100644 index 00000000..c3651efa Binary files /dev/null and b/app/assets/images/role-pickups.png differ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 16bb2d2e..b5842219 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -68,9 +68,11 @@ class ApplicationController < ActionController::Base when "admin" then current_user.role_admin? when "finance" then current_user.role_finance? when "article_meta" then current_user.role_article_meta? + when "pickups" then current_user.role_pickups? when "suppliers" then current_user.role_suppliers? when "orders" then current_user.role_orders? when "finance_or_orders" then (current_user.role_finance? || current_user.role_orders?) + when "pickups_or_orders" then (current_user.role_pickups? || current_user.role_orders?) when "any" then true # no role required else false # any unknown role will always fail end @@ -81,19 +83,23 @@ class ApplicationController < ActionController::Base end end end - + def authenticate_admin authenticate('admin') end - + def authenticate_finance authenticate('finance') end - + def authenticate_article_meta authenticate('article_meta') end + def authenticate_pickups + authenticate('pickups') + end + def authenticate_suppliers authenticate('suppliers') end @@ -106,6 +112,10 @@ class ApplicationController < ActionController::Base authenticate('finance_or_orders') end + def authenticate_pickups_or_orders + authenticate('pickups_or_orders') + end + # checks if the current_user is member of given group. # if fails the user will redirected to startpage def authenticate_membership_or_admin(group_id = params[:id]) diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index d6514ac1..9a7ee4eb 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -4,7 +4,8 @@ # Normal ordering actions of members of order groups is handled by the OrderingController. class OrdersController < ApplicationController - before_filter :authenticate_orders + before_filter :authenticate_pickups_or_orders + before_filter :authenticate_orders, except: [:receive, :receive_on_order_article_create, :receive_on_order_article_update, :show] before_filter :remove_empty_article, only: [:create, :update] # List orders diff --git a/app/controllers/pickups_controller.rb b/app/controllers/pickups_controller.rb index ad877788..907eeef1 100644 --- a/app/controllers/pickups_controller.rb +++ b/app/controllers/pickups_controller.rb @@ -1,5 +1,7 @@ class PickupsController < ApplicationController + before_filter :authenticate_pickups + def index @orders = Order.finished_not_closed.order('pickup DESC').group_by { |o| o.pickup } end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index fdb8ae42..e8de97e0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -150,7 +150,7 @@ module ApplicationHelper end def format_roles(record, icon=false) - roles = %w(suppliers article_meta orders finance invoices admin) + roles = %w(suppliers article_meta orders pickups finance invoices admin) roles.select! {|role| record.send "role_#{role}?"} names = Hash[roles.map{|r| [r, I18n.t("helpers.application.role_#{r}")]}] if icon diff --git a/app/models/user.rb b/app/models/user.rb index 10ab0dd8..27b8a0b4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -159,17 +159,22 @@ class User < ActiveRecord::Base def role_article_meta? groups.detect {|group| group.role_article_meta?} end - + # Checks the suppliers role def role_suppliers? groups.detect {|group| group.role_suppliers?} end - + + # Checks the invoices role + def role_pickups? + groups.detect {|group| group.role_pickups?} + end + # Checks the orders role def role_orders? groups.detect {|group| group.role_orders?} end - + def ordergroup_name ordergroup ? ordergroup.name : I18n.t('model.user.no_ordergroup') end @@ -178,7 +183,7 @@ class User < ActiveRecord::Base def member_of?(group) group.users.exists?(self.id) end - + #Returns an array with the users groups (but without the Ordergroups -> because tpye=>"") def member_of_groups() self.groups.where(type: '') diff --git a/app/views/admin/workgroups/_form.html.haml b/app/views/admin/workgroups/_form.html.haml index 024ef5d9..5902b445 100644 --- a/app/views/admin/workgroups/_form.html.haml +++ b/app/views/admin/workgroups/_form.html.haml @@ -7,6 +7,7 @@ = f.input :role_suppliers = f.input :role_article_meta = f.input :role_orders + = f.input :role_pickups = f.input :role_finance = f.input :role_invoices = f.input :role_admin diff --git a/app/views/pickups/index.html.haml b/app/views/pickups/index.html.haml index 4d3caa64..3a654f76 100644 --- a/app/views/pickups/index.html.haml +++ b/app/views/pickups/index.html.haml @@ -24,10 +24,7 @@ %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 + = link_to order.name, order_path(order) %td= truncate order.note %td{style:'white-space:nowrap'} = render 'shared/order_download_button', order: order, klass: 'btn-small' diff --git a/config/locales/de.yml b/config/locales/de.yml index be7a1a86..5385938f 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -220,6 +220,7 @@ de: role_finance: Finanzen role_invoices: Rechnungen role_orders: Bestellverwaltung + role_pickups: Abholtage role_suppliers: Lieferanten user_tokens: Mitglieder errors: @@ -1082,6 +1083,7 @@ de: role_finance: Finanzen role_invoices: Rechnungen role_orders: Bestellung + role_pickups: Abholtage role_suppliers: Lieferanten show_google_maps: Show it on Google maps sort_by: Nach %{text} sortieren diff --git a/config/locales/en.yml b/config/locales/en.yml index 10a0fd20..1dc8e890 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -220,6 +220,7 @@ en: role_finance: Finances role_invoices: Invoices role_orders: Order management + role_pickups: Pickup days role_suppliers: Suppliers user_tokens: Members errors: @@ -1084,6 +1085,7 @@ en: role_finance: Finance role_invoices: Invoices role_orders: Orders + role_pickups: Pickup days role_suppliers: Suppliers show_google_maps: Show it on Google maps sort_by: Sort by %{text} diff --git a/config/navigation.rb b/config/navigation.rb index 178556ad..4b63f041 100644 --- a/config/navigation.rb +++ b/config/navigation.rb @@ -24,7 +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? } + subnav.item :pickups, I18n.t('navigation.orders.pickups'), pickups_path, if: Proc.new { current_user.role_pickups? } end primary.item :articles, I18n.t('navigation.articles.title'), '#', diff --git a/db/migrate/20171111000000_add_role_pickups_to_group.rb b/db/migrate/20171111000000_add_role_pickups_to_group.rb new file mode 100644 index 00000000..771c93bf --- /dev/null +++ b/db/migrate/20171111000000_add_role_pickups_to_group.rb @@ -0,0 +1,5 @@ +class AddRolePickupsToGroup < ActiveRecord::Migration + def change + add_column :groups, :role_pickups, :boolean, default: false, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 029215f9..d70ec47e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171110000000) do +ActiveRecord::Schema.define(version: 20171111000000) do create_table "article_categories", force: :cascade do |t| t.string "name", limit: 255, default: "", null: false @@ -170,6 +170,7 @@ ActiveRecord::Schema.define(version: 20171110000000) do t.boolean "role_invoices", default: false, null: false t.date "break_start" t.date "break_end" + t.boolean "role_pickups", default: false, null: false end add_index "groups", ["name"], name: "index_groups_on_name", unique: true, using: :btree diff --git a/db/seeds/minimal.seeds.rb b/db/seeds/minimal.seeds.rb index e31461de..1c937a88 100644 --- a/db/seeds/minimal.seeds.rb +++ b/db/seeds/minimal.seeds.rb @@ -7,6 +7,7 @@ administrators = Workgroup.create( :role_admin => true, :role_finance => true, :role_article_meta => true, + :role_pickups => true, :role_suppliers => true, :role_orders => true )