cats_core 1.1.21 → 1.1.25

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 106712bfb38bd512ae9d06d20301aa81a5a199bb6522728cddcf6c1d688fe444
4
- data.tar.gz: 80cf7130c7cbbb47bcf4120c021e54aa2e9eb7bf5578260664339a6cbca18e78
3
+ metadata.gz: 3babdd4703726f7863d05d4b939af06ede31f1b6a0a5a715ad0f13286ea8343a
4
+ data.tar.gz: 44ed3f59a6099ba17094b8d81232c9e8cf72c6ac95118da99e1e8a23286bebf7
5
5
  SHA512:
6
- metadata.gz: 1741bedb659f842852f836dd020c79f45d4ec901f8e076be97007c06fec9a69cb5793ac7612a46b08e9fd06b92b6892bebb2baa39cb0d49b1a48bffba9c93f48
7
- data.tar.gz: 7fb859382f5faf676437e39cdb7f64c0201a47bb7b9409dd4d41a8ec5e30d13713415f21a04a2b8e2c7fd40c0315c800d1dd64d5277ea846ff279357486a9a4f
6
+ metadata.gz: 82195965fd9917d53ff286e1d2822302f87c9ecf836b292dc8d647eef5f307a9f84d692b4dd5ff4d6a16dc1c21e9c52109966c39d459052f918cd9ad73c6914b
7
+ data.tar.gz: f7c58b63d4e6f66b9ba3011a7066175052b5e6aa92c13339d5d975cf3567108c405e5bfb571bd527c8d12f3b24b6d8ba8924f67134c2f28d5941958a9ba2fb89
@@ -8,6 +8,27 @@ module Cats
8
8
  render json: { success: true, data: serialize(transactions) }
9
9
  end
10
10
 
11
+ def create
12
+ p = model_params
13
+
14
+ # Look for a transaction with the same destination as incoming
15
+ transaction = Cats::Core::ReceiptTransaction.find_by(
16
+ source_id: p[:source_id],
17
+ destination_id: p[:destination_id]
18
+ )
19
+ if transaction
20
+ transaction.quantity += p[:quantity]
21
+ else
22
+ transaction = Cats::Core::ReceiptTransaction.new(p)
23
+ end
24
+
25
+ if transaction.save
26
+ render json: { success: true, data: serialize(transaction) }, status: :created
27
+ else
28
+ render json: { success: false, error: transaction.errors.full_messages[0] }, status: :unprocessable_entity
29
+ end
30
+ end
31
+
11
32
  private
12
33
 
13
34
  def model_params
@@ -5,6 +5,19 @@ module Cats
5
5
 
6
6
  before_action :set_role, only: [:users]
7
7
 
8
+ def index
9
+ roles = Cats::Core::Role.joins(:application_module)
10
+ .where(cats_core_application_modules: { prefix: params[:prefix] })
11
+ render json: { success: true, data: serialize(roles) }
12
+ end
13
+
14
+ def unassigned_roles
15
+ user = Cats::Core::User.find(params[:id])
16
+ roles = Cats::Core::Role.where(application_module_id: user.application_module_id)
17
+ unassigned = roles - user.roles
18
+ render json: { success: true, data: serialize(unassigned) }
19
+ end
20
+
8
21
  def users
9
22
  data = ActiveModelSerializers::SerializableResource.new(@role.users)
10
23
  render json: { success: true, data: data }
@@ -3,7 +3,7 @@ module Cats
3
3
  class UsersController < ApplicationController
4
4
  include Common
5
5
 
6
- before_action :set_user, only: %i[update roles assign_role stores warehouse hub]
6
+ before_action :set_user, only: %i[update roles assign_role revoke_role stores warehouse hub]
7
7
 
8
8
  def index
9
9
  users = Cats::Core::User.joins(:application_module)
@@ -49,7 +49,23 @@ module Cats
49
49
  def assign_role
50
50
  role = Cats::Core::Role.find(params[:role_id])
51
51
  @user.roles << role
52
- data = ActiveModelSerializers::SerializableResource.new(@user)
52
+
53
+ case role.name
54
+ when 'warehouse_manager'
55
+ @user.add_detail(:warehouse, params[:warehouse_id])
56
+ when 'hub_manager'
57
+ @user.add_detail(:hub, params[:hub_id])
58
+ end
59
+
60
+ data = ActiveModelSerializers::SerializableResource.new(role)
61
+ render json: { success: true, data: data }
62
+ end
63
+
64
+ def revoke_role
65
+ role = Cats::Core::Role.find(params[:role_id])
66
+ @user.roles.delete(role)
67
+ @user.remove_detail(role.name) if %w[warehouse_manager hub_manager].include?(role.name)
68
+ data = ActiveModelSerializers::SerializableResource.new(role)
53
69
  render json: { success: true, data: data }
54
70
  end
55
71
 
@@ -18,6 +18,9 @@ module Cats
18
18
  return unless quantity.present? && source.present?
19
19
 
20
20
  total = self.class.where(source: source).sum(:quantity)
21
+
22
+ total -= quantity_was if id
23
+
21
24
  diff = source.quantity - total
22
25
  errors.add(:quantity, "total is higher than source quantity (Max = #{diff}).") if quantity > diff
23
26
  end
@@ -31,6 +31,16 @@ module Cats
31
31
  Cats::Core::Location.find_by(id: details['hub'], location_type: Cats::Core::Location::HUB)
32
32
  end
33
33
 
34
+ def add_detail(key, value)
35
+ details[key] = value
36
+ save!
37
+ end
38
+
39
+ def remove_detail(key)
40
+ details.delete(key)
41
+ save!
42
+ end
43
+
34
44
  def validate_phone_number
35
45
  return unless phone_number.present?
36
46
 
data/config/routes.rb CHANGED
@@ -7,6 +7,7 @@ Cats::Core::Engine.routes.draw do
7
7
 
8
8
  resources :application_modules, param: :prefix do
9
9
  member do
10
+ get 'roles', controller: :roles, action: :index
10
11
  get 'users', controller: :users, action: :index
11
12
  end
12
13
  end
@@ -28,10 +29,12 @@ Cats::Core::Engine.routes.draw do
28
29
  resources :users do
29
30
  member do
30
31
  get 'roles'
32
+ get 'unassigned_roles', controller: :roles, action: :unassigned_roles
31
33
  get 'stores', controller: :users, action: :stores
32
34
  get 'warehouse', controller: :users, action: :warehouse
33
35
  get 'hub', controller: :users, action: :hub
34
36
  post 'assign_role'
37
+ post 'revoke_role'
35
38
  end
36
39
  end
37
40
 
@@ -23,6 +23,6 @@ class CreateCatsCoreRoles < ActiveRecord::Migration[6.1]
23
23
  end
24
24
 
25
25
  add_index(:cats_core_roles, [ :name, :resource_type, :resource_id ])
26
- add_index(:cats_core_users_cats_core_roles, [ :user_id, :role_id ])
26
+ add_index(:cats_core_users_cats_core_roles, [ :user_id, :role_id ], unique: true)
27
27
  end
28
28
  end
@@ -1,5 +1,5 @@
1
1
  module Cats
2
2
  module Core
3
- VERSION = '1.1.21'.freeze
3
+ VERSION = '1.1.25'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cats_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.21
4
+ version: 1.1.25
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-05 00:00:00.000000000 Z
11
+ date: 2021-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers