Enhancements to Zen Cart 360 Sales Reporting

I have added an optional feature to Zen Cart 360 Sales Reporting (link) which shows recent direct deposits on the admin dashboard.  Update admin/index_dashboard.php, and at the end of the file, add this block of code:

<div id="colthree" class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
<div class="reportBox">
<div class="header"><?php echo "Recent Direct Deposits"; ?> </div>
<?php
require_once(DIR_WS_CLASSES . 'currencies.php');
$currencies = new currencies();
$orders = $db->Execute( "SELECT * FROM " . TABLE_DIRECT_DEPOSIT . " ORDER BY deposit_date DESC LIMIT 5");
while (!$orders->EOF) {
?>
  <div class="row">
  <span class="left">
    <?php echo substr($orders->fields['name'], 0, 20); ?>
  </span>
  <span class="center">
     <?php echo $currencies->format($orders->fields['amount']); ?>
  </span>
  <span class="left">
     <?php echo $orders->fields['deposit_date']; ?>
  </span>
</div>
<?php
$orders->MoveNext();
}
?>
</div>
</div>

Is osCommerce Dead?

I’m a Zen Cart guy, so normally the only thing I have to say about osCommerce is, “Them’s fighting words!”

But Gary Burton is a true open source hero, who has provided an upgrade path for merchants whose businesses depend on an active branch of osCommerce that works with modern versions of PHP. Thank you, Gary, for your leadership in creating the Frozen and Edge branches of osCommerce.

https://github.com/gburton/Responsive-osCommerce

Zen Cart Coupon Single User

Zen Cart Coupon Single User has been upgraded so that you can now restrict a coupon to any email address on a single domain, not just a single email.

So for example, if you want to permit a coupon to only be used by customers with a “@BigClient.com” email address, you would create a coupon code starting with “@BigClient.com”, such as “@BigClient.com_save_ten” or “@BigClient.com-half-off”.

BUG: Always Display State as a Pulldown in Zen Cart 1.5.5

There’s a bug in Zen Cart 1.5.5 that causes the State dropdown not to be correctly populated when you set Configuration->Customer Details->State - Always display as pulldownto true in Admin->Configuration->Customer Details.  It causes your State dropdown menu to look like this:

Zen Cart State dropdown without state set

even though the value of State has been set.

You can see the root cause of this error in the Chrome Javascript debugger.  Right click and select Inspect, then click the Console tab, and you’ll see the traceback for the error.

Traceback in Zen Cart for no state error in 1.5.5

The root cause of the error was that the stText element id was removed from the default template Zen Cart 1.5.5, an attempt to modify that DOM element failed, and stopped JavaScript processing.  The fix was straightforward; just check for this element’s existence before updating it.  You can pull the fix from Github and apply it to your Zen Cart 1.5.5 site, or hire me to do it.

Zen Cart – MailChimp Integration

My Zen Cart – MailChimp integrations have received the following updates:

  • Fixed bug in API integration:
    The original integration had error checking that was based on the 1.3 API, and lo longer work.  So while the success path logic was all correct, the error handling was wrong.
  • Added instructions for changing Zen Cart newsletter page:
    The original Zen Cart integration only handled signup on the account creation page. Now users may subscribe or unsubscribe on the newsletter page (which is linked to on the My Account page as /index.php?main_page=account_newsletters.
  • Removed double opt in:
    At the request of ecommerce companies, MailChimp has changed the default subscribe behavior so that double opt in is no longer required.  Users who prefer the prior behavior can still change it back by modifying the PHP API (includes/functions/extra_functions/mailchimp.php) to set status based on $options[‘status’] rather than just to subscribed.
  • Moved MailChimp error log to /logs folder:
    In the event of an error, the MailChimp.log file was being written to the /cache folder; it is now written to the /logs folder where it is more likely to be noticed (since most logfiles have been migrated there in Zen Cart 1.5+).

You can see the updates in my ZenCart MailChimp and ZenCart Newsletter Discount contributions, and  my MailChimp Integration for Zen Cart GitHub repository.

PayPal’s New Download format – Big Red Consulting to the rescue!

If you are importing PayPal transactions (from your Zen Cart!) to Quickbooks using PayPal to QB Link from Big Red Consulting, you need the new version of this software to deal with Paypal’s new download format!  PayPal finally did away with their legacy downloader (and its associated format), and now all users must use the new download interface.  This is a new change; as recently as Oct 1, 2018, I was able to use the Legacy downloader.

Grab the updated PayPal to QB Link (sometimes just called PayPal Link) here: http://bigredconsulting.com/latest-version-info/

You will need to re-import your QB lists and modify the download format within PayPal, but the documentation will lead you through all of this.  BIG UPS to Big Red Consulting for being 100% prepared for this PayPal change!

Printing Mailing Labels from Salesforce

Thanksgiving and Christmas are just around the corner – would you like to send cards to your customers?  Doing this with Salesforce and a Dymo printer is quite straightforward.

You may want to create a new field in your Contacts account that allows you to mark customers who should receive cards.  I have a Status field that allows me to find customers who have a Support agreement with me, and I select on that basis.  (If you’re unsure how to add a new field to an object, watch this video from Salesforce.)

In Salesforce, go to Reports->New Report.   Select “Accounts & Contacts,” and use the report type “Contacts & Accounts.”   Update the columns so you use the following fields:

 

First Name Last Name Account Name Mailing Street Mailing City Mailing State/Province Mailing Zip/Postal Code

If required, you can also add Mailing Country.  Once you have all your fields selected, use filters to reduce the list to only the contacts you want, selecting on the field you used to determine if the contact gets a card.  In my case, that would be the Status field.  Then do an Export, and choose “Details Only” with format CSV.

In the Dymo Label app on your computer, use File->Import Data->New.  The default label is Address Barcode on Top, but you can change this if you like.  I like the address label without a barcode.  Select your data file (the CSV you just created from Salesforce), and click Next.  On the “Arrange Data Fields on the Label Layout” page, check the box labelled “Use first row as field names.”  To create the label, you just double click on each field, and lay it out on the label.  By the time you’re done, you should have something like this:

Dymo label for Salesforce Contact

Now just print them out and get cracking on those holiday cards!

From Zen Cart to Salesforce – Handling Accounts

Unlike most B2C e-commerce systems, Salesforce makes a distinction between Contacts, which are identified by an email address, and Accounts, which are identified by a name and site.  Contacts belong to an Account, and an Account may have many Contacts.

The way I handled this relationship in the first version of  Zen Cart to Salesforce was simply use the email address as the Account name. This has a significant advantage, since the email address for a shopping cart account is an immutable field.

However, some larger customers have multiple email addresses associated with a single account.   Also, some customers had e-mail address changes over the life of their relationship with me.

For these reasons, I decided to add a “salesforce_account_name”  field to the customers table.  I populate this only in cases where the email address is not sufficient.   I also had to modify the customer export script to export that field rather than the email address in the Account column of the CSV when it was set.

This new way of handling Accounts is reflected in the 360 Sales Reporting modification I did, to get more accurate per-account sales data.