comee_core 0.1.98 → 0.2.0

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: 7b02327a6f7076613d6072fc19df00c3c19b8256dfba0e90d254d4c63f21cd87
4
- data.tar.gz: eab3d691391e6aa77b95074449704f65f2b7320f3a920b00ef645b651351bec4
3
+ metadata.gz: 57905a1877a1cfdd9fea4c9e066e0f9ee22917dac5b52da002c2c6870f8599da
4
+ data.tar.gz: fd73641d6b2535751080b5d582b96e4f8506b192f990b664644afaef4a187b7b
5
5
  SHA512:
6
- metadata.gz: bb5963d8249beac05dc28de793a53c970168f0da7f20f289e0bbb2c81562b633e85be1eb77befe79f268535b3b23174fda847b15e940e21575f1fd0502de977a
7
- data.tar.gz: c5ceac445d220ed100a80ce759f62ac5537bb862e357dfb855552b49aa5b94880163baaae8f371a16f96db07d30491d92fa04043420c9f4084154e5f34003904
6
+ metadata.gz: 74ed17525f0cad01052f2b1b3f4dbe72dc6c155422e738ca441686402b3fa19ab1c6c616021c211e918b39d05d00cef643b0cbf7e634250bc1a72d4c8a838fed
7
+ data.tar.gz: 78ddd02578f0e92d16d75e04399d08d081fd9d00e989c4ea76c6c7ec29b86686010a91032a2e3de26369e817a997b7b1c7e554c0a1301e9ccc6d50a095fba79c
@@ -9,6 +9,52 @@ module Comee
9
9
  end
10
10
  end
11
11
 
12
+ def create
13
+ super do
14
+ price = ClientPrice.new(model_params)
15
+ master_price = MasterPrice.find_by(product_id: price.product_id, primary: true)
16
+ price.price = master_price&.selling_price
17
+ if price.price
18
+ price.price = price.margin_increase? ? price.price * (1 + price.margin / 100) : price.price * (1 - price.margin / 100)
19
+ end
20
+ price
21
+ end
22
+ end
23
+
24
+ def update
25
+ if @obj.draft?
26
+ product_id = model_params[:product_id] || @obj.product_id
27
+ master_price = MasterPrice.find_by(product_id: product_id, primary: true)
28
+ @obj.price = master_price&.selling_price
29
+ if @obj.price
30
+ @obj.price = @obj.margin_increase? ? @obj.price * (1 + @obj.margin / 100) : @obj.price * (1 - @obj.margin / 100)
31
+ end
32
+ if @obj.update(model_params)
33
+ render_content(@obj)
34
+ else
35
+ render json: {success: false, error: @obj.errors.full_messages[0]}, status: :unprocessable_entity
36
+ end
37
+ else
38
+ error = "Client price should be in draft state to edit."
39
+ render json: {success: false, error: error}, status: :unprocessable_entity
40
+ end
41
+ rescue StandardError => e
42
+ render json: {success: false, error: e.message}
43
+ end
44
+
45
+ def extend_validity
46
+ price = ClientPrice.find(params[:id])
47
+ if price.draft?
48
+ render json: {success: false, error: "Price must be an approved price for validity extension."}
49
+ else
50
+ price.valid_to = extend_params[:valid_to]
51
+ price.save!
52
+ render_content(price)
53
+ end
54
+ rescue StandardError => e
55
+ render json: {success: false, error: e.message}
56
+ end
57
+
12
58
  def fetch_for_client
13
59
  client = Client.find(params[:id])
14
60
  client_id = client.parent_id || client.id
@@ -17,6 +63,14 @@ module Comee
17
63
  render_content(prices)
18
64
  end
19
65
 
66
+ def approve
67
+ price = ClientPrice.find(params[:id])
68
+ price = price.approve
69
+ render_content(price)
70
+ rescue StandardError => e
71
+ render json: {success: false, error: e.message}, status: :unprocessable_entity
72
+ end
73
+
20
74
  def filter
21
75
  prices = ClientPrice.includes(:client, :product, :unit, :product_lookup)
22
76
  .ransack(params[:q]).result
@@ -26,9 +80,13 @@ module Comee
26
80
  private
27
81
 
28
82
  def model_params
29
- params.require(:payload).permit(:valid_from, :valid_to, :price, :product_id, :margin, :margin_type, :client_id, :previous_price,
83
+ params.require(:payload).permit(:valid_from, :valid_to, :product_id, :margin, :margin_type, :client_id, :previous_price,
30
84
  :unit_id)
31
85
  end
86
+
87
+ def extend_params
88
+ params.require(:payload).permit(:valid_to)
89
+ end
32
90
  end
33
91
  end
34
92
  end
@@ -5,6 +5,10 @@ module Comee
5
5
  belongs_to :client
6
6
 
7
7
  validates :url, :processed, presence: true
8
+
9
+ def self.ransackable_attributes(_auth_object = nil)
10
+ %w[client_id id order_source_id processed]
11
+ end
8
12
  end
9
13
  end
10
14
  end
@@ -23,6 +23,14 @@ module Comee
23
23
  end
24
24
  end
25
25
 
26
+ def margin_increase?
27
+ ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:increase]
28
+ end
29
+
30
+ def margin_discount?
31
+ ClientPrice.margin_types[margin_type] == ClientPrice.margin_types[:discount]
32
+ end
33
+
26
34
  def self.ransackable_attributes(_auth_object = nil)
27
35
  %w[
28
36
  id
@@ -23,6 +23,14 @@ module Comee
23
23
  errors.add(:base, "Price validity date range is not correct.") unless period.valid?
24
24
  end
25
25
 
26
+ def draft?
27
+ Price.price_statuses[price_status] == Price.price_statuses[:draft]
28
+ end
29
+
30
+ def approved?
31
+ Price.price_statuses[price_status] == Price.price_statuses[:approved]
32
+ end
33
+
26
34
  def compute_status
27
35
  period = Period.new(valid_from, valid_to)
28
36
  if period.past?
@@ -34,6 +42,16 @@ module Comee
34
42
  end
35
43
  end
36
44
 
45
+ def approve
46
+ if Price.price_statuses[price_status] == Price.price_statuses[:approved]
47
+ raise(StandardError, "Price status is already in approved state.")
48
+ end
49
+
50
+ self.price_status = Price.price_statuses[:approved]
51
+ save!
52
+ self
53
+ end
54
+
37
55
  def past?
38
56
  Price.statuses[status] == Price.statuses[:past]
39
57
  end
@@ -1,7 +1,7 @@
1
1
  module Comee
2
2
  module Core
3
3
  class ClientPriceSerializer < ActiveModel::Serializer
4
- attributes :id, :valid_from, :valid_to, :price, :status, :previous_price, :margin, :margin_type
4
+ attributes :id, :valid_from, :valid_to, :price, :status, :price_status, :previous_price, :margin, :margin_type
5
5
  belongs_to :product
6
6
  belongs_to :client
7
7
  belongs_to :unit
@@ -1,7 +1,8 @@
1
1
  module Comee
2
2
  module Core
3
3
  class MasterPriceSerializer < ActiveModel::Serializer
4
- attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin, :lead_time, :status
4
+ attributes :id, :purchase_price, :selling_price, :valid_from, :valid_to, :primary, :margin, :lead_time, :status,
5
+ :price_status
5
6
  belongs_to :product
6
7
  belongs_to :supplier
7
8
  belongs_to :product_lookup
data/config/routes.rb CHANGED
@@ -93,8 +93,15 @@ Comee::Core::Engine.routes.draw do
93
93
  end
94
94
  end
95
95
  resources :agents
96
- post "/client_prices/filter", controller: :client_prices, action: :filter
97
- resources :client_prices
96
+ resources :client_prices do
97
+ member do
98
+ post "extend_validity"
99
+ post "approve"
100
+ end
101
+ collection do
102
+ post "filter"
103
+ end
104
+ end
98
105
  post "/back_orders/filter", controller: :back_orders, action: :filter
99
106
  resources :back_orders do
100
107
  member do
@@ -1,5 +1,5 @@
1
1
  module Comee
2
2
  module Core
3
- VERSION = "0.1.98".freeze
3
+ VERSION = "0.2.0".freeze
4
4
  end
5
5
  end
@@ -22,5 +22,9 @@ FactoryBot.define do
22
22
  valid_from { Date.current.advance(months: 1) }
23
23
  valid_to { Date.current.advance(months: 2) }
24
24
  end
25
+
26
+ trait :approved do
27
+ price_status { Comee::Core::Price.price_statuses[:approved] }
28
+ end
25
29
  end
26
30
  end
@@ -16,6 +16,10 @@ FactoryBot.define do
16
16
  product_lookup { nil }
17
17
  propagated_to_client { false }
18
18
 
19
+ trait :approved do
20
+ price_status { Comee::Core::Price.price_statuses[:approved] }
21
+ end
22
+
19
23
  trait :past do
20
24
  valid_from { Date.current.advance(months: -2) }
21
25
  valid_to { Date.current.advance(months: -1) }
@@ -60,6 +64,7 @@ FactoryBot.define do
60
64
  previous_price: price
61
65
  )
62
66
  price.next_price = next_price
67
+ price.price_status = Comee::Core::Price.price_statuses[:approved]
63
68
  price.save!
64
69
  price
65
70
  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.1.98
4
+ version: 0.2.0
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-01-20 00:00:00.000000000 Z
11
+ date: 2024-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_model_serializers