comee_core 0.2.52 → 0.2.53

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 +14 -0
  4. data/app/controllers/comee/core/notifications_controller.rb +17 -0
  5. data/app/controllers/comee/core/sales_order_items_controller.rb +15 -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: cbd504feaf226234a948351b3f05dc7e4bebedbb77943f990c909b49c522b35e
4
+ data.tar.gz: 16479be863225ad791359456c2aeb019a71304b40478fc5fb478a4309600be95
5
5
  SHA512:
6
- metadata.gz: cd1e0cd56613288784e43ea0fbf439ed27164035413d0147466b683e8d7d4be92242b2bf77388317df78e94ece7d34a0865f760399885c1478c5b50225c7d7ed
7
- data.tar.gz: e6724f1710e3c5cf6197b89f5aa31c44039ab9b50a50a0568ef8fc13dcba5a22c66b9fb167f6e6475290f89b6f625cc17a1b70e98717a6a6d7ef9bdc0ce0ae8b
6
+ metadata.gz: 5d7dc57f1d6b2d96de96a0f81dcffeddfd89b0b311f71adb88acc5b66a4f8a0d0e2031a2af3ea21f23b4133c75c19a9d4ea3943e62d14a8ceea0093a1a8a88f2
7
+ data.tar.gz: 7455743f13220ab7add40bb70450fbd73c588c37f9caeebde3a89e90548cb2e4b574ef38a0a664f3a9605d030447260020d7d555c8f716df05dea12a1d69eb68
@@ -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}
@@ -29,6 +29,20 @@ module Comee
29
29
  @current_user ||= user
30
30
  end
31
31
 
32
+ def application_code
33
+ code = Rails.application.config.application_code
34
+ raise(StandardError, "Code is not set for the current application.") unless code
35
+
36
+ code
37
+ end
38
+
39
+ def current_application
40
+ app_code = application_code
41
+ return ApplicationModule.find_by(code: app_code) if app_code
42
+
43
+ nil
44
+ end
45
+
32
46
  def authenticate
33
47
  render json: {error: "Unauthorized"}, status: 401 if current_user.nil?
34
48
  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,21 @@ 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
+ data = ActiveModelSerializers::SerializableResource.new(
22
+ details,
23
+ {
24
+ serializer: SalesOrderItemDetailSerializer,
25
+ include: ["shipment_items.item_statuses", "purchase_order_item.purchase_order"]
26
+ }
27
+ )
28
+ render json: {success: true, data: data}
29
+
30
+ # render_content(details, fields: ["shipment_items.item_statuses", "purchase_order_items.purchase_order"])
31
+ end
32
+
18
33
  def suggest_values
19
34
  service = CustomerOrderService.new
20
35
  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.53".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.53
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-12 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: