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 +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
- 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
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
|