comee_core 0.2.52 → 0.2.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: