clean up package list UI: put actions in a dropdown
authorIvan Kohler <ivan@freeside.biz>
Fri, 11 Nov 2016 02:06:26 +0000 (18:06 -0800)
committerIvan Kohler <ivan@freeside.biz>
Fri, 11 Nov 2016 02:06:26 +0000 (18:06 -0800)
httemplate/view/cust_main/packages/package.html
httemplate/view/cust_main/packages/status.html

index ce175a2..9fed5b5 100644 (file)
 %                                       && ! $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',
                  #TODO: order/group these better
 
                  { label => 'Package actions',
-                   content => '<FONT STYLE="text-decoration:underline"><B>Package actions</B></FONT> <IMG SRC="'.$p. 'images/arrow.down.black.png">',
+                   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',
                                        ' invoice details'
                                      ),
                    width       => 768,
-                },
+                 },
 
-                { label       => (@comments ? 'Edit' : 'Add'). ' comments',
+                 { label        => (@comments ? 'Edit' : 'Add'). ' comments',
                    acl         => 'Edit customer package comments',
                    popup       => "edit/cust_pkg_detail.html?$plink".
                                     ';detailtype=C',
                                        ' 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   => '-',
-                   content => '-',
+                 { 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 { $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/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'
+                                          && ! $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,
+
+                 },
 
                ],
              ],
index 9951681..fefeeef 100644 (file)
 
 %   } 
 %
-%   if ( $part_pkg->freq && !$supplemental && !$cust_pkg->change_custnum ) { #?
-
-      <TR>
-        <TD COLSPAN=<%$opt{colspan}%>>
-          <FONT SIZE=-1>
-%           if ( $curuser->access_right('Un-cancel customer package') && ! $opt{no_links} ) { 
-              (&nbsp;<% pkg_uncancel_link($cust_pkg) %>&nbsp;)
-%           } 
-          <FONT>
-        </TD>
-      </TR>
-%   }
 %
 % } else { # not canceled
 %
     <% pkg_status_row_expire($cust_pkg, %opt, curuser=>$curuser) %>
     <% pkg_status_row_if( $cust_pkg, emt('Contract ends'), 'contract_end', %opt ) %>
 
-%   # Status changes for suspended packages: can unsuspend, future-unsuspend,
-%   # or future-change. If this package is a future change or is supplemental
-%   # disable them all.
-%   if ( !$supplemental && ! $opt{no_links} && !$change_from ) {
-      <TR>
-        <TD COLSPAN=<%$opt{colspan}%>>
-          <FONT SIZE=-1>
-%           if ( !$cust_pkg->change_to_pkgnum # because on a technical level, change won't propagate,
-%                                             # and there's not really a use case worth making that work
-%                 and $part_pkg->freq # technically possible to have contract_end w/o freq, but nonsensical
-%                 and $curuser->access_right('Change package contract end date')
-%           ) {
-                (&nbsp;<% pkg_change_contract_end_link($cust_pkg) %>&nbsp;)
-                <BR>
-%           }
-%           if ( $cust_pkg->change_to_pkgnum ) {
-%               # then you can modify the package change
-%               if ( $curuser->access_right('Change customer package') ) {
-                (&nbsp;<% pkg_change_now_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_change_later_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_unchange_link($cust_pkg) %>&nbsp;)
-                <BR>
-%               }
-%           }
-%           if ( $curuser->access_right('Unsuspend customer package') ) { 
-%             if ( $cust_pkg->order_date eq $cust_pkg->get('susp') ) { #on hold
-                (&nbsp;<% pkg_unhold_link($cust_pkg) %>&nbsp;)
-%             } else {
-                (&nbsp;<% pkg_unsuspend_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_resume_link($cust_pkg) %>&nbsp;)
-%             }
-%           }
-%           if ( !$cust_pkg->change_to_pkgnum and
-%                $curuser->access_right('Cancel customer package immediately')
-%           ) {
-              (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%           } 
-          </FONT>
-        </TD>
-      </TR>
-%     }
-%
 %   } else { #status: active
 %
 %     if ( $change_from ) { # future change
 
           <% pkg_status_row_if($cust_pkg, emt('Un-cancelled'), 'uncancel', %opt ) %>
 
-%         if ( !$supplemental && ! $opt{no_links} ) {
-          <TR>
-            <TD COLSPAN=<%$opt{colspan}%>>
-              <FONT SIZE=-1>
-%               if ( $curuser->access_right('Cancel customer package immediately') ) { 
-                  (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%               } 
-              </FONT>
-            </TD>
-          </TR>
-%         }
-
 %       } else { # recurring package, not yet billed
 
           <% pkg_status_row_colspan($cust_pkg, emt("Not yet billed ($billed_or_prepaid [_1])", myfreq($part_pkg) ), '', %opt ) %>
       <% pkg_status_row_expire($cust_pkg, %opt, curuser=>$curuser) %>
       <% pkg_status_row_if( $cust_pkg, emt('Contract ends'), 'contract_end', %opt ) %>
 
-%     # Status changes for active recurring packages. If it has a future
-%     # package change scheduled, let that be modified. If it's supplemental,
-%     # then that's the only allowed action. Otherwise allow suspend, future
-%     # suspend, do-not-suspend, and immediate and future cancel.
-%     if ( $part_pkg->freq and ! $opt{no_links} ) { 
-
-        <TR>
-          <TD COLSPAN=<%$opt{colspan}%>>
-            <FONT SIZE=-1>
-
-% #change date links
-%           if ( !$change_from and !$supplemental ) {
-%             my $has_date_links = 0;
-%             if ( !$cust_pkg->get('setup')
-%                   and $curuser->access_right('Change package start date')
-%             ) {
-            (&nbsp;<% pkg_change_start_link($cust_pkg) %>&nbsp;)
-%               $has_date_links = 1;
-%             }
-%             if ( !$cust_pkg->change_to_pkgnum # because on a technical level, change won't propagate,
-%                                               # and there's not really a use case worth making that work
-%                   and $curuser->access_right('Change package contract end date')
-%             ) {
-            (&nbsp;<% pkg_change_contract_end_link($cust_pkg) %>&nbsp;)
-%               $has_date_links = 1;
-%             }
-%             if ($has_date_links) {
-            <BR>
-%             }
-%           }
-
-% # action links
-%           if ( $change_from ) {
-%               # nothing
-%           } elsif ( $cust_pkg->change_to_pkgnum ) {
-%               # then you can modify the package change
-%               if ( $curuser->access_right('Change customer package') ) {
-                (&nbsp;<% pkg_change_now_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_change_later_link($cust_pkg) %>&nbsp;)
-                (&nbsp;<% pkg_unchange_link($cust_pkg) %>&nbsp;)
-                <BR>
-%               }
-%           }
-
-%           if ( !$supplemental ) {
-%           # suspension actions--always available
-%             if ( $curuser->access_right('Suspend customer package') ) {
-                (&nbsp;<% pkg_suspend_link($cust_pkg) %>&nbsp;)
-%             }
-%             if ( $curuser->access_right('Suspend customer package later') ) {
-                (&nbsp;<% pkg_adjourn_link($cust_pkg) %>&nbsp;)
-%             }
-%             if ( $curuser->access_right('Delay suspension events') ) { 
-                (&nbsp;<% pkg_delay_link($cust_pkg) %>&nbsp;)
-%             }
-%
-%             if ( $change_from or $cust_pkg->change_to_pkgnum ) {
-%                 # you can't cancel the package while in this state
-%             } else { # the normal case: links to cancel the package
-                <BR>
-%               if ( $curuser->access_right('Cancel customer package immediately') ) {
-                  (&nbsp;<% pkg_cancel_link($cust_pkg) %>&nbsp;)
-%               }
-%               if ( $curuser->access_right('Cancel customer package later') ) {
-                  (&nbsp;<% pkg_expire_link($cust_pkg) %>&nbsp;)
-%               }
-%             }
-%           }
-
-            <FONT>
-          </TD>
-        </TR>
-%     }
-%
+
 %   } 
 % } 
 
@@ -484,7 +345,7 @@ sub pkg_status_row_changed {
   return '' unless $cust_pkg->change_date;
 
   my $html =
-    pkg_status_row( $cust_pkg, emt('Package changed'), 'change_date', %opt );
+    pkg_status_row( $cust_pkg, emt('Changed'), 'change_date', %opt );
 
   my $old = $cust_pkg->old_cust_pkg;
   if ( $old ) {
@@ -650,136 +511,8 @@ sub pkg_datestr {
   $strip;
 }
 
-sub pkg_suspend_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=suspend',
-             'label'       => emt('Suspend now'),
-             'actionlabel' => emt('Suspend'),
-             'color'       => '#FF9900',
-             'cust_pkg'    => shift,
-             'height'      => 420,
-         )
-}
-
-sub pkg_adjourn_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=adjourn',
-             'label'       => emt('Suspend later'),
-             'actionlabel' => emt('Adjourn'),
-             'color'       => '#CC6600',
-             'cust_pkg'    => shift,
-             'height'      => 445,
-         )
-}
-
-sub pkg_delay_link  {
-  my($cust_pkg) = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/delay_susp_pkg.html',
-             'label'       => ( $cust_pkg->dundate
-                                  ? emt('Edit suspension delay')
-                                  : emt('Delay suspend')
-                              ),
-             'actionlabel' => emt('Delay suspend for'),
-             'cust_pkg'    => $cust_pkg,
-         )
-}
-
-sub pkg_resume_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=resume',
-             'label'       => emt('Unsuspend later'),
-             'actionlabel' => emt('Resume'),
-             'color'       => '#00CC00',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_unhold_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/unhold_pkg.html?',
-             'label'       => emt('Start billing'),
-             'actionlabel' => emt('Start billing'),
-             'color'       => '#00CC00',
-             'width'       => 510,
-             'height'      => 310,
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_unsuspend_link { pkg_link('misc/unsusp_pkg',    emt('Unsuspend now'), @_ ); }
 sub pkg_unadjourn_link { pkg_link('misc/unadjourn_pkg', emt('Abort'),     @_ ); }
 sub pkg_unexpire_link  { pkg_link('misc/unexpire_pkg',  emt('Abort'),     @_ ); }
-sub pkg_unchange_link  { pkg_link('misc/do_not_change_pkg',  emt('Abort change'),     @_ ); }
-sub pkg_change_now_link  { pkg_link('misc/change_pkg_now',  emt('Change now'),     @_ ); }
-
-sub pkg_cancel_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=cancel',
-             'label'       => emt('Cancel now'),
-             'actionlabel' => emt('Cancel'),
-             'color'       => '#ff0000',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_uncancel_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=uncancel',
-             'label'       => emt('Un-cancel'),
-             'actionlabel' => emt('Un-cancel'),
-             #'color'       =>  #?
-             'cust_pkg'    => shift,
-             'width'       => 960,
-             'height'      => 740,
-         )
-}
-
-sub pkg_expire_link {
-  include( '/elements/popup_link-cust_pkg.html',
-             'action'      => $p. 'misc/cancel_pkg.html?method=expire',
-             'label'       => emt('Cancel later'),
-             'actionlabel' => emt('Expire'),
-             'color'       => '#CC0000',
-             'cust_pkg'    => shift,
-         )
-}
-
-sub pkg_change_later_link {
-  my $cust_pkg = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p . 'misc/change_pkg.cgi?',
-    'label'       => emt('Reschedule'),
-    'actionlabel' => emt('Edit scheduled change for'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 960,
-    'height'      => 490,
-  )
-}
-
-sub pkg_change_start_link {
-  my $cust_pkg = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p . 'misc/change_pkg_date.html?field=start_date',
-    'label'       => emt('Set start date'),
-    'actionlabel' => emt('Set start of billing for'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 510,
-    'height'      => 310,
-  )
-}
-
-sub pkg_change_contract_end_link {
-  my $cust_pkg = shift;
-  include( '/elements/popup_link-cust_pkg.html',
-    'action'      => $p . 'misc/change_pkg_date.html?field=contract_end',
-    'label'       => emt('Set contract end'),
-    'actionlabel' => emt('Set contract end for'),
-    'cust_pkg'    => $cust_pkg,
-    'width'       => 510,
-    'height'      => 310,
-  )
-}
 
 sub svc_recharge_link {
   include( '/elements/popup_link-cust_svc.html',