more room for package change popup
[freeside.git] / httemplate / view / cust_main / packages / package.html
index 0a5305e..d643133 100644 (file)
@@ -7,6 +7,10 @@
              ? &{ $opt{before_pkg_callback} }( $cust_pkg )
              : ''
         %>
+
+% ###
+% # Package
+% ###
         <A NAME="cust_pkg<% $cust_pkg->pkgnum %>"
            ID  ="cust_pkg<% $cust_pkg->pkgnum %>"
         ><% $opt{show_pkgnum} ? $cust_pkg->pkgnum.': ' : '' %><B><% $part_pkg->pkg |h %></B></A>
       </TD>
     </TR>
 
-
-    <TR>
-      <TD COLSPAN=2>
-        <FONT SIZE=-1>
-
-%         if ( $part_pkg->freq eq '0' and !$opt{no_links} ) {
-%           # One-time charge.  Nothing you can do with this, unless:
-%           if ( $curuser->access_right('Modify one-time charge') ) {
-                (&nbsp;<%onetime_change_link($cust_pkg)%>&nbsp;)
-%           }
-%           # also, you can discount it
-%           if ( $can_discount_pkg ) {
-              (&nbsp;<%pkg_discount_link($cust_pkg)%>&nbsp;)
-%           }
-          <BR>
-%
-%         } elsif ( !$cust_pkg->get('cancel') and !$opt{no_links} ) {
-%
-%           if ( $change_from ) {
-%             # This is the target package for a future change.
-%             # Nothing you can do with it besides modify/cancel the 
-%             # future change, and that's on the current package.
-%           } elsif ( $supplemental ) {
-%             # Supplemental packages can't be changed independently.
-%             # Show only "Add comments" and "Add invoice details".
-%           } else {
-%             # the usual case: links to change package definition,
-%             # discount, and customization
-%             my $br = 0;
-%             if ( $curuser->access_right('Change customer package') ) {
-%               $br=1;
-                (&nbsp;<%pkg_change_link($cust_pkg)%>&nbsp;)
-%             } 
-%
-%             if ( $can_discount_pkg ) {
-%               $br=1;
-                (&nbsp;<%pkg_discount_link($cust_pkg)%>&nbsp;)
-%             }
-%
-%             if ( $curuser->access_right('Customize customer package') ) {
-%               $br=1;
-                (&nbsp;<%pkg_customize_link($cust_pkg,$part_pkg)%>&nbsp;)
-%             } 
-%
-              <% $br ? '<BR>' : '' %>
-%           } 
-
-%           if (    (    $curuser->access_right('Billing event reports')
-%                     || $curuser->access_right('View customer billing events')
-%                   )
-%                && $cust_pkg->exists_cust_event
-%              ) {
-              (&nbsp;<%pkg_event_link($cust_pkg)%>&nbsp;)
-%           }
-%         } # a canceled recurring package, or else no_links is in effect
-
-        </FONT>
-      </TD>
-    </TR>
-
-
+% ###
+% # Quantity
+% ###
+% if ( $cust_pkg->quantity > 1 ) {
     <TR>
       <TD COLSPAN=2>
-
-%       my $change_quan_label = 'Change quantity';
-%       if ( $cust_pkg->quantity > 1 ) {
-%         $change_quan_label = 'change';
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<% mt('Quantity:') |h %> 
           <B><% $cust_pkg->quantity %></B>
-%       }
 
 %       if ( $curuser->access_right('Change customer package')
 %              && ! $cust_pkg->get('cancel')
+%              && ! $change_from
 %              && ! $supplemental
 %              && $part_pkg->freq ne '0'
 %              && ! $opt{no_links}
 %          )
 %       {
           <FONT SIZE="-1">
-            (&nbsp;<% pkg_change_quantity_link($cust_pkg, $change_quan_label) %>&nbsp;)
+            (&nbsp;<% pkg_change_quantity_link($cust_pkg, 'change') %>&nbsp;)
           </FONT>
 %       }
-
       </TD>
     </TR>
+% }
 
-
+% ###
+% # Sales person
+% ###
+% if ( $cust_pkg->salesnum ) {
     <TR>
       <TD COLSPAN=2>
-
-%       my $change_sales_label = 'Change sales person';
-%       if ( $cust_pkg->salesnum ) {
-%         $change_sales_label = 'change';
           &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<% mt('Sales Person:') |h %> 
           <B><% $cust_pkg->salesperson |h %></B>
-%       }
-
 %       if ( $curuser->access_right('Change customer package')
 %              && ! $cust_pkg->get('cancel')
+%              && ! $change_from
 %              && ! $supplemental
 %              #&& $part_pkg->freq ne '0'
 %              && ! $opt{no_links}
 %          )
 %       {
         <FONT SIZE="-1">
-          (&nbsp;<% pkg_change_salesnum_link($cust_pkg, $change_sales_label) %>&nbsp;)
+          (&nbsp;<% pkg_change_salesnum_link($cust_pkg, 'change') %>&nbsp;)
         </FONT>
 %     }
-
       </TD>
     </TR>
+% }
 
 
+% ###
+% # Invoice details & comments
+% ###
 %   my $editi = $curuser->access_right('Edit customer package invoice details');
 %   my $editc = $curuser->access_right('Edit customer package comments');
 %   my @cust_pkg_detail = $cust_pkg->cust_pkg_detail;
           </TD>
 %       } else {
           <TD>
-%           if ( $editi && ! $cust_pkg->get('cancel') && ! $opt{no_links} ) {
-              <FONT SIZE="-1">
-                (&nbsp;<% include('/elements/popup_link.html', { 
-                               'action'      => $editlink. 'I',
-                               'label'       => emt('Add invoice details'),
-                               'actionlabel' => emt('Add invoice details'),
-                               'color'       => '#333399',
-                               'width'       => 763,
-                            })
-                  %>&nbsp;)
-              </FONT>
-%           }
           </TD>
 %       }
 
           </TD>
 %       } else {
           <TD>
-%           if ( $editc && ! $opt{no_links} ) {
-              <FONT SIZE="-1">
-                (&nbsp;<& /elements/popup_link.html, { 
-                               'action'      => $editlink. 'C',
-                               'label'       => emt('Add comments'),
-                               'actionlabel' => emt('Add comments'),
-                               'color'       => '#333399',
-                               'width'       => 763,
-                            }
-                  &>&nbsp;)
-              </FONT>
-%           }
           </TD>
 %       }
 
 
 % if ( @cust_pkg_usage ) {
   <TABLE CLASS="usage inv">
-    <TR><TH COLSPAN=4><% mt('Included usage') %></TH></TR>
+    <TR><TH COLSPAN=4><% emt('Included usage') %></TH></TR>
 %   foreach my $usage (@cust_pkg_usage) {
 %     my $part = $usage->part_pkg_usage;
 %     my $ratio = 255 * ($usage->minutes / $part->minutes);
   </TABLE>
 % }
 
+
+% ###
+% # Package actions dropdown
+% ###
+% unless ( $opt{no_links} ) {
+
+  <TABLE CLASS="inv package"> 
+    <TR>
+      <TD COLSPAN=2>
+
+%       my $plink = "pkgnum=$pkgnum";
+%       my $reg_recur_cond =  sub { $part_pkg->freq ne '0'
+%                                       && ! $change_from
+%                                       && ! $supplemental
+%                                       && ! $cust_pkg->get('cancel')
+%                                 };
+%       my $change_cond = sub { $part_pkg->freq ne '0'
+%                                 && ! $change_from
+%                                 && ! $supplemental
+%                                 && ! $cust_pkg->get('cancel')
+%                                 && $cust_pkg->change_to_pkgnum,
+%                             };
+
+        <& /elements/dropdown-menu.html,
+             id      => 'cust_pkg'. $cust_pkg->pkgnum. '_menu',
+             bgcolor => $opt{row} % 2 ? '#ffffff' : '#eeeeee',
+             menu    => [
+               [ 
+
+                 #TODO: order/group these better
+
+                 { label => 'Package actions',
+                   content =>
+                    '<FONT STYLE="text-decoration:underline;font-weight:bold">'.
+                    'Package actions</FONT>'.
+                    ' <IMG SRC="'.$p.'images/arrow.down.black.png">',
+                 },
+
+                 { label       => 'Modify one-time charge',
+                   acl         => 'Modify one-time charge',
+                   condition   => sub { $part_pkg->freq eq '0' },
+                   url         => "edit/quick-charge.html?change_$plink",
+                 },
+
+                 { label       => 'Change package',
+                   acl         => 'Change customer package',
+                   condition   => $reg_recur_cond,
+                   popup       => "misc/change_pkg.cgi?$plink".
+                                    ';locationnum='. $cust_pkg->locationnum,
+                   actionlabel => emt('Change package'),
+                   #width       => 768,
+                   width       => 960,
+                   height      => 640,
+                 },
+
+                 { label       => 'Discount package',
+                   condition   => sub {     ! $change_from
+                                         && ! $supplemental
+                                         && ! $cust_pkg->get('cancel')
+                                         && $can_discount_pkg
+                                      },
+                   popup       => "edit/cust_pkg_discount.html?$plink",
+                   actionlabel => emt('Discount package'),
+                   width       => 616,
+                 },
+
+                 { label       => 'Customize package',
+                   acl         => 'Customize customer package',
+                   condition   => $reg_recur_cond,
+                   url         => "edit/part_pkg.cgi?$plink".
+                                    ';clone='. $part_pkg->pkgpart,
+                 },
+
+                 { label       => '-',
+                   content     => '-',
+                 },
+
+                 { label       => 'View package events',
+                   acl         => [ 'Billing event reports',
+                                    'View customer billing events', ],
+                   condition   => sub { $cust_pkg->exists_cust_event },
+                   url         => "search/cust_event.html?$plink",
+                 },
+
+                 { label       => '-',
+                   condition   => sub { $cust_pkg->exists_cust_event },
+                   content     => '-',
+                 },
+
+                 { label       => 'Change quantity',
+                   acl         => 'Change customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                        && ! $change_from
+                                        && ! $supplemental
+                                        && ! $cust_pkg->get('cancel')
+                                        && $opt{'invoice-unitprice'}
+                                  },
+                   popup       => "edit/cust_pkg_quantity.html?$plink",
+
+                   actionlabel => emt('Change quantity'),
+                   width       => 390,
+                   height      => 220,
+                 },
+
+                 { label       => 'Change sales person',
+                   acl         => 'Change customer package',
+                   condition   => sub { ! $change_from
+                                        && ! $supplemental
+                                        && ! $cust_pkg->get('cancel')
+                                  },
+                   popup       => "edit/cust_pkg_salesnum.html?$plink",
+                   actionlabel => emt('Change sales persion'),
+                   width       => 390,
+                   height      => 220,
+                 },
+
+                 { label       => '-',
+                   content     => '-',
+                 },
+
+                 { label       => (@invoice_detail ? 'Edit' : 'Add').
+                                    ' invoice details',
+                   acl         => 'Edit customer package invoice details',
+                   condition   => sub { ! $cust_pkg->get('cancel') },
+                   popup       => "edit/cust_pkg_detail.html?$plink".
+                                    ';detailtype=I',
+                   actionlabel => emt( (@invoice_detail ? 'Edit' : 'Add').
+                                       ' invoice details'
+                                     ),
+                   width       => 768,
+                 },
+
+                 { label        => (@comments ? 'Edit' : 'Add'). ' comments',
+                   acl         => 'Edit customer package comments',
+                   popup       => "edit/cust_pkg_detail.html?$plink".
+                                    ';detailtype=C',
+                   actionlabel => emt( (@comments ? 'Edit' : 'Add').
+                                       ' comments'
+                                     ),
+                   width       => 768,
+                 },
+
+                 { label       => '-',
+                   #condition   => sub { $part_pkg->freq ne '0' },
+                   content     => '-',
+                 },
+
+                 { label       => 'Set start date',
+                   acl         => 'Change package start date',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->get('setup')
+                                      },
+                  popup       => "misc/change_pkg_date.html?$plink".
+                                   ';field=start_date',
+                  actionlabel => emt('Set start of billing for'),
+                  width       => 510,
+                  height      => 310,
+                 },
+
+                 { label       => 'Set contract end',
+                   acl         => 'Change package contract end date',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->change_to_pkgnum
+                                      },
+                   popup       => "misc/change_pkg_date.html?$plink".
+                                   ';field=contract_end',
+                   actionlabel => emt('Set contract end for'),
+                   width       => 510,
+                   height      => 310,
+                 },
+
+                 { label       => '-',
+                   condition   => sub { $part_pkg->freq ne '0' },
+                   content     => '-',
+                 },
+
+                 { label       => 'Change now',
+                   acl         => 'Change customer package',
+                   condition   => $change_cond,
+                   url         => "misc/change_pkg_now.cgi?$pkgnum",
+                 },
+
+                 { label       => 'Reschedule',
+                   acl         => 'Change customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && $cust_pkg->change_to_pkgnum,
+                                      },
+                   popup       => "misc/change_pkg.html?$plink",
+                   actionlabel => emt('Edit scheduled change for'),
+                   url         => "misc/change_pkg_now.cgi?$pkgnum",
+                   width       => 960,
+                   height      => 490,
+    
+                 },
+
+                 { label       => 'Abort change',
+                   acl         => 'Change customer package',
+                   condition   => $change_cond,
+                   url         => "misc/do_not_change_pkg.cgi?$pkgnum",
+                 },
+
+                 { label       => '-',
+                   acl         => 'Change customer package',
+                   condition   => $change_cond,
+                   content     => '-',
+                 },
+
+                 { label       => 'Suspend now',
+                   acl         => 'Suspend customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->get('susp')
+                                      },
+                   popup       => "misc/cancel_pkg.html?method=suspend;$plink",
+                   actionlabel => emt('Suspend now'),
+                   color       => '#FF9900',
+                   width       => 768,
+                   height      => 420,
+                 },
+
+                 { label       => 'Suspend later',
+                   acl         => 'Suspend customer package later',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->get('susp')
+                                      },
+                   popup       => "misc/cancel_pkg.html?method=adjourn;$plink",
+                   actionlabel => emt('Suspend later'),
+                   color       => '#CC6600',
+                   width       => 768,
+                   height      => 445,
+                 },
+
+                 { label       => $cust_pkg->dundate
+                                    ? 'Edit suspension delay'
+                                    : 'Delay suspend',
+
+                   acl         => 'Delay suspension events',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->get('susp')
+                                      },
+                   popup       => "misc/delay_susp_pkg.html?$plink",
+                   actionlabel => emt('Delay suspend for'),
+                   width       => 768,
+                 },
+
+                 { label       => 'Start billing',
+                   acl         => 'Unsuspend customer package',
+                   condition   => sub {    ! $change_from
+                                        && ! $supplemental
+                                        && ! $cust_pkg->get('cancel')
+                                        && $cust_pkg->get('susp')
+                                        && $cust_pkg->order_date == $cust_pkg->get('susp')
+                                      },
+                   popup        => "misc/unhold_pkg.html?$plink",
+                   actionlabel  => emt('Start billing'),
+                   color       => '#00CC00',
+                   width       => 510,
+                   height      => 310,
+                 },
+
+                 { label       => 'Unsuspend now',
+                   acl         => 'Unsuspend customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && $cust_pkg->get('susp')
+                                          && $cust_pkg->order_date != $cust_pkg->get('susp')
+                                      },
+                   'url'       => "misc/unsusp_pkg.cgi?$pkgnum",
+                 },
+
+                 { label       => 'Unsuspend later',
+                   acl         => 'Unsuspend customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && $cust_pkg->get('susp')
+                                          && $cust_pkg->order_date != $cust_pkg->get('susp')
+                                      },
+                   popup       => "misc/cancel_pkg.html?method=resume;$plink",
+                   actionlabel => emt('Unsuspend later'),
+                   color       => '#00CC00',
+                   width       => 768,
+                 },
+
+                 { label       => '-',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->get('cancel')
+                                          && ! $cust_pkg->get('susp')
+                                      },
+                   content     => '-',
+                 },
+
+                 { label       => 'Cancel now',
+                   acl         => 'Cancel customer package immediately',
+                   condition   => sub {
+                     ( $part_pkg->freq ne '0' || ! $cust_pkg->get('setup') )
+                       && ! $change_from
+                       && ! $supplemental
+                       && ! $cust_pkg->change_to_pkgnum
+                       && ! $cust_pkg->get('cancel')
+                   },
+                   popup       => "misc/cancel_pkg.html?method=cancel;$plink",
+                   actionlabel => emt('Cancel now'),
+                   color       => '#FF0000',
+                   width       => 768,
+                 },
+
+                 { label       => 'Cancel later',
+                   acl         => 'Cancel customer package later',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $change_from
+                                          && ! $supplemental
+                                          && ! $cust_pkg->change_to_pkgnum
+                                          && ! $cust_pkg->get('cancel')
+                                      },
+                   popup       => "misc/cancel_pkg.html?method=expire;$plink",
+                   actionlabel => emt('Cancel later'),
+                   color       => '#CC0000',
+                   width       => 768,
+                 },
+
+                 { label       => 'Un-cancel',
+                   acl         => 'Un-cancel customer package',
+                   condition   => sub { $part_pkg->freq ne '0'
+                                          && ! $supplemental
+                                          && ! $cust_pkg->change_custnum
+                                          && $cust_pkg->get('cancel')
+                                      },
+                   popup       => "misc/cancel_pkg.html?method=uncancel;$plink",
+                   actionlabel => emt('Un-cancel'),
+                   width       => 960,
+                   height      => 740,
+
+                 },
+
+                 { label       => '-',
+                   condition   => sub {
+                     ( $part_pkg->freq ne '0' || ! $cust_pkg->get('setup') )
+                       && ! $change_from
+                       && ! $cust_pkg->get('cancel')
+                   },
+                   content     => '-',
+                 },
+
+                 { label       => 'Add contact',
+                   #acl         => 'Add package contact',#or something like that
+                   condition   => sub { ! $cust_pkg->get('cancel') },
+                   popup       => "misc/change_pkg_contact.html?$plink",
+                   actionlabel => emt('Add contact'),
+                   width       => 616,
+                   height      => 200,
+                 },
+
+                 { label       => 'Change location',
+                   acl         => 'Change customer package',
+                   condition   => sub { ! $change_from },
+                   popup       => "misc/change_pkg.cgi?locationnum=-1;$plink;".
+                      "address1=;address2=;city=;county=;state=$statedefault;".
+                      "zip=;country=$countrydefault",
+                   actionlabel => emt('Change location'),
+                   width       => 960,
+                   height      => 640,
+                 },
+
+                 { label       => 'Edit location',
+                   acl         => 'Change customer package',
+                   condition   => sub { ! $change_from && $cust_pkg->locationnum != $cust_pkg->cust_main->ship_locationnum  },
+                   popup       => 'edit/cust_location.cgi?locationnum='.
+                                    $cust_pkg->locationnum,
+                   actionlabel => emt('Edit location'),
+                   width       => 700,
+                   height      => 355,
+                 },
+
+               ],
+             ],
+        &>
+
+      </TD>
+    </TR>
+  </TABLE>
+
+% }
+
   <% join('', map '</DIV>', @marker ) %>
+
 </TD>
 
 <%init>
@@ -334,26 +661,6 @@ sub pkg_link {
   qq!<a href="$p$action.cgi?!. $cust_pkg->pkgnum. qq!">$label</a>!;
 }
 
-sub pkg_change_link {
-  my $cust_pkg = shift;
-  my $locationnum = $cust_pkg->locationnum;
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p. "misc/change_pkg.cgi?locationnum=$locationnum",
-    'label'       => emt('Change package'),
-    'actionlabel' => emt('Change'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 960,
-    'height'      => 538,
-  );
-}
-
-sub onetime_change_link {
-  my $cust_pkg = shift;
-  my $pkgnum = $cust_pkg->pkgnum;
-  '<A HREF="' . $fsurl . "edit/quick-charge.html?change_pkgnum=$pkgnum" .
-  '">' . emt('Modify one-time charge') . '</A>'
-}
-
 sub pkg_change_location_link {
   my $cust_pkg = shift;
   my $pkgpart = $cust_pkg->pkgpart;
@@ -393,34 +700,6 @@ sub pkg_change_salesnum_link {
   );
 }
 
-sub pkg_discount_link {
-  my $cust_pkg = shift or return '';
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p.'edit/cust_pkg_discount.html',
-    'label'       => emt('Discount'),
-    'actionlabel' => emt('Discount'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 616,
-  );
-}
-
-sub pkg_customize_link {
-  my $cust_pkg = shift or return '';
-  my $part_pkg = shift;
-  my $custnum = $cust_pkg->custnum;
-  qq!<A HREF="${p}edit/part_pkg.cgi?!.
-    "clone=". $part_pkg->pkgpart. ';'.
-    "pkgnum=". $cust_pkg->pkgnum.
-    qq!">!.emt('Customize').'</A>';
-}
-
-sub pkg_event_link {
-  my($cust_pkg) = @_;
-  qq!<a href="${p}search/cust_event.html?pkgnum=!. $cust_pkg->pkgnum. qq!">!.
-  emt('View package events').
-  '</a>';
-}
-
 # figure out if this user will be able to edit either the setup or recurring
 # discounts for this package
 my $can_discount_pkg = 0;