@@ -66,16 +66,25 @@ def get_y_n ( input_prompt ):
6666# calcs
6767num_kids = num_in_party - num_adults - num_conc
6868num_free_adults = int ( num_kids / num_kids_for_free_adult )
69+ num_free_conc = 0
6970
7071# can't give away more seats than you've got!
71- if num_free_adults > num_adults : num_free_adults = num_adults
72+ # roll down free adults to concessions if there is a surplus
73+ if num_free_adults > num_adults :
74+ num_spare_adults = num_free_adults - num_adults
75+ num_free_adults = num_adults
76+ num_free_conc = num_spare_adults
77+
78+ if num_free_conc > num_conc :
79+ num_free_conc = num_conc
7280
7381# calc how many are paying
7482num_paying_adults = num_adults - num_free_adults
83+ num_paying_conc = num_conc - num_free_conc
7584
7685ticket_values = {"Adult" : 0 , "Conc" : 0 , "Child" : 0 }
7786ticket_values ["Adult" ] = num_paying_adults * costs ["Adult" ]
78- ticket_values ["Conc" ] = num_conc * costs ["Conc" ]
87+ ticket_values ["Conc" ] = num_paying_conc * costs ["Conc" ]
7988ticket_values ["Child" ] = num_kids * costs ["Child" ]
8089
8190ttl_bill_pre_discount = ( ticket_values ["Adult" ] ) + \
@@ -108,21 +117,34 @@ def get_y_n ( input_prompt ):
108117print ()
109118
110119print ( f'{ num_in_party } Tickets for Snakes! The Musical' )
111- print ( f'{ "Order Ref: " + bill_ref :>35 } ' )
112- print ( '-' * 35 )
120+ print ( f'{ "Order Ref: " + bill_ref :>36 } ' )
121+ print ( '-' * 36 )
113122if is_collection == "Y" :
114- print ( "*" * 9 , " COLLECTION " , "*" * 9 )
115- print ( '-' * 35 )
116- print ( f'{ num_adults :3} { "Adult" :12} ' )
117- if num_paying_adults > 0 : print ( ' ' * 12 , f'{ num_paying_adults :3} @ £{ costs ["Adult" ]:5.2f} = £{ ticket_values ["Adult" ]:7.2f} ' )
118- if num_free_adults > 0 : print ( ' ' * 12 , f'{ num_free_adults :3} @ £{ 0 :5.2f} = £{ 0 :7.2f} ' )
119- if num_conc > 0 : print ( f'{ num_conc :3} { "Concession" :12} @ £{ costs ["Conc" ]:5.2f} = £{ ticket_values ["Conc" ]:7.2f} ' )
120- if num_kids > 0 : print ( f'{ num_kids :3} { "Child" :12} @ £{ costs ["Child" ]:5.2f} = £{ ticket_values ["Child" ]:7.2f} ' )
123+ print ( "*" * 9 , " COLLECTION " , "*" * 9 )
124+ print ( '-' * 36 )
125+
126+ if num_adults > 0 :
127+ print ( f'{ num_adults :3} { "Adult" :12} ' )
128+ if num_paying_adults > 0 : print ( ' ' * 12 , f'{ num_paying_adults :3} @ £{ costs ["Adult" ]:5.2f} = £{ ticket_values ["Adult" ]:7.2f} ' )
129+ if num_free_adults > 0 : print ( ' ' * 12 , f'{ num_free_adults :3} @ £{ 0 :5.2f} = £{ 0 :7.2f} ' )
130+ print ( "" )
131+
132+ if num_conc > 0 :
133+ print ( f'{ num_conc :3} { "Concessions" :12} ' )
134+ if num_paying_conc > 0 : print ( ' ' * 12 , f'{ num_paying_conc :3} @ £{ costs ["Conc" ]:5.2f} = £{ ticket_values ["Conc" ]:7.2f} ' )
135+ if num_free_conc > 0 : print ( ' ' * 12 , f'{ num_free_conc :3} @ £{ 0 :5.2f} = £{ 0 :7.2f} ' )
136+ print ( "" )
137+
138+ if num_kids > 0 :
139+ print ( f'{ num_kids :3} { "Child" :12} @ £{ costs ["Child" ]:5.2f} = £{ ticket_values ["Child" ]:7.2f} ' )
140+ if num_kids > 9 : print ( f" (Includes { num_free_adults + num_free_conc } free chaperones)" )
141+ print ( "" )
142+
121143print ( ' ' * 27 , '=' * 8 )
122144
123145if discount_percentage > 0 :
124146 print ( ' ' * 9 , f'{ "Sub Total" :17} £{ ttl_bill_pre_discount :7.2f} ' )
125- print ( ' ' * 9 , f'{ "Discount" :17} £{ bill_discount :7.2f} ' )
147+ print ( ' ' * 9 , f'{ "Discount (" + str ( discount [ "discount" ]) + "%) " :17} £{ bill_discount :7.2f} ' )
126148 print ( ' ' * 27 , '-' * 8 )
127149
128150if p_n_p_cost > 0 :
0 commit comments