@@ -13,22 +13,7 @@ def initialize(request_type:, partner_user_id:, comments: nil, item_requests_att
13
13
end
14
14
15
15
def call
16
- @partner_request = ::Request . new (
17
- partner_id : partner . id ,
18
- organization_id : organization_id ,
19
- comments : comments ,
20
- request_type : request_type ,
21
- partner_user_id : partner_user_id
22
- )
23
- @partner_request = populate_item_request ( @partner_request )
24
- @partner_request . assign_attributes ( additional_attrs )
25
-
26
- unless @partner_request . valid?
27
- @partner_request . errors . each do |error |
28
- errors . add ( error . attribute , error . message )
29
- end
30
- end
31
-
16
+ initialize_only
32
17
return self if errors . present?
33
18
34
19
Request . transaction do
@@ -44,14 +29,23 @@ def call
44
29
end
45
30
46
31
def initialize_only
47
- partner_request = ::Request . new ( partner_id : partner . id ,
32
+ @partner_request = ::Request . new (
33
+ partner_id : partner . id ,
48
34
organization_id : organization_id ,
49
35
comments : comments ,
50
36
request_type : request_type ,
51
- partner_user_id : partner_user_id )
52
- partner_request = populate_item_request ( partner_request )
53
- partner_request . assign_attributes ( additional_attrs )
54
- partner_request
37
+ partner_user_id : partner_user_id
38
+ )
39
+ @partner_request = populate_item_request ( partner_request )
40
+ @partner_request . assign_attributes ( additional_attrs )
41
+
42
+ unless @partner_request . valid?
43
+ @partner_request . errors . each do |error |
44
+ errors . add ( error . attribute , error . message )
45
+ end
46
+ end
47
+
48
+ self
55
49
end
56
50
57
51
private
@@ -68,42 +62,48 @@ def populate_item_request(partner_request)
68
62
69
63
formatted_line_items . each do |input_item |
70
64
pre_existing_entry = items [ input_item [ 'item_id' ] ]
65
+
71
66
if pre_existing_entry
72
- pre_existing_entry . quantity = ( pre_existing_entry . quantity . to_i + input_item [ 'quantity' ] . to_i ) . to_s
73
- # NOTE: When this code was written (and maybe it's still the
74
- # case as you read it!), the FamilyRequestsController does a
75
- # ton of calculation to translate children to item quantities.
76
- # If that logic is incorrect, there's not much we can do here
77
- # to fix things. Could make sense to move more of that logic
78
- # into one of the service objects that instantiate the Request
79
- # object (either this one or the FamilyRequestCreateService).
80
- pre_existing_entry . children = ( pre_existing_entry . children + ( input_item [ 'children' ] || [ ] ) ) . uniq
81
- else
82
- if input_item [ 'request_unit' ] . to_s == '-1' # nothing selected
83
- errors . add ( :base , "Please select a unit for #{ Item . find ( input_item [ "item_id" ] ) . name } " )
67
+ if pre_existing_entry . request_unit != input_item [ 'request_unit' ]
68
+ errors . add ( :base , "Please use the same unit for every #{ Item . find ( input_item [ "item_id" ] ) . name } " )
69
+ else
70
+ pre_existing_entry . quantity = ( pre_existing_entry . quantity . to_i + input_item [ 'quantity' ] . to_i ) . to_s
71
+ # NOTE: When this code was written (and maybe it's still the
72
+ # case as you read it!), the FamilyRequestsController does a
73
+ # ton of calculation to translate children to item quantities.
74
+ # If that logic is incorrect, there's not much we can do here
75
+ # to fix things. Could make sense to move more of that logic
76
+ # into one of the service objects that instantiate the Request
77
+ # object (either this one or the FamilyRequestCreateService).
78
+ pre_existing_entry . children = ( pre_existing_entry . children + ( input_item [ 'children' ] || [ ] ) ) . uniq
84
79
next
85
80
end
86
- items [ input_item [ 'item_id' ] ] = Partners ::ItemRequest . new (
87
- item_id : input_item [ 'item_id' ] ,
88
- request_unit : input_item [ 'request_unit' ] ,
89
- quantity : input_item [ 'quantity' ] ,
90
- children : input_item [ 'children' ] || [ ] , # will create ChildItemRequests if there are any
91
- name : fetch_organization_item_name ( input_item [ 'item_id' ] ) ,
92
- partner_key : fetch_organization_partner_key ( input_item [ 'item_id' ] )
93
- )
94
81
end
95
- end
96
82
97
- item_requests = items . values
83
+ if input_item [ 'request_unit' ] . to_s == '-1' # nothing selected
84
+ errors . add ( :base , "Please select a unit for #{ Item . find ( input_item [ "item_id" ] ) . name } " )
85
+ end
98
86
99
- partner_request . item_requests << item_requests
87
+ item_request = Partners ::ItemRequest . new (
88
+ item_id : input_item [ 'item_id' ] ,
89
+ request_unit : input_item [ 'request_unit' ] ,
90
+ quantity : input_item [ 'quantity' ] ,
91
+ children : input_item [ 'children' ] || [ ] , # will create ChildItemRequests if there are any
92
+ name : fetch_organization_item_name ( input_item [ 'item_id' ] ) ,
93
+ partner_key : fetch_organization_partner_key ( input_item [ 'item_id' ] )
94
+ )
95
+ partner_request . item_requests << item_request
96
+ items [ input_item [ 'item_id' ] ] = item_request
97
+ end
100
98
101
99
partner_request . request_items = partner_request . item_requests . map do |ir |
102
100
{
103
101
item_id : ir . item_id ,
104
- quantity : ir . quantity
105
- }
102
+ quantity : ir . quantity ,
103
+ request_unit : ir . request_unit
104
+ } . compact
106
105
end
106
+
107
107
partner_request
108
108
end
109
109
0 commit comments