line  
 stmt  
 bran  
 cond  
 sub  
 pod  
 time  
 code  
 
1 
 
 
 
 
 
 
 
 
 
 
 
 
 
 # Interchange6::Cart::Cost - Interchange6 cart cost class  
 
2 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
3 
 
 
 
 
 
 
 
 
 
 
 
 
 
 package Interchange6::Cart::Cost;  
 
4 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
5 
 
5
 
 
 
 
 
  
5
   
 
 
 
48909
 
 use strict;  
 
  
 
5
 
 
 
 
 
 
 
 
 
12
 
    
 
  
 
5
 
 
 
 
 
 
 
 
 
140
 
    
 
6 
 
5
 
 
 
 
 
  
5
   
 
 
 
1562
 
 use Moo;  
 
  
 
5
 
 
 
 
 
 
 
 
 
30196
 
    
 
  
 
5
 
 
 
 
 
 
 
 
 
35
 
    
 
7 
 
5
 
 
 
 
 
  
5
   
 
 
 
5883
 
 use Types::Standard qw/Bool Defined Int Num/;  
 
  
 
5
 
 
 
 
 
 
 
 
 
139120
 
    
 
  
 
5
 
 
 
 
 
 
 
 
 
59
 
    
 
8 
 
5
 
 
 
 
 
  
5
   
 
 
 
7286
 
 use Types::Common::String qw/NonEmptyStr/;  
 
  
 
5
 
 
 
 
 
 
 
 
 
83283
 
    
 
  
 
5
 
 
 
 
 
 
 
 
 
57
 
    
 
9 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
10 
 
5
 
 
 
 
 
  
5
   
 
 
 
3961
 
 use namespace::clean;  
 
  
 
5
 
 
 
 
 
 
 
 
 
23699
 
    
 
  
 
5
 
 
 
 
 
 
 
 
 
34
 
    
 
11 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
12 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head1 NAME   
 
13 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
14 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Interchange6::Cart::Cost - Cart cost class for Interchange6 Shop Machine  
 
15 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
16 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head1 DESCRIPTION  
 
17 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
18 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Cart cost class for L.   
 
19 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
20 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head1 ATTRIBUTES  
 
21 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
22 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 id  
 
23 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
24 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Cart id can be used for subclasses, e.g. primary key value for cart or product costs in the database.  
 
25 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
26 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
27 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
28 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has id => (  
 
29 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is => 'ro',  
 
30 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa => Int,  
 
31 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
32 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
33 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 name  
 
34 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
35 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Unique name is required.  
 
36 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
37 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
38 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
39 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has name => (  
 
40 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is       => 'ro',  
 
41 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa      => NonEmptyStr,  
 
42 
 
 
 
 
 
 
 
 
 
 
 
 
 
     required => 1,  
 
43 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
44 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
45 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 label  
 
46 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
47 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Label for display. Default is same value as label.  
 
48 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
49 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
50 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
51 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has label => (  
 
52 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is  => 'lazy',  
 
53 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa => NonEmptyStr,  
 
54 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
55 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
56 
 
 
 
 
 
 
 
 
 
 
 
 
 
 sub _build_label {  
 
57 
 
1
 
 
 
 
 
  
1
   
 
 
 
27808
 
     my $self = shift;  
 
58 
 
1
 
 
 
 
 
 
 
 
 
28
 
     return $self->name;  
 
59 
 
 
 
 
 
 
 
 
 
 
 
 
 
 };  
 
60 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
61 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 relative  
 
62 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
63 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Boolean defaults to 0. If true then L is relative to L. If false then L is an absolute cost.     
 
64 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
65 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
66 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
67 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has relative => (  
 
68 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is      => 'ro',  
 
69 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa     => Defined & Bool,  
 
70 
 
 
 
 
 
 
 
 
 
 
 
 
 
     default => 0,  
 
71 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
72 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
73 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 inclusive  
 
74 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
75 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Boolean defaults to 0. If true signifies that the cost is already included in the price for example to calculate the tax component for gross prices.  
 
76 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
77 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
78 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
79 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has inclusive => (  
 
80 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is      => 'ro',  
 
81 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa     => Defined & Bool,  
 
82 
 
 
 
 
 
 
 
 
 
 
 
 
 
     default => 0,  
 
83 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
84 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
85 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 compound  
 
86 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
87 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Boolean defaults to 0. If true signifies that any following costs should be applied to the modified price B this cost has been applied. This might be used for such things as discounts which are applied before taxes are applied to the modified price.   
 
88 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
89 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Using L along with L makes no sense and no guarantee is  
 
90 
 
 
 
 
 
 
 
 
 
 
 
 
 
 given as to what the result might be.  
 
91 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
92 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
93 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
94 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has compound => (  
 
95 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is      => 'ro',  
 
96 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa     => Defined & Bool,  
 
97 
 
 
 
 
 
 
 
 
 
 
 
 
 
     default => 0,  
 
98 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
99 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
100 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 amount  
 
101 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
102 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Required amount of the cost. This is the absolute cost unless L is true in which case it is relative to the L. For example for a tax of 8% amount should be set to 0.08   
 
103 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
104 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
105 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
106 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has amount => (  
 
107 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is      => 'ro',  
 
108 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa     =>  Defined & Num,  
 
109 
 
 
 
 
 
 
 
 
 
 
 
 
 
     required => 1,  
 
110 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
111 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
112 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =head2 current_amount  
 
113 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
114 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Calculated current amount of cost. Unless L is true this will be the same as L. If L is true then this is value is recalulated whenever C is called on the object.   
 
115 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
116 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =over  
 
117 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
118 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =item Writer: C   
 
119 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
120 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =back  
 
121 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
122 
 
 
 
 
 
 
 
 
 
 
 
 
 
 =cut  
 
123 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
124 
 
 
 
 
 
 
 
 
 
 
 
 
 
 has current_amount => (  
 
125 
 
 
 
 
 
 
 
 
 
 
 
 
 
     is     => 'ro',  
 
126 
 
 
 
 
 
 
 
 
 
 
 
 
 
     isa    => Num,  
 
127 
 
 
 
 
 
 
 
 
 
 
 
 
 
     coerce => sub { defined $_[0] && sprintf( "%.2f", $_[0] ) },  
 
128 
 
 
 
 
 
 
 
 
 
 
 
 
 
     writer => 'set_current_amount',  
 
129 
 
 
 
 
 
 
 
 
 
 
 
 
 
 );  
 
130 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 
131 
 
 
 
 
 
 
 
 
 
 
 
 
 
 1;