From 15b742a96788e7da9001105d6595201f503386b1 Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Mon, 4 Mar 2019 10:45:38 +0100 Subject: [PATCH 1/6] =?UTF-8?q?Add=20migration,=20model=20and=20controller?= =?UTF-8?q?=20f=C3=B6r=20managing=20groups?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/managing_groups_controller.rb | 54 +++++++++++++++++++ app/models/managing_group.rb | 11 ++++ app/models/order.rb | 1 + app/models/user.rb | 1 + config/routes.rb | 4 ++ ...dd_column_is_active_to_pickup_locations.rb | 5 ++ ...0190301133326_add_table_managing_groups.rb | 13 +++++ db/schema.rb | 13 ++++- 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 app/controllers/managing_groups_controller.rb create mode 100644 app/models/managing_group.rb create mode 100644 db/migrate/20190301132818_add_column_is_active_to_pickup_locations.rb create mode 100644 db/migrate/20190301133326_add_table_managing_groups.rb diff --git a/app/controllers/managing_groups_controller.rb b/app/controllers/managing_groups_controller.rb new file mode 100644 index 0000000..4128fd1 --- /dev/null +++ b/app/controllers/managing_groups_controller.rb @@ -0,0 +1,54 @@ +class ManagingGroupsController < ApplicationController + + # Find all managing_group and show them. + def index + objs = ManagingGroup.all.order(:name) + if objs + render json: {managing_groups: objs}, status: 200 + else + render json: {}, status: 500 + end + rescue => error + render json: {}, status: 500 + end + + # Find one managing_group using id and show it. + def show + objid = params[:id] + obj = ManagingGroup.find_by_id(objid) + if obj + render json: {managing_group: obj}, status: 200 + else + render json: {}, status: 404 + end + rescue => error + render json: {}, status: 500 + end + + # Find one managing_group using label and show it. + def show_by_label + objid = params[:label] + obj = ManagingGroup.find_by_label(objid) + if obj + render json: {managing_group: obj}, status: 200 + else + render json: {}, status: 404 + end + rescue => error + render json: {}, status: 500 + end + + + def create + render json: {}, status: 501 + end + + def update + render json: {}, status: 501 + end + + def delete + render json: {}, status: 501 + end + +end diff --git a/app/models/managing_group.rb b/app/models/managing_group.rb new file mode 100644 index 0000000..83a34db --- /dev/null +++ b/app/models/managing_group.rb @@ -0,0 +1,11 @@ +class ManagingGroup < ActiveRecord::Base + has_many :orders + has_many :users + + validates_presence_of :label + validates_uniqueness_of :label + + def as_json(options = {}) + super(:except => [:created_at, :updated_at]) + end +end diff --git a/app/models/order.rb b/app/models/order.rb index fbe1aee..4380327 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -6,6 +6,7 @@ class Order < ActiveRecord::Base belongs_to :user has_many :users, :through => :notes belongs_to :pickup_location + belongs_to :managing_group belongs_to :status belongs_to :order_type belongs_to :delivery_source diff --git a/app/models/user.rb b/app/models/user.rb index 6335c3e..e9651f7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,6 +4,7 @@ class User < ActiveRecord::Base has_many :orders has_many :notes has_many :orders, :through => :notes + belongs_to :managing_group belongs_to :pickup_location has_many :access_tokens diff --git a/config/routes.rb b/config/routes.rb index 4a4d1c6..fd62a85 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -25,6 +25,10 @@ get 'pickup_locations/:id' => 'pickup_locations#show', :constraints => { :id => /[0-9]+/ } get 'pickup_locations/:label' => 'pickup_locations#show_by_label', :constraints => { :label => /[A-Za-z\-]+/ } + get 'managing_groups' => 'managing_groups#index' + get 'managing_groups/:id' => 'managing_groups#show', :constraints => { :id => /[0-9]+/ } + get 'managing_groups/:label' => 'managing_groups#show_by_label', :constraints => { :label => /[A-Za-z\-]+/ } + get "form_orders/:id(.format)" => "orders#show", :constraints => { :id => /[0-9]+/ }, :defaults => { :format => 'json' } get "form_orders/:order_number" => "orders#show_by_order_number", :constraints => { :order_number => /[0-9\-\.]+/ } post "form_orders/" => "orders#create" diff --git a/db/migrate/20190301132818_add_column_is_active_to_pickup_locations.rb b/db/migrate/20190301132818_add_column_is_active_to_pickup_locations.rb new file mode 100644 index 0000000..02708dd --- /dev/null +++ b/db/migrate/20190301132818_add_column_is_active_to_pickup_locations.rb @@ -0,0 +1,5 @@ +class AddColumnIsActiveToPickupLocations < ActiveRecord::Migration + def change + add_column :pickup_locations, :is_active, :boolean + end +end diff --git a/db/migrate/20190301133326_add_table_managing_groups.rb b/db/migrate/20190301133326_add_table_managing_groups.rb new file mode 100644 index 0000000..c9c2232 --- /dev/null +++ b/db/migrate/20190301133326_add_table_managing_groups.rb @@ -0,0 +1,13 @@ +class AddTableManagingGroups < ActiveRecord::Migration + def change + create_table :managing_groups do |t| + t.string :label + t.string :name + t.string :email + t.string :sublocation + t.boolean :is_active + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 9808f03..0eca86d 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: 20190301121623) do +ActiveRecord::Schema.define(version: 20190301133326) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -42,6 +42,16 @@ t.datetime "updated_at" end + create_table "managing_groups", force: :cascade do |t| + t.string "label" + t.string "name" + t.string "email" + t.string "sublocation" + t.boolean "is_active" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "notes", force: :cascade do |t| t.integer "order_id" t.text "message" @@ -133,6 +143,7 @@ t.datetime "updated_at" t.boolean "is_sigel" t.string "sigel", limit: 255 + t.boolean "is_active" end create_table "status_group_members", force: :cascade do |t| From d7c81ea479af6568715f19ca1f195b08ef468864 Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Mon, 4 Mar 2019 11:20:41 +0100 Subject: [PATCH 2/6] Add missing migration file --- db/migrate/20190304101848_add_columns_managing_group_id.rb | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 db/migrate/20190304101848_add_columns_managing_group_id.rb diff --git a/db/migrate/20190304101848_add_columns_managing_group_id.rb b/db/migrate/20190304101848_add_columns_managing_group_id.rb new file mode 100644 index 0000000..7e8e03e --- /dev/null +++ b/db/migrate/20190304101848_add_columns_managing_group_id.rb @@ -0,0 +1,6 @@ +class AddColumnsManagingGroupId < ActiveRecord::Migration + def change + add_column :orders, :managing_group_id, :integer + add_column :users, :managing_group_id, :integer + end +end From 880e3ae438e2e6fd1316d89874c9f79a5ec1f1e5 Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Mon, 4 Mar 2019 13:50:23 +0100 Subject: [PATCH 3/6] Add missing schema file --- db/schema.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/db/schema.rb b/db/schema.rb index 0eca86d..4ef5800 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: 20190301133326) do +ActiveRecord::Schema.define(version: 20190304101848) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -132,6 +132,7 @@ t.text "period" t.text "delivery_box" t.text "delivery_comments" + t.integer "managing_group_id" end create_table "pickup_locations", force: :cascade do |t| @@ -178,6 +179,7 @@ t.datetime "created_at" t.datetime "updated_at" t.integer "pickup_location_id" + t.integer "managing_group_id" end add_foreign_key "orders", "pickup_locations", name: "orders_location_id_fkey" From 87c4f1e6ffee9e6d1d85c81fefbdfdde0f24c5b2 Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Tue, 5 Mar 2019 17:23:52 +0100 Subject: [PATCH 4/6] Fix filtering and updating order --- app/controllers/orders_controller.rb | 28 ++++++++++++++++++++++------ app/models/user.rb | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index cf16f16..c4fcd22 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -29,7 +29,7 @@ def index sortfield = params[:sortfield] || 'created_at' sortdir = params[:sortdir] || 'DESC' - user = params[:user] + user = params[:user] is_archived_str = params[:is_archived] || '' apply_archive_filter = false @@ -51,8 +51,12 @@ def index apply_to_be_invoiced_filter = true end + current_managing_group = params[:current_managing_group] || '' + current_managing_group = '' if current_managing_group.downcase.eql?('null') + current_managing_group = '' if current_managing_group.eql?('0') + current_managing_group = '' if current_managing_group.downcase.eql?('all') - current_pickup_location = params[:currentPickupLocation] || '' + current_pickup_location = params[:current_pickup_location] || '' current_pickup_location = '' if current_pickup_location.downcase.eql?('null') current_pickup_location = '' if current_pickup_location.eql?('0') current_pickup_location = '' if current_pickup_location.downcase.eql?('all') @@ -96,9 +100,10 @@ def index @orders = @orders.where(status_id: status_group_obj.statuses.map(&:id)) end - @orders = @orders.where(pickup_location_id: current_pickup_location) if current_pickup_location.present? - @orders = @orders.where(user_id: user) if user.present? - @orders = @orders.where(order_type_id: order_type) if order_type.present? + @orders = @orders.where(managing_group_id: current_managing_group) if current_managing_group.present? + @orders = @orders.where(pickup_location_id: current_pickup_location) if current_pickup_location.present? + @orders = @orders.where(user_id: user) if user.present? + @orders = @orders.where(order_type_id: order_type) if order_type.present? if search_term.present? @@ -216,6 +221,9 @@ def create logger.info "OrdersController#create: Status id does not exist, set it to New." obj.update_attribute(:status_id, Status.find_by_label('new')[:id]) end + + # TBD: Set managing group + # Set pickup_location to the same library as the sigel if obj[:pickup_location_id].blank? logger.info "OrdersController#create: Pickup Location id does not exist, set it to the same as the sigel / label." @@ -354,9 +362,16 @@ def handle_order_changes order_id, user_id, old_order, new_order log_entries << "Beställningstyp ändrades från #{OrderType.find_by_id(old_order[:order_type_id])[:name_sv]} till #{OrderType.find_by_id(new_order[:order_type_id])[:name_sv]}." end + # Check managing_group difference + if old_order[:managing_group_id].blank? && new_order[:managing_group_id].present? + log_entries << "Handläggningsgrupp ändrades från Ingen till #{ManagingGroup.find_by_id(new_order[:managing_group_id])[:name]}." + elsif old_order[:managing_group_id] != new_order[:managing_group_id] + log_entries << "Handläggningsgrupp ändrades från #{ManagingGroup.find_by_id(old_order[:managing_group_id])[:name]} till #{ManagingGroup.find_by_id(new_order[:managing_group_id])[:name]}." + end + # Check pickup_location difference if old_order[:pickup_location_id] != new_order[:pickup_location_id] - log_entries << "Remittering ändrades från #{PickupLocation.find_by_id(old_order[:pickup_location_id])[:name_sv]} till #{PickupLocation.find_by_id(new_order[:pickup_location_id])[:name_sv]}." + log_entries << "Avhämtningsbibliotek ändrades från #{PickupLocation.find_by_id(old_order[:pickup_location_id])[:name_sv]} till #{PickupLocation.find_by_id(new_order[:pickup_location_id])[:name_sv]}." end # Check lending library difference @@ -794,6 +809,7 @@ def metadata_attributes [:id, :order_number, :order_type_id, + :managing_group_id, :pickup_location_id, :order_path, :status_id, diff --git a/app/models/user.rb b/app/models/user.rb index e9651f7..e19fbdc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -48,6 +48,7 @@ def as_json(options = {}) { id: id, xkonto: xkonto, + managing_group_id: managing_group_id, pickup_location_id: pickup_location_id, name: name } From ca5e7823888f46410cadb5f187db91f5f8e21883 Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Tue, 5 Mar 2019 17:42:27 +0100 Subject: [PATCH 5/6] Add token validation --- app/controllers/managing_groups_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/managing_groups_controller.rb b/app/controllers/managing_groups_controller.rb index 4128fd1..40bbbed 100644 --- a/app/controllers/managing_groups_controller.rb +++ b/app/controllers/managing_groups_controller.rb @@ -1,5 +1,5 @@ class ManagingGroupsController < ApplicationController - + before_filter :validate_token # Find all managing_group and show them. def index objs = ManagingGroup.all.order(:name) From 1f1d504ccce08d5eedeb24d6cbe4d3667ac89f9b Mon Sep 17 00:00:00 2001 From: Per Larsson Date: Wed, 6 Mar 2019 10:19:58 +0100 Subject: [PATCH 6/6] Implement user update --- app/controllers/users_controller.rb | 16 +++++++++++++++- config/routes.rb | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1bb4094..f774ed7 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -43,11 +43,25 @@ def create end def update - render json: {}, status: 501 + user_id = params[:id] + user = User.find_by_id(user_id) + # TBD: check user + if user + user.update_attributes(permitted_params) + render json: {user: user}, status: 200 + else + render json: {}, status: 404 + end + rescue => error + render json: {}, status: 500 end def delete render json: {}, status: 501 end +private + def permitted_params + params.require(:user).permit([:managing_group_id, :pickup_location_id]) + end end diff --git a/config/routes.rb b/config/routes.rb index fd62a85..4f42c31 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,7 @@ get 'users' => 'users#index' get 'users/:id' => 'users#show', :constraints => { :id => /[0-9]+/ } get 'users/:xkonto' => 'users#show_by_xkonto', :constraints => { :xkonto => /[A-Za-z]+/ } + put 'users/:id' => 'users#update', :constraints => { :id => /[0-9]+/ } get 'statuses' => 'statuses#index' get 'statuses/:id' => 'statuses#show', :constraints => { :id => /[0-9]+/ }