address book works

yesno uses bool now instead of int
This commit is contained in:
JT Smith 2008-03-06 00:22:59 +00:00
parent 17faa35f27
commit 56407bdc8f
7 changed files with 305 additions and 9 deletions

View file

@ -65,6 +65,8 @@ sub addAddressBook {
phoneNumber varchar(35),
index addressBookId_addressId (addressBookId,addressId)
)");
$session->setting->add('shopAddressBookTemplateId','3womoo7Teyy2YKFa25-MZg');
$session->setting->add('shopAddressTemplateId','XNd7a_g_cTvJVYrVHcx2Mw');
}
#-------------------------------------------------
@ -106,8 +108,8 @@ sub createSkuAsset {
description mediumtext,
sku varchar(35) binary not null,
salesAgentId varchar(22) binary,
displayTitle int not null default 1,
overrideTaxRate int not null default 0,
displayTitle bool not null default 1,
overrideTaxRate bool not null default 0,
taxRateOverride float not null default 0.00,
primary key (assetId, revisionDate),
unique key sku (sku),
@ -137,7 +139,7 @@ sub migrateToNewCart {
index cartId_assetId (cartId,assetId)
)");
$session->db->write("drop table shoppingCart");
$session->db->write("insert into settings values ('shopCartTemplateId','aIpCmr9Hi__vgdZnDTz1jw')");
$session->setting->add('shopCartTemplateId','aIpCmr9Hi__vgdZnDTz1jw');
}
#-------------------------------------------------

View file

@ -73,7 +73,7 @@ sub definition {
defaultValue=>1
},
dbDataType => {
defaultValue => "INT(1)",
defaultValue => "bool",
},
});
return $class->SUPER::definition($session, $definition);

View file

@ -114,7 +114,7 @@ sub getHtmlFormatted {
my $address = $self->get("name") . "<br />" . $self->get("address1") . "<br />";
$address .= $self->get("address2") . "<br />" if ($self->get("address2") ne "");
$address .= $self->get("address3") . "<br />" if ($self->get("address3") ne "");
$address .= $self->get("city") . ",";
$address .= $self->get("city") . ", ";
$address .= $self->get("state") . " " if ($self->get("state") ne "");
$address .= $self->get("code") if ($self->get("code") ne "");
$address .= '<br />' . $self->get("country");

View file

@ -5,6 +5,7 @@ use strict;
use Class::InsideOut qw{ :std };
use WebGUI::Asset::Template;
use WebGUI::Exception::Shop;
use WebGUI::Form;
use WebGUI::International;
use WebGUI::Shop::Address;
@ -290,6 +291,177 @@ sub update {
$self->session->db->setRow("addressBook","addressBookId",$properties{$id});
}
#-------------------------------------------------------------------
=head2 www_deleteAddress ( )
Deletes an address from the book.
=cut
sub www_deleteAddress {
my $self = shift;
$self->getAddress($self->session->form->get("addressId"))->delete;
return $self->www_view;
}
#-------------------------------------------------------------------
=head2 www_editAddress ()
Allows a user to edit an address in their address book.
=cut
sub www_editAddress {
my ($self, $error) = @_;
my $session = $self->session;
my $form = $session->form;
my $address = eval{$self->getAddress($form->get("addressId"))};
if (WebGUI::Error->caught) {
$address = undef;
}
my %base = ();
if (defined $address) {
%base = %{$address->get};
}
my %var = (
%base,
error => $error,
formHeader => WebGUI::Form::formHeader($session)
.WebGUI::Form::hidden($session, {name=>"shop", value=>"address"})
.WebGUI::Form::hidden($session, {name=>"method", value=>"editAddressSave"})
.WebGUI::Form::hidden($session, {name=>"addressId", value=>$form->get("addressId")})
.WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")}),
saveButton => WebGUI::Form::submit($session),
formFooter => WebGUI::Form::formFooter($session),
address1Field => WebGUI::Form::text($session, {name=>"address1", maxlength=>35, defaultValue=>($form->get("address1") || ((defined $address) ? $address->get('address1') : undef))}),
address2Field => WebGUI::Form::text($session, {name=>"address2", maxlength=>35, defaultValue=>($form->get("address2") || ((defined $address) ? $address->get('address2') : undef))}),
address3Field => WebGUI::Form::text($session, {name=>"address3", maxlength=>35, defaultValue=>($form->get("address3") || ((defined $address) ? $address->get('address3') : undef))}),
labelField => WebGUI::Form::text($session, {name=>"label", maxlength=>35, defaultValue=>($form->get("label") || ((defined $address) ? $address->get('label') : undef))}),
nameField => WebGUI::Form::text($session, {name=>"name", maxlength=>35, defaultValue=>($form->get("name") || ((defined $address) ? $address->get('name') : undef))}),
cityField => WebGUI::Form::text($session, {name=>"city", maxlength=>35, defaultValue=>($form->get("city") || ((defined $address) ? $address->get('city') : undef))}),
stateField => WebGUI::Form::text($session, {name=>"state", maxlength=>35, defaultValue=>($form->get("state") || ((defined $address) ? $address->get('state') : undef))}),
countryField => WebGUI::Form::country($session, {name=>"country", defaultValue=>($form->get("country") || ((defined $address) ? $address->get('country') : undef))}),
codeField => WebGUI::Form::zipcode($session, {name=>"code", defaultValue=>($form->get("code") || ((defined $address) ? $address->get('code') : undef))}),
phoneNumberField => WebGUI::Form::phone($session, {name=>"phoneNumber", defaultValue=>($form->get("phoneNumber") || ((defined $address) ? $address->get('phoneNumber') : undef))}),
);
my $template = WebGUI::Asset::Template->new($session, $session->setting->get("shopAddressTemplateId"));
$template->prepare;
return $session->style->userStyle($template->process(\%var));
}
#-------------------------------------------------------------------
=head2 www_editAddressSave ()
Saves the address. If there is a problem generates www_editAddress() with an error message. Otherwise returns www_view().
=cut
sub www_editAddressSave {
my $self = shift;
my $form = $self->session->form;
my $i18n = WebGUI::International->new($self->session,"Shop");
if ($form->get("label") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('label')));
}
if ($form->get("name") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('name')));
}
if ($form->get("address1") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('address')));
}
if ($form->get("city") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('city')));
}
if ($form->get("code") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('code')));
}
if ($form->get("country") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('country')));
}
if ($form->get("phoneNumber") eq "") {
return $self->www_editAddress(sprintf($i18n->get('is a required field'), $i18n->get('phone number')));
}
my %addressData = (
label => $form->get("label"),
name => $form->get("name"),
address1 => $form->get("address1"),
address2 => $form->get("address2"),
address3 => $form->get("address3"),
city => $form->get("city"),
state => $form->get("state"),
code => $form->get("code","zipcode"),
country => $form->get("country","country"),
phoneNumber => $form->get("phoneNumber","phone"),
);
if ($form->get('addressId') eq '') {
$self->addAddress(\%addressData);
}
else {
$self->getAddress($form->get('addressId'))->update(\%addressData);
}
return $self->www_view;
}
#-------------------------------------------------------------------
=head2 www_view
Displays the current user's address book.
=cut
sub www_view {
my $self = shift;
my $session = $self->session;
my $form = $session->form;
my $i18n = WebGUI::International->new($session, "Shop");
my @addresses = ();
foreach my $address (@{$self->getAddresses}) {
push(@addresses, {
%{$address->get},
address => $address->getHtmlFormatted,
deleteButton => WebGUI::Form::formHeader($session)
.WebGUI::Form::hidden($session, {name=>"shop", value=>"address"})
.WebGUI::Form::hidden($session, {name=>"method", value=>"deleteAddress"})
.WebGUI::Form::hidden($session, {name=>"addressId", value=>$address->getId})
.WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")})
.WebGUI::Form::submit($session, {value=>$i18n->get("delete")})
.WebGUI::Form::formFooter($session),
editButton => WebGUI::Form::formHeader($session)
.WebGUI::Form::hidden($session, {name=>"shop", value=>"address"})
.WebGUI::Form::hidden($session, {name=>"method", value=>"editAddress"})
.WebGUI::Form::hidden($session, {name=>"addressId", value=>$address->getId})
.WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")})
.WebGUI::Form::submit($session, {value=>$i18n->get("edit")})
.WebGUI::Form::formFooter($session),
useButton => WebGUI::Form::formHeader($session)
.WebGUI::Form::hidden($session, {name=>"shop", value=>"cart"})
.WebGUI::Form::hidden($session, {name=>"method", value=>"setShippingAddress"})
.WebGUI::Form::hidden($session, {name=>"shippingAddressId", value=>$address->getId})
.WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")})
.WebGUI::Form::submit($session, {value=>$i18n->get("use this address")})
.WebGUI::Form::formFooter($session),
});
}
my %var = (
addresses => \@addresses,
addButton => WebGUI::Form::formHeader($session)
.WebGUI::Form::hidden($session, {name=>"shop", value=>"address"})
.WebGUI::Form::hidden($session, {name=>"method", value=>"editAddress"})
.WebGUI::Form::hidden($session, {name=>"itemId", value=>$form->get("itemId")})
.WebGUI::Form::submit($session, {value=>$i18n->get("add a new address")})
.WebGUI::Form::formFooter($session),
);
my $template = WebGUI::Asset::Template->new($session, $session->setting->get("shopAddressBookTemplateId"));
$template->prepare;
return $session->style->userStyle($template->process(\%var));
}
1;

View file

@ -5,6 +5,7 @@ use strict;
use Class::InsideOut qw{ :std };
use WebGUI::Asset::Template;
use WebGUI::Exception::Shop;
use WebGUI::Form;
use WebGUI::International;
use WebGUI::Shop::AddressBook;
use WebGUI::Shop::CartItem;
@ -195,6 +196,23 @@ sub getId {
#-------------------------------------------------------------------
=head2 getItem ( itemId )
Returns a reference to a WebGUI::Cart::Item object.
=head3 itemId
The id of the item to retrieve.
=cut
sub getItem {
my ($self, $itemId) = @_;
return WebGUI::Shop::CartItem->new($self, $itemId);
}
#-------------------------------------------------------------------
=head2 getItems ( )
Returns an array reference of WebGUI::Asset::Sku objects that are in the cart.
@ -206,7 +224,7 @@ sub getItems {
my @itemsObjects = ();
my $items = $self->session->db->read("select itemId from cartItems where cartId=?",[$self->getId]);
while (my ($itemId) = $items->array) {
push(@itemsObjects, WebGUI::Shop::CartItem->new($self, $itemId));
push(@itemsObjects, $self->getItem($itemId));
}
return \@itemsObjects;
}
@ -310,11 +328,31 @@ Remove an item from the cart and then display the cart again.
sub www_removeItem {
my $self = shift;
my $item = WebGUI::Shop::CartItem->new($self, $self->session->form->get("itemId"));
$item->remove;
my $item = $self->getItem($self->session->form->get("itemId"))->remove;
return $self->www_view;
}
#-------------------------------------------------------------------
=head2 www_setShippingAddress ()
Sets the shipping address for the cart or for a cart item if itemId is one of the form params.
=cut
sub www_setShippingAddress {
my $self = shift;
my $form = $self->session->form;
if ($form->get("itemId") ne "") {
$self->getItem($form->get("itemId"))->update({shippingAddressId=>$form->get('shippingAddressId')});
}
else {
$self->update({shippingAddressId=>$form->get('shippingAddressId')});
}
return $self->www_view;
}
#-------------------------------------------------------------------
=head2 www_update ( )
@ -421,7 +459,7 @@ Displays the configured item.
sub www_viewItem {
my $self = shift;
my $itemId = $self->session->form->get("itemId");
my $item = eval { WebGUI::Shop::CartItem->new($self, $itemId) };
my $item = eval { $self->getItem($itemId) };
if (WebGUI::Error->caught()) {
return $self->www_view;
}

View file

@ -3,6 +3,90 @@ package WebGUI::i18n::English::Shop;
use strict;
our $I18N = {
'is a required field' => {
message => q|%s is a required field.|,
lastUpdated => 0,
context => q|an error message|
},
'label' => {
message => q|Label|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'label help' => {
message => q|eg: 'Home' or 'Work'|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'name' => {
message => q|Name|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'address' => {
message => q|Address|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'city' => {
message => q|City|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'state' => {
message => q|State / Province|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'code' => {
message => q|Postal / Zip Code|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'country' => {
message => q|Country|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'phone number' => {
message => q|Phone Number|,
lastUpdated => 0,
context => q|a label in the address editor|
},
'add a new address' => {
message => q|Add A New Address|,
lastUpdated => 0,
context => q|a button in the address book|
},
'delete' => {
message => q|Delete|,
lastUpdated => 0,
context => q|a button in the address book|
},
'edit' => {
message => q|Edit|,
lastUpdated => 0,
context => q|a button in the address book|
},
'use this address' => {
message => q|Use This Address|,
lastUpdated => 0,
context => q|a button in the address book|
},
'too many of this item' => {
message => q|Can't add that many %s to your cart.|,
lastUpdated => 0,