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 +4 -4
- data/app/controllers/comee/core/client_prices_controller.rb +59 -1
- data/app/models/comee/core/client_order.rb +4 -0
- data/app/models/comee/core/client_price.rb +8 -0
- data/app/models/comee/core/price.rb +18 -0
- data/app/serializers/comee/core/client_price_serializer.rb +1 -1
- data/app/serializers/comee/core/master_price_serializer.rb +2 -1
- data/config/routes.rb +9 -2
- data/lib/comee/core/version.rb +1 -1
- data/spec/factories/comee/core/client_prices.rb +4 -0
- data/spec/factories/comee/core/master_prices.rb +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57905a1877a1cfdd9fea4c9e066e0f9ee22917dac5b52da002c2c6870f8599da
|
4
|
+
data.tar.gz: fd73641d6b2535751080b5d582b96e4f8506b192f990b664644afaef4a187b7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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, :
|
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
|
@@ -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
|
-
|
97
|
-
|
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
|
data/lib/comee/core/version.rb
CHANGED
@@ -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.
|
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-
|
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
|