11class RefundsController < ApplicationController
22 def edit
33 @refund = Refunds ::Refund . find_by_uid! ( params [ :id ] )
4- @order = Orders ::Order . find_by_uid ( @refund . order_uid )
5- @order_lines = @order . order_lines
4+ @order = Orders ::Order . find_by_uid! ( @refund . order_uid )
5+ @refund_items = build_refund_items_list ( @order . order_lines , @refund . refund_items )
66 end
77
88 def create
@@ -14,10 +14,18 @@ def create
1414
1515 def add_item
1616 add_item_to_refund
17+ redirect_to edit_order_refund_path ( params [ :id ] , order_id : params [ :order_id ] )
18+ rescue Ordering ::Refund ::ExceedsOrderQuantityError
19+ flash [ :alert ] = "You cannot add more of this product to the refund than is in the original order."
20+ redirect_to edit_order_refund_path ( params [ :id ] , order_id : params [ :order_id ] )
1721 end
1822
1923 def remove_item
2024 remove_item_from_refund
25+ redirect_to edit_order_refund_path ( params [ :id ] , order_id : params [ :order_id ] )
26+ rescue Ordering ::Refund ::ProductNotFoundError
27+ flash [ :alert ] = "This product is not added to the refund."
28+ redirect_to edit_order_refund_path ( params [ :id ] , order_id : params [ :order_id ] )
2129 end
2230
2331 private
@@ -45,4 +53,19 @@ def remove_item_from_refund_cmd
4553 def remove_item_from_refund
4654 command_bus . ( remove_item_from_refund_cmd )
4755 end
56+
57+ def build_refund_items_list ( order_lines , refund_items )
58+ order_lines . map { |order_line | build_refund_item ( order_line , refund_items ) }
59+ end
60+
61+ def build_refund_item ( order_line , refund_items )
62+ refund_item = refund_items . find { |item | item . product_uid == order_line . product_id } || initialize_refund_item ( order_line )
63+
64+ refund_item . order_line = order_line
65+ refund_item
66+ end
67+
68+ def initialize_refund_item ( order_line )
69+ Refunds ::RefundItem . new ( product_uid : order_line . product_id , quantity : 0 , price : order_line . price )
70+ end
4871end
0 commit comments