my $dbh = dbh;
my $error =
- $self->SUPER::delete(@_)
+ $self->delete_password_history
+ || $self->SUPER::delete(@_)
|| $self->htpasswd_kludge('-D')
;
#
#}
+=item num_agents
+
+Returns the number of agents this user can view (via group membership).
+
+=cut
+
+sub num_agents {
+ my $self = shift;
+ $self->scalar_sql(
+ 'SELECT COUNT(DISTINCT agentnum) FROM access_usergroup
+ JOIN access_groupagent USING ( groupnum )
+ WHERE usernum = ?',
+ $self->usernum,
+ );
+}
+
=item agentnums
Returns a list of agentnums this user can view (via group membership).
}
+=item refund_rights PAYBY
+
+Accepts payment $payby (BILL,CASH,MCRD,MCHK,CARD,CHEK) and returns a
+list of the refund rights associated with that $payby.
+
+Returns empty list if $payby wasn't recognized.
+
+=cut
+
+sub refund_rights {
+ my $self = shift;
+ my $payby = shift;
+ my @rights = ();
+ push @rights, 'Post refund' if $payby =~ /^(BILL|CASH|MCRD|MCHK)$/;
+ push @rights, 'Post check refund' if $payby eq 'BILL';
+ push @rights, 'Post cash refund ' if $payby eq 'CASH';
+ push @rights, 'Refund payment' if $payby =~ /^(CARD|CHEK)$/;
+ push @rights, 'Refund credit card payment' if $payby eq 'CARD';
+ push @rights, 'Refund Echeck payment' if $payby eq 'CHEK';
+ return @rights;
+}
+
+=item refund_access_right PAYBY
+
+Returns true if user has L</access_right> for any L</refund_rights>
+for the specified payby.
+
+=cut
+
+sub refund_access_right {
+ my $self = shift;
+ my $payby = shift;
+ my @rights = $self->refund_rights($payby);
+ return '' unless @rights;
+ return $self->access_right(\@rights);
+}
+
=item default_customer_view
Returns the default customer view for this user, from the
qsearch( 'sched_item', { 'usernum' => $self->usernum } );
}
+=item locale
+
+=cut
+
+sub locale {
+ my $self = shift;
+ return $self->{_locale} if exists($self->{_locale});
+ $self->{_locale} = $self->option('locale');
+}
+
+=item get_page_pref PATH, NAME, TABLENUM
+
+Returns the user's page preference named NAME for the page at PATH. If the
+page is a view or edit page or otherwise shows a single record at a time,
+it should use TABLENUM to tell which record the preference is for.
+
+=cut
+
+sub get_page_pref {
+ my $self = shift;
+ my ($path, $prefname, $tablenum) = @_;
+ $tablenum ||= '';
+
+ my $access_user_page_pref = qsearchs('access_user_page_pref', {
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ });
+ $access_user_page_pref ? $access_user_page_pref->prefvalue : '';
+}
+
+=item set_page_pref PATH, NAME, TABLENUM, VALUE
+
+Sets the user's page preference named NAME for the page at PATH. Use TABLENUM
+as for get_page_pref.
+
+=cut
+
+sub set_page_pref {
+ my $self = shift;
+ my ($path, $prefname, $tablenum, $prefvalue) = @_;
+ $tablenum ||= '';
+
+ my $error;
+ my $access_user_page_pref = qsearchs('access_user_page_pref', {
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ });
+ if ( $access_user_page_pref ) {
+ if ( $prefvalue eq $access_user_page_pref->get('prefvalue') ) {
+ return '';
+ }
+ if ( length($prefvalue) > 0 ) {
+ $access_user_page_pref->set('prefvalue', $prefvalue);
+ $error = $access_user_page_pref->replace;
+ $error .= " (updating $prefname)" if $error;
+ } else {
+ $error = $access_user_page_pref->delete;
+ $error .= " (removing $prefname)" if $error;
+ }
+ } else {
+ if ( length($prefvalue) > 0 ) {
+ $access_user_page_pref = FS::access_user_page_pref->new({
+ path => $path,
+ usernum => $self->usernum,
+ tablenum => $tablenum,
+ prefname => $prefname,
+ prefvalue => $prefvalue,
+ });
+ $error = $access_user_page_pref->insert;
+ $error .= " (creating $prefname)" if $error;
+ } else {
+ return '';
+ }
+ }
+
+ return $error;
+}
+
=back
=head1 BUGS