Committing the new Ecommerce system

This commit is contained in:
Martin Kamerbeek 2004-11-29 15:41:41 +00:00
parent 5676bf9585
commit eeafe944e2
5 changed files with 168 additions and 0 deletions

View file

@ -88,3 +88,83 @@ create table layout (
printableStyleTemplateId varchar(22) not null
);
INSERT INTO settings VALUES ('commerceCheckoutCanceledTemplateId','1');
INSERT INTO settings VALUES ('commerceConfirmCheckoutTemplateId','1');
INSERT INTO settings VALUES ('commercePaymentPlugin','PayFlowPro');
INSERT INTO settings VALUES ('commerceSendDailyReportTo','martin@geefmegeld.nl');
INSERT INTO settings VALUES ('commerceTransactionErrorTemplateId','1');
INSERT INTO template VALUES ('1','Subscription code redemption','<tmpl_if batchDescription>\r\nBatch: <tmpl_var batchDescription>\r\n</tmpl_if>\r\n\r\n<tmpl_var message><br>\r\n<tmpl_var codeForm>','Operation/RedeemSubscription',1,1);
INSERT INTO template VALUES ('1','Subscriptionitem default template','<h2><tmpl_var name></h2>\r\n<tmpl_var description><br>\r\n<br>\r\n<br>\r\n$ <tmpl_var price><br>\r\n<a href=\"<tmpl_var url>\">Subscribe now</a><br>','Macro/SubscriptionItem',1,1);
INSERT INTO template VALUES ('1','Default transaction error template','<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\">\r\n <tr>\r\n <th>Transaction description</th>\r\n <th>Price</th>\r\n <th>Status</th>\r\n <th>Error</th>\r\n </tr>\r\n<tmpl_loop resultLoop>\r\n <tr>\r\n <td align=\"left\"><tmpl_var purchaseDescription></td>\r\n <td align=\"right\"><tmpl_var purchaseAmount></td>\r\n <td><tmpl_var status></td>\r\n <td align=\"left\"><tmpl_var error> (<tmpl_var errorCode>)</td>\r\n </tr>\r\n</tmpl_loop>\r\n</table><br>\r\n<br>\r\n\r\n<tmpl_var statusExplanation>','Commerce/TransactionError',1,1);
INSERT INTO template VALUES ('1','Default checkout confirmation template','<tmpl_var title><br>\r\n<br>\r\n<ul>\r\n<tmpl_loop errorLoop>\r\n<li><tmpl_var message></li>\r\n</tmpl_loop>\r\n</ul>\r\n\r\n<tmpl_if recurringItems>\r\n<table border=\"0\" cellpadding=\"5\">\r\n<tmpl_loop recurringLoop>\r\n <tr>\r\n <td align=\"left\"><b>Subscription \"<tmpl_var name>\"</b></td>\r\n <td> : </td>\r\n <td align=\"left\">$ <tmpl_var price> every <tmpl_var period></td>\r\n </tr>\r\n</tmpl_loop>\r\n</table><br>\r\n<br>\r\n</tmpl_if>\r\n<tmpl_var form>','Commerce/ConfirmCheckout',1,1);
INSERT INTO template VALUES ('1','Default view purchase history template','<table border=\"0\">\r\n<tmpl_loop purchaseHistoryLoop>\r\n <tr>\r\n <td><b><tmpl_var initDate></b></td>\r\n <td><b><tmpl_var completionDate></b></td>\r\n <td align=\"right\"><b>$ <tmpl_var amount></b></td>\r\n <td><b><tmpl_var status></b></td>\r\n <td><tmpl_if canCancel><a href=\"<tmpl_var cancelUrl>\">Cancel</a></tmpl_if></td>\r\n </tr>\r\n <tmpl_loop itemLoop>\r\n <tr>\r\n <td \"align=right\"><tmpl_var quantity> x </td>\r\n <td \"align=left\"><tmpl_var itemName></td>\r\n <td \"align=right\">$ <tmpl_var amount></td>\r\n </tr>\r\n </tmpl_loop>\r\n</tmpl_loop>\r\n</table>','Commerce/ViewPurchaseHistory',1,1);
INSERT INTO template VALUES ('1','Default cancel checkout template','<tmpl_var message>','Commerce/CheckoutCanceled',1,1);
CREATE TABLE shoppingCart (
sessionId varchar(22) NOT NULL default '',
itemId varchar(64) NOT NULL default '',
itemType varchar(40) NOT NULL default '',
quantity int(4) NOT NULL default '0',
PRIMARY KEY (sessionId,itemId,itemType)
) TYPE=MyISAM;
CREATE TABLE subscription (
subscriptionId varchar(22) NOT NULL default '',
name varchar(128) default NULL,
price float default '0',
description mediumtext,
subscriptionGroup varchar(22) NOT NULL default '',
duration varchar(12) NOT NULL default 'Monthly',
executeOnSubscription varchar(128) default NULL,
karma int(4) default '0',
deleted int(1) default '0',
PRIMARY KEY (subscriptionId)
) TYPE=MyISAM;
CREATE TABLE subscriptionCodeBatch (
batchId varchar(22) NOT NULL default '',
name varchar(128) default NULL,
description mediumtext NOT NULL,
subscriptionId varchar(22) NOT NULL default '',
PRIMARY KEY (batchId)
) TYPE=MyISAM;
CREATE TABLE subscriptionCode (
batchId varchar(22) NOT NULL default '',
code varchar(64) NOT NULL default '',
status varchar(10) NOT NULL default 'Unused',
dateCreated int(11) NOT NULL default '0',
dateUsed int(11) NOT NULL default '0',
expires int(11) NOT NULL default '0',
usedBy varchar(22) NOT NULL default '0',
PRIMARY KEY (code)
) TYPE=MyISAM;
CREATE TABLE subscriptionCodeSubscriptions (
code varchar(64) NOT NULL default '',
subscriptionId varchar(22) NOT NULL default '',
UNIQUE KEY code (code,subscriptionId)
) TYPE=MyISAM;
CREATE TABLE transaction (
transactionId varchar(22) NOT NULL default '',
userId varchar(22) NOT NULL default '',
amount float NOT NULL default '0',
gatewayId varchar(128) default NULL,
gateway varchar(64) NOT NULL default '',
recurring tinyint(1) NOT NULL default '0',
initDate int(11) NOT NULL default '0',
completionDate int(11) default '0',
status varchar(10) NOT NULL default 'Pending',
lastPayedTerm int(6) NOT NULL default '0',
PRIMARY KEY (transactionId)
) TYPE=MyISAM;
CREATE TABLE transactionItem (
transactionId varchar(22) NOT NULL default '',
itemName varchar(64) NOT NULL default '',
amount float NOT NULL default '0',
quantity int(4) NOT NULL default '0',
itemId varchar(64) NOT NULL default '',
itemType varchar(40) NOT NULL default ''
) TYPE=MyISAM;
CREATE TABLE commerceSettings (
fieldName varchar(64) NOT NULL default '',
fieldValue varchar(255) NOT NULL default '',
namespace varchar(64) NOT NULL default '',
type varchar(10) NOT NULL default ''
) TYPE=MyISAM;

View file

@ -0,0 +1,12 @@
package Hourly::ExpireSubscriptionCodes;
use strict;
use WebGUI::SQL;
#-------------------------------------------------------------------
sub process {
WebGUI::SQL->write("update subscriptionCode set status='Expired' where status = 'Unused' and dateCreated + expires < ".time);
}
1;

View file

@ -0,0 +1,76 @@
package Hourly::ProcessRecurringPayments;
use strict;
use WebGUI::SQL;
use WebGUI::Commerce::Payment;
use WebGUI::Commerce::Transaction;
use WebGUI::Commerce::Item;
use WebGUI::DateTime;
use WebGUI::Session;
sub _getDuration {
my $duration = shift;
return addToDate(0,0,0,7) if $duration eq 'Weekly';
return addToDate(0,0,0,14) if $duration eq 'BiWeekly';
return addToDate(0,0,0,28) if $duration eq 'FourWeekly';
return addToDate(0,0,1,0) if $duration eq 'Monthly';
return addToDate(0,0,3,0) if $duration eq 'Quarterly';
return addToDate(0,0,6,0) if $duration eq 'HalfYearly';
return addToDate(0,1,0,0) if $duration eq 'Yearly';
}
sub process {
my @recurringTransactions = WebGUI::SQL->buildArray("select transactionId from transaction where recurring=1 and status='Completed'");
my (@unprocessed, @ok, @failed, @fatal);
foreach (@recurringTransactions) {
my $transaction = WebGUI::Commerce::Transaction->new($_);
my $itemProperties = $transaction->getItems->[0];
my $item = WebGUI::Commerce::Item->new($itemProperties->{itemId}, $itemProperties->{itemType});
my $time = time;
$time -= $transaction->get('initDate');
my $term = int($time / _getDuration($item->duration)) + 1;
if ($term > $transaction->lastPayedTerm) {
my $payment = WebGUI::Commerce::Payment->load($transaction->gateway);
$transaction->gatewayId;
my $status = $payment->getRecurringPaymentStatus($transaction->gatewayId, $term);
my $output = $item->name." (tid: ".$transaction->get('transactionId').") ";
$output .= " by user ".WebGUI::User->new($transaction->get(userId))->username." (uid: ".$transaction->get(userId).") ";
$output .= " for term ". sprintf('% 6d', $term)." ";
$output .= " -> ".$transaction->gateway.": (".$transaction->gatewayId.")\t";
unless ($payment->resultCode) {
unless (defined $status) {
$output .= "NOT PROCESSED YET";
push (@unprocessed, $output);
} elsif ($status->{resultCode} eq '0') {
$output .= "OK";
push (@ok, $output);
$item->apply unless ($term == 1);
$transaction->lastPayedTerm($term);
} else {
$output .= "PAYMENT FAILED: ".$status->{resultCode};
push (@failed, $output);
}
} else {
$output .= "FATAL ERROR: ".$payment->resultMessage." (".$payment->errorCode.")";
}
}
}
my $message = "FAILED PAYMENTS:\n-----------------------------\n".join("\n", @failed)."\n\n\n";
$message .= "UNPROCESSED PAYMENTS:\n-----------------------------\n".join("\n", @unprocessed)."\n\n\n";
$message .= "FATAL ERRORS:\n-----------------------------\n".join("\n",@fatal)."\n\n\n";
$message .= "SUCCESFUL PAYMENTS:\n-----------------------------\n".join("\n", @ok)."\n\n\n";
WebGUI::Mail::send($session{setting}{commerceSendDailyReportTo}, 'Daily recurring payments report', $message);
}
1;

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB