@@ -74,7 +74,8 @@ mod test {
74
74
mock_store_b, MockData , MockDataInserts ,
75
75
} ,
76
76
test_db:: { setup_all, setup_all_with_data} ,
77
- RequisitionLineRow , RequisitionRow , RequisitionStatus ,
77
+ ApprovalStatusType , RequisitionLineRow , RequisitionRow , RequisitionStatus ,
78
+ StorePreferenceRow , StorePreferenceRowRepository ,
78
79
} ;
79
80
use util:: inline_init;
80
81
@@ -128,6 +129,7 @@ mod test {
128
129
r. name_link_id = "name_a" . to_string ( ) ;
129
130
r. r#type = RequisitionType :: Response ;
130
131
r. status = RequisitionStatus :: New ;
132
+ r. approval_status = Some ( ApprovalStatusType :: Approved ) ;
131
133
r. created_datetime = Utc :: now ( ) . naive_utc ( ) ;
132
134
r. max_months_of_stock = 3.0 ;
133
135
} )
@@ -139,6 +141,7 @@ mod test {
139
141
r. requisition_id = "requisition_one" . to_string ( ) ;
140
142
r. item_link_id = "item_d" . to_string ( ) ;
141
143
r. requested_quantity = 20.0 ;
144
+ r. approved_quantity = 12.0 ;
142
145
} )
143
146
}
144
147
@@ -150,7 +153,7 @@ mod test {
150
153
r. requested_quantity = 15.0 ;
151
154
r. available_stock_on_hand = 10.0 ;
152
155
r. average_monthly_consumption = 50.0 ;
153
- r. suggested_quantity = 240 .0;
156
+ r. approved_quantity = 12 .0;
154
157
} )
155
158
}
156
159
@@ -162,6 +165,7 @@ mod test {
162
165
r. name_link_id = "name_b" . to_string ( ) ;
163
166
r. r#type = RequisitionType :: Response ;
164
167
r. status = RequisitionStatus :: New ;
168
+ r. approval_status = Some ( ApprovalStatusType :: Approved ) ;
165
169
r. created_datetime = Utc :: now ( ) . naive_utc ( ) ;
166
170
r. max_months_of_stock = 6.0 ;
167
171
} )
@@ -173,6 +177,76 @@ mod test {
173
177
r. requisition_id = "requisition_two" . to_string ( ) ;
174
178
r. item_link_id = "item_e" . to_string ( ) ;
175
179
r. requested_quantity = 20.0 ;
180
+ r. approved_quantity = 10.0 ;
181
+ } )
182
+ }
183
+
184
+ fn requisition_three ( ) -> RequisitionRow {
185
+ inline_init ( |r : & mut RequisitionRow | {
186
+ r. id = "requisition_three" . to_string ( ) ;
187
+ r. requisition_number = 4 ;
188
+ r. store_id = mock_store_a ( ) . id ;
189
+ r. name_link_id = "name_b" . to_string ( ) ;
190
+ r. r#type = RequisitionType :: Response ;
191
+ r. status = RequisitionStatus :: New ;
192
+ r. approval_status = Some ( ApprovalStatusType :: Approved ) ;
193
+ r. created_datetime = Utc :: now ( ) . naive_utc ( ) ;
194
+ r. max_months_of_stock = 6.0 ;
195
+ } )
196
+ }
197
+
198
+ fn requisition_line_three_a ( ) -> RequisitionLineRow {
199
+ inline_init ( |r : & mut RequisitionLineRow | {
200
+ r. id = "requisition_line_three_a" . to_string ( ) ;
201
+ r. requisition_id = "requisition_three" . to_string ( ) ;
202
+ r. item_link_id = "item_e" . to_string ( ) ;
203
+ r. requested_quantity = 25.0 ;
204
+ r. approved_quantity = 18.0 ;
205
+ } )
206
+ }
207
+
208
+ fn requisition_four ( ) -> RequisitionRow {
209
+ inline_init ( |r : & mut RequisitionRow | {
210
+ r. id = "requisition_four" . to_string ( ) ;
211
+ r. requisition_number = 5 ;
212
+ r. store_id = mock_store_a ( ) . id ;
213
+ r. name_link_id = "name_b" . to_string ( ) ;
214
+ r. r#type = RequisitionType :: Response ;
215
+ r. status = RequisitionStatus :: New ;
216
+ r. approval_status = Some ( ApprovalStatusType :: Denied ) ;
217
+ r. created_datetime = Utc :: now ( ) . naive_utc ( ) ;
218
+ r. max_months_of_stock = 6.0 ;
219
+ } )
220
+ }
221
+
222
+ fn requisition_line_four_a ( ) -> RequisitionLineRow {
223
+ inline_init ( |r : & mut RequisitionLineRow | {
224
+ r. id = "requisition_line_four_a" . to_string ( ) ;
225
+ r. requisition_id = "requisition_four" . to_string ( ) ;
226
+ r. item_link_id = "item_e" . to_string ( ) ;
227
+ r. requested_quantity = 10.0 ;
228
+ } )
229
+ }
230
+
231
+ fn requisition_five ( ) -> RequisitionRow {
232
+ inline_init ( |r : & mut RequisitionRow | {
233
+ r. id = "requisition_five" . to_string ( ) ;
234
+ r. requisition_number = 5 ;
235
+ r. store_id = mock_store_a ( ) . id ;
236
+ r. name_link_id = "name_b" . to_string ( ) ;
237
+ r. r#type = RequisitionType :: Response ;
238
+ r. status = RequisitionStatus :: New ;
239
+ r. created_datetime = Utc :: now ( ) . naive_utc ( ) ;
240
+ r. max_months_of_stock = 6.0 ;
241
+ } )
242
+ }
243
+
244
+ fn requisition_line_five_a ( ) -> RequisitionLineRow {
245
+ inline_init ( |r : & mut RequisitionLineRow | {
246
+ r. id = "requisition_line_five_a" . to_string ( ) ;
247
+ r. requisition_id = "requisition_five" . to_string ( ) ;
248
+ r. item_link_id = "item_e" . to_string ( ) ;
249
+ r. requested_quantity = 6.0 ;
176
250
} )
177
251
}
178
252
@@ -229,13 +303,19 @@ mod test {
229
303
r. requisitions = vec ! [
230
304
requisition_one( ) ,
231
305
requisition_two( ) ,
306
+ requisition_three( ) ,
307
+ requisition_four( ) ,
308
+ requisition_five( ) ,
232
309
request_requisition_a( ) ,
233
310
request_requisition_b( ) ,
234
311
] ;
235
312
r. requisition_lines = vec ! [
236
313
requisition_line_one_a( ) ,
237
314
requisition_line_one_b( ) ,
238
315
requisition_line_two_a( ) ,
316
+ requisition_line_three_a( ) ,
317
+ requisition_line_four_a( ) ,
318
+ requisition_line_five_a( ) ,
239
319
request_requisition_a_line_a( ) ,
240
320
request_requisition_b_line_a( ) ,
241
321
]
@@ -249,16 +329,54 @@ mod test {
249
329
. unwrap ( ) ;
250
330
let service = service_provider. requisition_line_service ;
251
331
252
- let stats = service
332
+ let stats_result = service
253
333
. get_response_requisition_line_stats ( & context, & requisition_line_one_b ( ) . id )
254
334
. unwrap ( ) ;
335
+
336
+ // Test when response requisition authorisation is not required
255
337
let response_requisition_stats = ResponseRequisitionStats {
256
338
response_store_stats : ResponseStoreStats {
257
339
stock_on_hand : 0.0 ,
258
340
stock_on_order : request_requisition_a_line_a ( ) . requested_quantity ,
259
341
incoming_stock : 0 ,
260
342
requested_quantity : requisition_line_one_b ( ) . requested_quantity ,
261
- other_requested_quantity : requisition_line_one_a ( ) . requested_quantity ,
343
+ other_requested_quantity : requisition_line_two_a ( ) . requested_quantity
344
+ + requisition_line_three_a ( ) . requested_quantity
345
+ + requisition_line_four_a ( ) . requested_quantity
346
+ + requisition_line_five_a ( ) . requested_quantity ,
347
+ } ,
348
+ request_store_stats : RequestStoreStats {
349
+ stock_on_hand : requisition_line_one_b ( ) . available_stock_on_hand ,
350
+ amc : requisition_line_one_b ( ) . average_monthly_consumption ,
351
+ max_months_of_stock : requisition_one ( ) . max_months_of_stock ,
352
+ suggested_quantity : requisition_line_one_b ( ) . suggested_quantity ,
353
+ } ,
354
+ } ;
355
+
356
+ assert_eq ! ( stats_result, response_requisition_stats) ;
357
+
358
+ // Test Authorisation required on response requisition
359
+ StorePreferenceRowRepository :: new ( & context. connection )
360
+ . upsert_one ( & StorePreferenceRow {
361
+ id : mock_store_a ( ) . id ,
362
+ response_requisition_requires_authorisation : true ,
363
+ ..Default :: default ( )
364
+ } )
365
+ . unwrap ( ) ;
366
+
367
+ let stats_result = service
368
+ . get_response_requisition_line_stats ( & context, & requisition_line_one_b ( ) . id )
369
+ . unwrap ( ) ;
370
+
371
+ let requisition_stats = ResponseRequisitionStats {
372
+ response_store_stats : ResponseStoreStats {
373
+ stock_on_hand : 0.0 ,
374
+ stock_on_order : request_requisition_a_line_a ( ) . requested_quantity ,
375
+ incoming_stock : 0 ,
376
+ requested_quantity : requisition_line_one_b ( ) . approved_quantity ,
377
+ other_requested_quantity : requisition_line_two_a ( ) . approved_quantity
378
+ + requisition_line_three_a ( ) . approved_quantity
379
+ + requisition_line_five_a ( ) . requested_quantity ,
262
380
} ,
263
381
request_store_stats : RequestStoreStats {
264
382
stock_on_hand : requisition_line_one_b ( ) . available_stock_on_hand ,
@@ -268,6 +386,6 @@ mod test {
268
386
} ,
269
387
} ;
270
388
271
- assert_eq ! ( stats , response_requisition_stats ) ;
389
+ assert_eq ! ( stats_result , requisition_stats ) ;
272
390
}
273
391
}
0 commit comments