Good job Paul.  There's just one change I'd make.  Instead of having the
cron job call a Perl script, I'd have a cron job use Lynx to make a hit
on the Web site with an appropriate use of htaccess.  This way all of
your code is in the same language ;)

Cheers,
-jj

Paul Chamberlain wrote:
> 
> "Shawn" <[EMAIL PROTECTED]> wrote privately:
> > I would love to get the code from you to track inventory in the carts, I
> > have been trying to do this but am not having any luck.  I'm still new to
> > PHP and MySQL and trying to come up to speed.
> 
> I have tried to separate my changes for this from the other
> changes that I've made and I've given up.  But I can summarize
> the changes that I made.
> 
> include/init            Disable the session and invoice expiration
> actions/SUBMIT_ORDER    Disable the inventory adjustments.
> actions/ADD_BASKET      Adjust inventory
> actions/UPDATE_BASKET   Adjust inventory
> include/purgeInvoice    Adjust inventory
> 
> I don't use actions/UPDATE_INVOICE_SKU, but a similar change
> would have to be made there if you use it.
> 
> And then add a cron job which expires sessions and stale
> inactive invoices and returns their inventory.  I've
> included my perl script below that does this.
> 
> I have a patch file where I was trying to put together the
> changes for this but I'm sure there are unrelated changes,
> assumptions that are specific to my installation, changes
> that work for me that will break for you, and just out-n-out
> bugs.  If you still want it after that disclaimer, ask me.
> --
> Paul Chamberlain, [EMAIL PROTECTED]
> 
> #!/usr/bin/perl
> # expiresessions: return items from carts to inventory
> # Author: Paul Chamberlain ([EMAIL PROTECTED])
> 
> use Getopt::Std;
> use DBI;
> 
> sub usage {
>         my $s = shift;
> 
>         print STDERR "$0: $s\n";
>         print STDERR "Usage: $0 [options]\n";
>         print STDERR "       -v      verbose\n";
>         print STDERR "       -n      do nothing\n";
>         print STDERR "       -d      debug output\n";
>         exit(1);
> }
> 
> if (!getopts("dnv")) {
>         &usage("Unexpected option");
> }
> 
> # Reverse default for these options
> $opt_v = !$opt_v;
> #$opt_n = !$opt_n;
> $opt_d = !$opt_d;
> 
> $dbh = DBI->connect("DBI:mysql:database=freetrade");
> if (!$dbh) {
>         die "freetrade: " . $DBI::errstr . "\n";
> }
> 
> &deletesessions();
> &cleanbaskets();
> &deleteinvoices();
> exit(0);
> 
> sub deletesessions {
>         $sql = "DELETE FROM session WHERE"
>         . " unix_timestamp(LastAction) < unix_timestamp(now()) - 86400";
> 
>         print "Running query: $sql\n" if ($opt_d);
>         $dbh->do($sql) if (!$opt_n);
> }
> 
> sub cleanbaskets {
>         my $sql;
>         my $sth;
>         my $update;
>         my $delete;
>         my $row;
> 
>         $update = $dbh->prepare("UPDATE inventory SET"
>         . " Available=Available+?"
>         . " WHERE SKU=?");
>         if (!$update) {
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         $delete = $dbh->prepare("DELETE FROM session_sku"
>         . " WHERE ID=?");
>         if (!$delete) {
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         # Get the list of session_sku's that have no session
>         $sql = "select s.* from session_sku s"
>         . " LEFT JOIN session ON s.Session=session.ID"
>         . " WHERE session.ID IS NULL";
>         print "Running query: $sql\n" if ($opt_d);
> 
>         $sth = $dbh->prepare($sql);
>         if (!$sth || !$sth->execute) {
>                 print STDERR "Query failed: $sql\n";
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         while ($row = $sth->fetchrow_hashref) {
>                 $qty = $row->{Quantity};
>                 if ($opt_v) {
>                         print "ID " . $row->{ID} . ": Returning "
>                         . $qty
>                         . " to " . $row->{SKU}
>                         . " (" . $row->{ExternalSKU} . ")\n";
>                 }
>                 if (!$opt_n) {
>                         $update->execute($qty, $row->{SKU});
>                         $delete->execute($row->{ID});
>                 }
>         }
> }
> 
> sub deleteinvoices {
>         my $row;
>         my $sth;
> 
>         # Get the list of invoices that have were never completed
>         my $sql = "SELECT ID FROM invoice"
>         . " WHERE ACTIVE='N'"
>         . " AND unix_timestamp(Created) < unix_timestamp(now()) - 86400";
>         print "Running query: $sql\n" if ($opt_d);
> 
>         $sth = $dbh->prepare($sql);
>         if (!$sth || !$sth->execute) {
>                 print STDERR "Query failed: $sql\n";
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         while ($row = $sth->fetchrow_hashref) {
>                 $id = $row->{ID};
>                 if ($opt_v) {
>                         print "Invoice $id\n";
>                 }
> 
>                 $sql = "DELETE FROM billing WHERE Invoice=$id";
>                 print "Running query: $sql\n" if ($opt_d);
>                 $dbh->do($sql) if (!$opt_n);
> 
>                 $sql = "DELETE FROM shipping WHERE Invoice=$id";
>                 print "Running query: $sql\n" if ($opt_d);
>                 $dbh->do($sql) if (!$opt_n);
> 
>                 &deleteinvoiceskus($id);
> 
>                 $sql = "DELETE FROM invoice WHERE ID=$id";
>                 print "Running query: $sql\n" if ($opt_d);
>                 $dbh->do($sql) if (!$opt_n);
>         }
> }
> 
> sub deleteinvoiceskus {
>         my $invoice = shift;
>         my $sql;
>         my $sth;
>         my $update;
>         my $delete;
>         my $row;
> 
>         $update = $dbh->prepare("UPDATE inventory SET"
>         . " Available=Available+?"
>         . " WHERE SKU=?");
>         if (!$update) {
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         $delete = $dbh->prepare("DELETE FROM session_sku"
>         . " WHERE ID=?");
>         if (!$delete) {
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         # Get the list of session_sku's that have no session
>         $sql = "select * from invoice_sku"
>         . " WHERE Invoice=$invoice";
>         print "Running query: $sql\n" if ($opt_d);
> 
>         $sth = $dbh->prepare($sql);
>         if (!$sth || !$sth->execute) {
>                 print STDERR "Query failed: $sql\n";
>                 print STDERR "Error: " . $dbh->errstr;
>                 return;
>         }
> 
>         while ($row = $sth->fetchrow_hashref) {
>                 $qty = $row->{Quantity};
>                 if ($opt_v) {
>                         print "ID " . $row->{ID} . ": Returning "
>                         . $qty
>                         . " to " . $row->{SKU}
>                         . " (" . $row->{ExternalSKU} . ")\n";
>                 }
>                 if (!$opt_n) {
>                         $update->execute($qty, $row->{SKU});
>                         $delete->execute($row->{ID});
>                 }
>         }
> }
> 
> ------------------------------------------------------------
> To subscribe:    [EMAIL PROTECTED]
> To unsubscribe:  [EMAIL PROTECTED]
> Site:            http://www.working-dogs.com/freetrade/
> Problems?:       [EMAIL PROTECTED]

-- 
if (shannon - jj) * behrens == webEngineer["CLEAR INK�"]:
    print "<i>imagination is the only real medium(sm)</i><br>"


------------------------------------------------------------
To subscribe:    [EMAIL PROTECTED]
To unsubscribe:  [EMAIL PROTECTED]
Site:            http://www.working-dogs.com/freetrade/
Problems?:       [EMAIL PROTECTED]

Reply via email to