RT# 82087 - updated error messages
[freeside.git] / httemplate / view / cust_main / payment_history / payment.html
1 <% $payment. ' '.  $info. $desc.
2    $view. $email. $change_pkg. $apply. $refund. $void. $delete. $unapply
3 %>
4 <%init>
5
6 my( $cust_pay, %opt ) = @_;
7
8 my $date_format = $opt{'date_format'} || '%m/%d/%Y';
9
10 my @cust_bill_pay = $cust_pay->cust_bill_pay;
11 my @cust_pay_refund = $cust_pay->cust_pay_refund;
12 my $unapplied = $cust_pay->unapplied;
13
14 my ($payby,$payinfo) = translate_payinfo($cust_pay);
15 my $target = "$payby$payinfo";
16 $payby = translate_payby($payby,$payinfo);
17 my $info = $payby ? "($payby$payinfo)" : '';
18
19 my $desc = '';
20 if ( $opt{'pkg-balances'} && $cust_pay->pkgnum ) {
21   my $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $cust_pay->pkgnum } );
22   $desc .= ' for '. $cust_pkg->pkg_label_long;
23 }
24
25 my %cust_bill_pay_width = ('width' => 392);
26 my %cust_bill_pay_height = ();
27 if ( $opt{'cust_bill_pay_pkg-manual'} ) {
28   %cust_bill_pay_width = ('width' => 592);
29   %cust_bill_pay_height = ('height' => 436);
30 }
31
32 my $apply = '';
33
34 my $italicize_otaker = 0;
35 my $otaker = $cust_pay->otaker;
36 if ( $otaker eq 'fs_daily' ) {
37     $otaker = 'auto billing';
38     $italicize_otaker = 1;
39 }
40 if ( $otaker eq 'fs_selfservice' ) {
41     $otaker = 'customer self-service';
42     $italicize_otaker = 1;
43 }
44
45 my $payment = emt("Payment by [_1]",$otaker);
46 $payment =~ s/$otaker/<i>$otaker<\/i>/ if $italicize_otaker;
47
48 if (    scalar(@cust_bill_pay)   == 0
49      && scalar(@cust_pay_refund) == 0 ) {
50   #completely unapplied
51   $payment = emt("Unapplied Payment by [_1]",$otaker);
52   $payment =~ s/$otaker/<i>$otaker<\/i>/ if $italicize_otaker;
53   $payment = '<B><FONT COLOR="#FF0000">'.$payment.'</FONT></B>';
54 } elsif (    scalar(@cust_bill_pay)   == 1
55           && scalar(@cust_pay_refund) == 0
56           && $unapplied == 0     ) {
57   #applied to one invoice, the usual situation
58   $desc .= ' '. $cust_bill_pay[0]->applied_to_invoice;
59 } elsif (    scalar(@cust_bill_pay)   == 0
60           && scalar(@cust_pay_refund) == 1
61           && $unapplied == 0     ) {
62   #applied to one refund
63   $desc .= emt(" refunded on [_1]", time2str($date_format, $cust_pay_refund[0]->_date) );
64 } else {
65   #complicated
66   $desc .= '<BR>';
67   foreach my $app ( sort { $a->_date <=> $b->_date }
68                          ( @cust_bill_pay, @cust_pay_refund ) ) {
69     if ( $app->isa('FS::cust_bill_pay') ) {
70       $desc .= '&nbsp;&nbsp;' . $opt{money_char} . $app->amount . ' ' .
71                 $app->applied_to_invoice . '<BR>';
72     } elsif ( $app->isa('FS::cust_pay_refund') ) {
73       $desc .= '&nbsp;&nbsp;' .
74                emt("[_1][_2] refunded on [_3]", $opt{money_char}, $app->amount,
75                         time2str($date_format, $app->_date) ) . '<BR>';
76     } else {
77       die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund";
78     }
79   }
80   if ( $unapplied > 0 ) {
81     $desc .= '&nbsp;&nbsp;'.
82              '<B><FONT COLOR="#FF0000">'.
83              emt("[_1][_2] unapplied", $opt{money_char}, $unapplied).
84              '</FONT></B>';
85     $desc .= '<BR>';
86   }
87 }
88
89 if ($unapplied > 0) {
90   if ( $opt{'Apply payment'} ) {
91     if ( $opt{total_owed} > 0 ) {
92       $apply = ' ('.
93                include( '/elements/popup_link.html',
94                           'label'       => emt('apply'),
95                           'action'      => "${p}edit/cust_bill_pay.cgi?".
96                                            $cust_pay->paynum,
97                           'actionlabel' => emt('Apply payment'),
98                           %cust_bill_pay_width,
99                           %cust_bill_pay_height,
100                       ).
101                 ')';
102     }
103     if ( $opt{total_unapplied_refunds} > 0 ) {
104       $apply.= ' ('.
105                include( '/elements/popup_link.html',
106                           'label'       => emt('apply refund'),
107                           'style'       => 'white-space: nowrap',
108                           'action'      => "${p}edit/cust_pay_refund.cgi?".
109                                            $cust_pay->paynum,
110                           'actionlabel' => emt('Apply payment to refund'),
111                           'width'       => 392,
112                       ).
113                ')';
114     }
115     $apply .= ' (auto&#8209;apply:&nbsp;'
116            .  ($cust_pay->no_auto_apply ? 'no' : 'yes')
117            .  '&nbsp;|&nbsp;'
118            .  include( '/elements/popup_link.html',
119                           'label'       => emt($cust_pay->no_auto_apply ? 'yes' : 'no'),
120                           'action'      => "${p}edit/process/cust_pay-no_auto_apply.cgi?paynum="
121                                            . $cust_pay->paynum
122                                            . '&no_auto_apply='
123                                            . ($cust_pay->no_auto_apply ? '' : 'Y'),
124                           'actionlabel' => emt('Toggle Auto-Apply'),
125                           'width'       => 392,
126                           'height'      => 200,
127                       )
128            . ')';
129   } else { # end if $opt('Apply payment')
130     $apply .= ' (no auto-apply)' if $cust_pay->no_auto_apply;
131   }
132 } # end if $unapplied > 0
133
134 my $view =
135   ' ('. include('/elements/popup_link.html',
136                   'label'     => emt('view receipt'),
137                   'action'    => "${p}view/cust_pay.html?link=popup;paynum=".
138                                   $cust_pay->paynum,
139                   'actionlabel' => emt('Payment Receipt'),
140                ).
141    ')';
142
143 my $email = $opt{'has_email_address'} ? 
144   q! (<A HREF="javascript:void(0)" ONCLICK="areyousure_popup('Send email receipt for payment to customer?','!.
145   "${p}view/cust_pay.html?link=email;paynum=".
146   $cust_pay->paynum.
147   q!','Email Payment Receipt')" TITLE="Send email receipt">email&nbsp;receipt</A>)!
148   : '';
149
150 my $change_pkg = '';
151 if ( $apply && $opt{'pkg-balances'} && $cust_pay->pkgnum ) {
152   $change_pkg =
153   ' ('. include('/elements/popup_link.html',
154                   'label'       => emt('change package'),
155                   'action'      => "${p}edit/cust_pay-pkgnum.html?paynum=".
156                                     $cust_pay->paynum,
157                   'actionlabel' => emt('Change payment package'),
158                   'width'       => 763,
159                ).
160    ')';
161 }
162
163 my $refund = '';
164 my $refund_days = $opt{'card_refund-days'} || 120;
165 my @refund_right = grep { $opt{$_} } $FS::CurrentUser::CurrentUser->refund_rights($cust_pay->payby);
166 if (    $cust_pay->closed !~ /^Y/i
167      && $cust_pay->payby =~ /^(CARD|CHEK|BILL)$/
168      && time-$cust_pay->_date < $refund_days*86400
169      && $cust_pay->unrefunded > 0
170      && scalar(@refund_right)
171 ) {
172   my $refundtitle = ($cust_pay->payby =~ /^(CARD|CHEK)$/)
173             ? emt('Send a refund for this payment to the payment gateway')
174             : emt('Record a refund for this payment');
175   $refund = qq! (<A HREF="${p}edit/cust_refund.cgi?payby=$1;!.
176             qq!paynum=!. $cust_pay->paynum. '"'.
177             qq! TITLE="! . $refundtitle
178             . '">' . emt('refund') . '</A>)';
179 }
180
181 my $void = '';
182 my $voidmsg = $cust_pay->payby =~ /^(CARD|CHEK)$/
183               ? ' (' . emt('do not send anything to the payment gateway').')'
184               : '';
185 $void = areyousure_link("${p}misc/void-cust_pay.cgi?".$cust_pay->paynum,
186                         emt('Are you sure you want to void this payment?'),
187                         emt('Void this payment from the database') . $voidmsg,
188                         emt('void')
189                        )
190   if $cust_pay->closed !~ /^Y/i
191   && (    ( $cust_pay->payby eq 'CARD'          && $opt{'Credit card void'} )
192        || ( $cust_pay->payby eq 'CHEK'          && $opt{'Echeck void'}      )
193        || ( $cust_pay->payby !~ /^(CARD|CHEK)$/ && $opt{'Void payments'}    )
194      );
195
196 my $delete = '';
197 $delete = areyousure_link("${p}misc/delete-cust_pay.cgi?".$cust_pay->paynum,
198                             emt('Are you sure you want to delete this payment?'),
199                             emt('Delete this payment from the database completely - not recommended'),
200                             emt('delete')
201                          )
202   if $cust_pay->closed !~ /^Y/i
203   && $opt{'deletepayments'}
204   && $opt{'Delete payment'};
205
206 my $unapply = '';
207 if ($opt{'Unapply payment'} && !$cust_pay->closed) {
208   $unapply = areyousure_link("${p}misc/unapply-cust_pay.cgi?".$cust_pay->paynum,
209                               emt('Are you sure you want to unapply this payment from invoices?'),
210                               emt('Keep this payment, but dissociate it from the invoices it is currently applied against'),
211                               emt('unapply')
212                             )
213     if @cust_bill_pay;
214   $unapply .= areyousure_link("${p}misc/unapply-cust_pay_refund.cgi?".$cust_pay->paynum,
215                                emt('Are you sure you want to unapply this payment from refunds?'),
216                                emt('Keep this payment, but dissociate it from the refunds it is currently applied to'),
217                                emt('unapply refunds')
218                              )
219     if $cust_pay->refund_to_unapply;
220 }
221
222 </%init>