comee_core 0.2.52 → 0.2.54

Sign up to get free protection for your applications and to get access to all the features.
Files changed (26) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/comee/core/access_controller.rb +6 -1
  3. data/app/controllers/comee/core/application_controller.rb +23 -2
  4. data/app/controllers/comee/core/notifications_controller.rb +17 -0
  5. data/app/controllers/comee/core/sales_order_items_controller.rb +12 -0
  6. data/app/controllers/comee/core/users_controller.rb +1 -1
  7. data/app/mailers/comee/core/notification_mailer.rb +5 -3
  8. data/app/models/comee/core/application_module.rb +8 -0
  9. data/app/models/comee/core/role.rb +10 -0
  10. data/app/models/comee/core/user.rb +15 -2
  11. data/app/models/comee/core/user_application_role.rb +9 -0
  12. data/app/serializers/comee/core/purchase_order_item_serializer.rb +9 -0
  13. data/app/serializers/comee/core/sales_order_item_detail_serializer.rb +10 -0
  14. data/app/serializers/comee/core/shipment_item_serializer.rb +1 -0
  15. data/app/serializers/comee/core/user_serializer.rb +1 -1
  16. data/config/routes.rb +1 -0
  17. data/db/migrate/20230411123525_create_comee_core_application_modules.rb +10 -0
  18. data/db/migrate/20230411132211_create_comee_core_roles.rb +14 -0
  19. data/db/migrate/{20230728014330_create_comee_core_users.rb → 20230428014330_create_comee_core_users.rb} +0 -1
  20. data/db/migrate/20230428140341_create_comee_core_user_application_roles.rb +20 -0
  21. data/lib/comee/core/version.rb +1 -1
  22. data/spec/factories/comee/core/application_modules.rb +6 -0
  23. data/spec/factories/comee/core/roles.rb +7 -0
  24. data/spec/factories/comee/core/user_application_roles.rb +7 -0
  25. data/spec/factories/comee/core/users.rb +0 -1
  26. metadata +14 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77d65a7b04edc641f78ca618e99b2012c6af5bad03f540ebf3e9792f8ba9e4f8
4
- data.tar.gz: a29faf7e98063e8cdf085edda635e59b5e93656ea65f88c82da658cbba79f9d4
3
+ metadata.gz: e3a703914e5326d261f0c943c3b75d53ff8c4b87f1b25cddb5ea874206ffc04d
4
+ data.tar.gz: 15b4815aca29b0d972da7dc05b56bca36853397d1b9f418a36e6b5b1f47f3318
5
5
  SHA512:
6
- metadata.gz: cd1e0cd56613288784e43ea0fbf439ed27164035413d0147466b683e8d7d4be92242b2bf77388317df78e94ece7d34a0865f760399885c1478c5b50225c7d7ed
7
- data.tar.gz: e6724f1710e3c5cf6197b89f5aa31c44039ab9b50a50a0568ef8fc13dcba5a22c66b9fb167f6e6475290f89b6f625cc17a1b70e98717a6a6d7ef9bdc0ce0ae8b
6
+ metadata.gz: 8f0819b6d18e43ed9a5c3935ad4ff0ea4ca2c98188240b21c678b53903a27610cf6613dff8499b0c2cfbd878c57c08f85baf189763f6bfcc756257291cc9e191
7
+ data.tar.gz: f69e7f88ac237fa4788f0e161647b9046eeba570f22a451baf054348d326c410e54fa3d8e1125c5cf7bdf2fb52766c996b1a1199691e812ed5489fce5e70877c
@@ -6,12 +6,17 @@ module Comee
6
6
  def login
7
7
  user = User.find_by(email: auth_params[:email])
8
8
  if user
9
+ unless user.application_roles?(current_application)
10
+ render(json: {error: "User does not have access to this application."}, status: 400) and return
11
+ end
12
+
13
+ roles = user.application_roles(current_application).map(&:code)
9
14
  if user.authenticate(auth_params[:password])
10
15
  payload = {
11
16
  id: user.id,
12
17
  name: user.name,
13
18
  email: user.email,
14
- user_type: user.user_type
19
+ roles: roles
15
20
  }
16
21
  jwt = TokenService.issue(payload)
17
22
  render json: {token: jwt, user: payload}
@@ -13,8 +13,15 @@ module Comee
13
13
  result[:page] = params[:page].to_i
14
14
  result[:total] = total
15
15
  end
16
- result[:data] = options.key?(:fields) ? serialize(data, include: options[:fields]) : serialize(data)
17
-
16
+ result[:data] = if options.key?(:fields) && options.key?(:serializer)
17
+ serialize(data, {include: options[:fields], serializer: options[:serializer]})
18
+ elsif options.key?(:fields) && options.key?(:each_serializer)
19
+ serialize(data, {include: options[:fields], each_serializer: options[:each_serializer]})
20
+ elsif options.key?(:fields)
21
+ serialize(data, {include: options[:fields]})
22
+ else
23
+ serialize(data)
24
+ end
18
25
  render json: result
19
26
  end
20
27
 
@@ -29,6 +36,20 @@ module Comee
29
36
  @current_user ||= user
30
37
  end
31
38
 
39
+ def application_code
40
+ code = Rails.application.config.application_code
41
+ raise(StandardError, "Code is not set for the current application.") unless code
42
+
43
+ code
44
+ end
45
+
46
+ def current_application
47
+ app_code = application_code
48
+ return ApplicationModule.find_by(code: app_code) if app_code
49
+
50
+ nil
51
+ end
52
+
32
53
  def authenticate
33
54
  render json: {error: "Unauthorized"}, status: 401 if current_user.nil?
34
55
  end
@@ -28,11 +28,28 @@ module Comee
28
28
  render json: {success: true, data: @notification.message}
29
29
  end
30
30
 
31
+ def notify
32
+ NotificationMailer.with(
33
+ user: current_user,
34
+ recipients: notify_params[:recipients],
35
+ subject: notify_params[:subject],
36
+ email_body: notify_params[:body],
37
+ files: notify_params[:files]
38
+ ).notify.deliver_now
39
+ render json: {success: true}
40
+ rescue StandardError => e
41
+ render_error(e)
42
+ end
43
+
31
44
  private
32
45
 
33
46
  def set_notification
34
47
  @notification = Notification.find(params[:id])
35
48
  end
49
+
50
+ def notify_params
51
+ params.require(:payload).permit(:subject, :body, recipients: [], files: {filename: :file})
52
+ end
36
53
  end
37
54
  end
38
55
  end
@@ -15,6 +15,18 @@ module Comee
15
15
  end
16
16
  end
17
17
 
18
+ def shipment_details
19
+ details = SalesOrderItem.includes(shipment_items: :item_statuses, purchase_order_item: :purchase_order)
20
+ .find(params[:id])
21
+ render_content(
22
+ details,
23
+ {
24
+ fields: ["shipment_items.item_statuses", "purchase_order_item.purchase_order"],
25
+ serializer: SalesOrderItemDetailSerializer
26
+ }
27
+ )
28
+ end
29
+
18
30
  def suggest_values
19
31
  service = CustomerOrderService.new
20
32
  result = service.suggest_values(params[:id], suggest_params[:unit_id])
@@ -6,7 +6,7 @@ module Comee
6
6
  private
7
7
 
8
8
  def model_params
9
- params.require(:payload).permit(:name, :email, :active, :password, :password_confirmation, :user_type)
9
+ params.require(:payload).permit(:name, :email, :active, :password, :password_confirmation)
10
10
  end
11
11
  end
12
12
  end
@@ -3,15 +3,17 @@ module Comee
3
3
  class NotificationMailer < ApplicationMailer
4
4
  def notify
5
5
  user = params[:user]
6
+ files = params[:files]
7
+ files&.each { |k, v| attachments[k] = v }
6
8
 
7
9
  mail(
8
10
  from: email_address_with_name(user.email, user.name),
9
11
  to: params[:recipients],
10
12
  subject: params[:subject],
11
- body: params[:email_body],
12
- content_type: "text/html",
13
13
  delivery_method_options: user.delivery_options
14
- )
14
+ ) do |format|
15
+ format.html { render(html: params[:email_body].html_safe) }
16
+ end
15
17
  end
16
18
  end
17
19
  end
@@ -0,0 +1,8 @@
1
+ module Comee
2
+ module Core
3
+ class ApplicationModule < ApplicationRecord
4
+ validates :code, :name, presence: true
5
+ validates :code, uniqueness: true
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module Comee
2
+ module Core
3
+ class Role < ApplicationRecord
4
+ belongs_to :application_module
5
+
6
+ validates :code, :name, presence: true
7
+ validates :code, uniqueness: true
8
+ end
9
+ end
10
+ end
@@ -1,13 +1,14 @@
1
1
  module Comee
2
2
  module Core
3
3
  class User < ApplicationRecord
4
- enum :user_type, {supplier: 0, admin: 1, client: 2, clerk: 3, order_manager: 4}
5
4
  has_one :email_setting
6
5
 
7
6
  has_secure_password
8
7
  has_many :notifications, as: :recipient, dependent: :destroy
8
+ has_many :user_application_roles
9
+ has_many :roles, through: :user_application_roles
9
10
 
10
- validates :name, :email, :user_type, presence: true
11
+ validates :name, :email, presence: true
11
12
  validates :email, uniqueness: true
12
13
 
13
14
  def delivery_options
@@ -23,6 +24,18 @@ module Comee
23
24
  read_timeout: setting.read_timeout
24
25
  }
25
26
  end
27
+
28
+ def application_roles?(application)
29
+ roles.references(:user_application_roles)
30
+ .where(comee_core_user_application_roles: {application_module_id: application.id})
31
+ .count
32
+ .positive?
33
+ end
34
+
35
+ def application_roles(application)
36
+ roles.references(:user_application_roles)
37
+ .where(comee_core_user_application_roles: {application_module_id: application.id})
38
+ end
26
39
  end
27
40
  end
28
41
  end
@@ -0,0 +1,9 @@
1
+ module Comee
2
+ module Core
3
+ class UserApplicationRole < ApplicationRecord
4
+ belongs_to :user
5
+ belongs_to :application_module
6
+ belongs_to :role
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Comee
2
+ module Core
3
+ class PurchaseOrderItemSerializer < ActiveModel::Serializer
4
+ attributes :id, :quantity, :confirmed_quantity, :price
5
+
6
+ belongs_to :purchase_order
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module Comee
2
+ module Core
3
+ class SalesOrderItemDetailSerializer < ActiveModel::Serializer
4
+ attributes :id, :customer_item_no, :customer_item_description, :quantity, :quantity_delivered, :quantity_canceled
5
+
6
+ has_many :shipment_items
7
+ belongs_to :purchase_order_item
8
+ end
9
+ end
10
+ end
@@ -4,6 +4,7 @@ module Comee
4
4
  attributes :id, :quantity, :shipment_status, :status, :handover_date, :delivery_date, :pallet_no, :consignee,
5
5
  :order_number
6
6
  belongs_to :sales_order_item
7
+ has_many :item_statuses
7
8
  end
8
9
  end
9
10
  end
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class UserSerializer < ActiveModel::Serializer
4
- attributes :id, :name, :email, :user_type
4
+ attributes :id, :name, :email, :active
5
5
  end
6
6
  end
7
7
  end
data/config/routes.rb CHANGED
@@ -108,6 +108,7 @@ Comee::Core::Engine.routes.draw do
108
108
  end
109
109
  resources :sales_order_items, except: [:index] do
110
110
  member do
111
+ get "shipment_details"
111
112
  post "suggest", controller: :sales_order_items, action: :suggest_values
112
113
  post "cancel"
113
114
  post "activate"
@@ -0,0 +1,10 @@
1
+ class CreateComeeCoreApplicationModules < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_application_modules do |t|
4
+ t.string :code
5
+ t.string :name
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ class CreateComeeCoreRoles < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_roles do |t|
4
+ t.string :code
5
+ t.string :name
6
+ t.references :application_module,
7
+ null: false,
8
+ index: {name: "am_on_ccr_indx"},
9
+ foreign_key: {to_table: :comee_core_application_modules}
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -5,7 +5,6 @@ class CreateComeeCoreUsers < ActiveRecord::Migration[7.0]
5
5
  t.string :email, null: false
6
6
  t.boolean :active, null: false, default: true
7
7
  t.string :password_digest
8
- t.integer :user_type, null: false, default: 0
9
8
 
10
9
  t.timestamps
11
10
  end
@@ -0,0 +1,20 @@
1
+ class CreateComeeCoreUserApplicationRoles < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :comee_core_user_application_roles do |t|
4
+ t.references :user,
5
+ index: {name: "user_on_ccuar_indx"},
6
+ null: false,
7
+ foreign_key: {to_table: :comee_core_users}
8
+ t.references :application_module,
9
+ index: {name: "am_on_ccuar_indx"},
10
+ null: false,
11
+ foreign_key: {to_table: :comee_core_application_modules}
12
+ t.references :role,
13
+ null: false,
14
+ index: {name: "role_on_ccuar_indx"},
15
+ foreign_key: {to_table: :comee_core_roles}
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.2.52".freeze
3
+ VERSION = "0.2.54".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :application_module, class: "Comee::Core::ApplicationModule" do
3
+ code { Faker::Alphanumeric.alpha(number: 10) }
4
+ name { Faker::Name.name }
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :role, class: "Comee::Core::Role" do
3
+ code { Faker::Alphanumeric.alpha(number: 10) }
4
+ name { Faker::Name.name }
5
+ application_module
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :user_application_role, class: "Comee::Core::UserApplicationRole" do
3
+ user
4
+ application_module
5
+ role
6
+ end
7
+ end
@@ -4,6 +4,5 @@ FactoryBot.define do
4
4
  email { Faker::Internet.email }
5
5
  active { true }
6
6
  password { Faker::Internet.password }
7
- user_type { Comee::Core::User.user_types[:supplier] }
8
7
  end
9
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comee_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.52
4
+ version: 0.2.54
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-10 00:00:00.000000000 Z
11
+ date: 2024-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers
@@ -300,6 +300,7 @@ files:
300
300
  - app/mailers/comee/core/supplier_mailer.rb
301
301
  - app/models/comee/core/additional_item.rb
302
302
  - app/models/comee/core/agent.rb
303
+ - app/models/comee/core/application_module.rb
303
304
  - app/models/comee/core/application_record.rb
304
305
  - app/models/comee/core/back_order.rb
305
306
  - app/models/comee/core/back_order_item.rb
@@ -340,6 +341,7 @@ files:
340
341
  - app/models/comee/core/purchase_requisition_item.rb
341
342
  - app/models/comee/core/quotation_request.rb
342
343
  - app/models/comee/core/quotation_request_item.rb
344
+ - app/models/comee/core/role.rb
343
345
  - app/models/comee/core/sales_order.rb
344
346
  - app/models/comee/core/sales_order_item.rb
345
347
  - app/models/comee/core/shipment_instruction.rb
@@ -353,6 +355,7 @@ files:
353
355
  - app/models/comee/core/unit.rb
354
356
  - app/models/comee/core/unit_conversion.rb
355
357
  - app/models/comee/core/user.rb
358
+ - app/models/comee/core/user_application_role.rb
356
359
  - app/notifications/comee/core/back_order_notification.rb
357
360
  - app/serializers/comee/core/agent_serializer.rb
358
361
  - app/serializers/comee/core/client_price_serializer.rb
@@ -371,8 +374,10 @@ files:
371
374
  - app/serializers/comee/core/product_lookup_serializer.rb
372
375
  - app/serializers/comee/core/product_serializer.rb
373
376
  - app/serializers/comee/core/product_type_serializer.rb
377
+ - app/serializers/comee/core/purchase_order_item_serializer.rb
374
378
  - app/serializers/comee/core/quotation_request_item_serializer.rb
375
379
  - app/serializers/comee/core/quotation_request_serializer.rb
380
+ - app/serializers/comee/core/sales_order_item_detail_serializer.rb
376
381
  - app/serializers/comee/core/sales_order_item_serializer.rb
377
382
  - app/serializers/comee/core/sales_order_serializer.rb
378
383
  - app/serializers/comee/core/shipment_item_serializer.rb
@@ -394,11 +399,14 @@ files:
394
399
  - config/locales/en.yml
395
400
  - config/routes.rb
396
401
  - config/spring.rb
402
+ - db/migrate/20230411123525_create_comee_core_application_modules.rb
403
+ - db/migrate/20230411132211_create_comee_core_roles.rb
404
+ - db/migrate/20230428014330_create_comee_core_users.rb
405
+ - db/migrate/20230428140341_create_comee_core_user_application_roles.rb
397
406
  - db/migrate/20230727091518_create_comee_core_fulfillment_centers.rb
398
407
  - db/migrate/20230727153013_create_comee_core_units.rb
399
408
  - db/migrate/20230728011037_create_comee_core_currencies.rb
400
409
  - db/migrate/20230728014322_create_comee_core_products.rb
401
- - db/migrate/20230728014330_create_comee_core_users.rb
402
410
  - db/migrate/20230728122618_create_comee_core_suppliers.rb
403
411
  - db/migrate/20230728123039_create_comee_core_clients.rb
404
412
  - db/migrate/20230728123458_create_comee_core_agents.rb
@@ -455,6 +463,7 @@ files:
455
463
  - lib/tasks/comee_core_tasks.rake
456
464
  - spec/factories/comee/core/additional_items.rb
457
465
  - spec/factories/comee/core/agents.rb
466
+ - spec/factories/comee/core/application_modules.rb
458
467
  - spec/factories/comee/core/back_order_items.rb
459
468
  - spec/factories/comee/core/back_orders.rb
460
469
  - spec/factories/comee/core/client_orders.rb
@@ -493,6 +502,7 @@ files:
493
502
  - spec/factories/comee/core/purchase_requisitions.rb
494
503
  - spec/factories/comee/core/quotation_request_items.rb
495
504
  - spec/factories/comee/core/quotation_requests.rb
505
+ - spec/factories/comee/core/roles.rb
496
506
  - spec/factories/comee/core/sales_order_items.rb
497
507
  - spec/factories/comee/core/sales_orders.rb
498
508
  - spec/factories/comee/core/shipment_instruction_items.rb
@@ -505,6 +515,7 @@ files:
505
515
  - spec/factories/comee/core/transport_availabilities.rb
506
516
  - spec/factories/comee/core/unit_conversions.rb
507
517
  - spec/factories/comee/core/units.rb
518
+ - spec/factories/comee/core/user_application_roles.rb
508
519
  - spec/factories/comee/core/users.rb
509
520
  homepage: https://www.mks.com
510
521
  licenses: