webgui/lib/WebGUI/Shop/Admin.pm

261 lines
8.2 KiB
Perl

package WebGUI::Shop::Admin;
use strict;
use Moose;
has session => (
is => 'ro',
required => 1,
);
around BUILDARGS => sub {
my $orig = shift;
my $className = shift;
##Original arguments start here.
my $protoSession = $_[0];
if (blessed $protoSession && $protoSession->isa('WebGUI::Session')) {
return $className->$orig(session => $protoSession);
}
return $className->$orig(@_);
};
use WebGUI::AdminConsole;
use WebGUI::Exception::Shop;
use WebGUI::HTMLForm;
use WebGUI::International;
=head1 NAME
Package WebGUI::Shop::Admin
=head1 DESCRIPTION
All the admin stuff that didn't fit elsewhere.
=head1 SYNOPSIS
use WebGUI::Shop::Admin;
my $admin = WebGUI::Shop::Admin->new($session);
=head1 METHODS
These subroutines are available from this package:
=cut
#-------------------------------------------------------------------
=head2 canManage ( [ $user ] )
Determine whether or not a user can manage commerce functions
=head3 $user
An optional WebGUI::User object to check for permission to do commerce functions. If
this is not used, it uses the current session user object.
=cut
sub canManage {
my $self = shift;
my $user = shift || $self->session->user;
return $user->isInGroup( $self->session->setting->get('groupIdAdminCommerce'));
}
#-------------------------------------------------------------------
=head2 getAdminConsole ()
Returns a reference to the admin console with all submenu items already added.
=cut
sub getAdminConsole {
my $self = shift;
my $ac = WebGUI::AdminConsole->new($self->session, 'shop');
my $i18n = WebGUI::International->new($self->session, "Shop");
my $url = $self->session->url;
$ac->addSubmenuItem($url->page("shop=admin"), $i18n->get("shop settings"));
$ac->addSubmenuItem($url->page("shop=tax;method=manage"), $i18n->get("taxes"));
$ac->addSubmenuItem($url->page("shop=pay;method=manage"), $i18n->get("payment methods"));
$ac->addSubmenuItem($url->page("shop=ship;method=manage"), $i18n->get("shipping methods"));
$ac->addSubmenuItem($url->page("shop=transaction;method=manage"), $i18n->get("transactions"));
$ac->addSubmenuItem($url->page("shop=vendor;method=manage"), $i18n->get("vendors"));
$ac->addSubmenuItem($url->page("shop=vendor;method=managePayouts"), $i18n->get("vendor payouts"));
$ac->addSubmenuItem($url->page("shop=credit;method=manage"), $i18n->get("in shop credit"));
return $ac;
}
#-------------------------------------------------------------------
=head2 isCashier ( [ $user ] )
Determine whether or not a user is a cashier
=head3 $user
An optional WebGUI::User object. If this is not used, it uses the current session user object.
=cut
sub isCashier {
my $self = shift;
my $user = shift || $self->session->user;
return $user->isInGroup( $self->session->setting->get('groupIdCashier'));
}
#-------------------------------------------------------------------
=head2 new ( session )
Constructor.
=head3 session
A reference to the current session.
=cut
#-------------------------------------------------------------------
=head2 session ()
Returns a reference to the current session.
=cut
#-------------------------------------------------------------------
=head2 www_editSettings ()
Displays the general commerce settings.
=cut
sub www_editSettings {
my $self = shift;
return $self->session->privilege->adminOnly() unless ($self->canManage);
my $i18n = WebGUI::International->new($self->session, "Shop");
my $ac = $self->getAdminConsole;
my $setting = $self->session->setting;
my $form = WebGUI::HTMLForm->new($self->session);
$form->submit;
$form->hidden(name=>"shop", value=>"admin");
$form->hidden(name=>"method", value=>"editSettingsSave");
$form->group(
name => "groupIdAdminCommerce",
value => $setting->get("groupIdAdminCommerce"),
label => $i18n->get('who can manage'),
hoverHelp => $i18n->get('who can manage help'),
);
$form->group(
name => "groupIdCashier",
value => $setting->get("groupIdCashier"),
label => $i18n->get('who is a cashier'),
hoverHelp => $i18n->get('who is a cashier help'),
);
$form->float(
name => 'shopCartCheckoutMinimum',
value => $setting->get('shopCartCheckoutMinimum'),
defaultValue=> '0.00',
label => $i18n->get('cart checkout minimum'),
hoverHelp => $i18n->get('cart checkout minimum help'),
);
$form->template(
name => "shopCartTemplateId",
value => $setting->get("shopCartTemplateId"),
label => $i18n->get("cart template"),
namespace => "Shop/Cart",
hoverHelp => $i18n->get("cart template help"),
);
$form->template(
name => "shopAddressBookTemplateId",
value => $setting->get("shopAddressBookTemplateId"),
label => $i18n->get("address book template"),
namespace => "Shop/AddressBook",
hoverHelp => $i18n->get("address book template help"),
);
$form->template(
name => "shopAddressTemplateId",
value => $setting->get("shopAddressTemplateId"),
namespace => "Shop/Address",
label => $i18n->get("edit address template"),
hoverHelp => $i18n->get("edit address template help"),
);
$form->template(
name => "selectGatewayTemplateId",
value => $setting->get("selectGatewayTemplateId"),
label => $i18n->get("select gateway template"),
namespace => "Shop/selectGateway",
hoverHelp => $i18n->get("select gateway template help"),
);
$form->template(
name => "shopMyPurchasesTemplateId",
value => $setting->get("shopMyPurchasesTemplateId"),
namespace => "Shop/MyPurchases",
label => $i18n->get("my purchases template"),
hoverHelp => $i18n->get("my purchases template help"),
);
$form->template(
name => "shopMyPurchasesDetailTemplateId",
value => $setting->get("shopMyPurchasesDetailTemplateId"),
namespace => "Shop/MyPurchasesDetail",
label => $i18n->get("my purchases detail template"),
hoverHelp => $i18n->get("my purchases detail template help"),
);
$form->template(
name => 'shopReceiptEmailTemplateId',
namespace => "Shop/EmailReceipt",
label => $i18n->get("receipt email template"),
hoverHelp => $i18n->get("receipt email template help"),
defaultValue => 'bPz1yk6Y9uwMDMBcmMsSCg',
value => $setting->get("shopReceiptEmailTemplateId"),
);
$form->group(
name => 'shopSaleNotificationGroupId',
label => $i18n->get("sale notification group"),
hoverHelp => $i18n->get("sale notification group help"),
defaultValue => '3',
value => $setting->get("shopSaleNotificationGroupId"),
);
$form->submit;
return $ac->render($form->print, $i18n->get("shop settings"));
}
#-------------------------------------------------------------------
=head2 www_editSettingsSave ()
Saves the general commerce settings.
=cut
sub www_editSettingsSave {
my $self = shift;
return $self->session->privilege->adminOnly() unless ($self->session->user->isAdmin);
my ($setting, $form) = $self->session->quick(qw(setting form));
# Save shop templates
foreach my $template (qw(shopMyPurchasesDetailTemplateId shopMyPurchasesTemplateId
shopCartTemplateId shopAddressBookTemplateId shopAddressTemplateId selectGatewayTemplateId shopReceiptEmailTemplateId)) {
$setting->set($template, $form->get($template, "template"));
}
# Save group settings
foreach my $group (qw(groupIdCashier groupIdAdminCommerce shopSaleNotificationGroupId)) {
$setting->set($group, $form->get($group, "group"));
}
# Save mininmum cart checkout
$setting->set( 'shopCartCheckoutMinimum', $form->get( 'shopCartCheckoutMinimum', 'float' ) );
return $self->www_editSettings();
}
1;