comee_core 0.1.99 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3b5b69ffae3e2702ed23106fbc360890ec375ae49c97a136b98baad2fec89d8
4
- data.tar.gz: 5fc14c0bac612232d3d32bf4c2f1f0e98e75773adb2aa343d1b73387f8b92bac
3
+ metadata.gz: 57905a1877a1cfdd9fea4c9e066e0f9ee22917dac5b52da002c2c6870f8599da
4
+ data.tar.gz: fd73641d6b2535751080b5d582b96e4f8506b192f990b664644afaef4a187b7b
5
5
  SHA512:
6
- metadata.gz: 986aff6f5d73b35a540a16fbbdafc62a2c03911a6cd06430de431fa30f547994ec3038d90d38e37a8504f36547cb3f519f9804cc8828a54942b08b49752d2884
7
- data.tar.gz: c4add758cc2d3c861a10b0c584f96abac453928bacd0ad5375150bc56233323d4c95a0aa5f617cfe036884efad323b900c39dc6579ae4baaa6fa7d4c0c3fd3a4
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.99".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
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.99
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-21 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