Posted on

Changelog – January 3rd, 2022

Multiple Pickup Days for Depots

A Depot can now take on attributes of a region by allowing the admin to define multiple pickup days per depot. Additionally, the customer can control which day the order is assigned on checkout. This day can be selected via the Depot dropdown and the recurring order will stay locked to that day as it is processed.

Off-Day Calendar

A site can define off-days for when no deliveries can be scheduled. This affects the calendar options so that the dates are greyed out, the nearest delivery date takes the off days into account, and orders that recur on these dates will move to the next one.

Buildings: PDF Documents

Each Order for a building is presented with a customer-facing link depending on which status the order is in. An order can have two document signings; one for a quote, and one for a delivery. These can be viewed by anyone, logged in or not, and notifies the customer and updates the order when signed and completed.

  • Structuring

Add Address from WP User

When existing sites get migrated and their users don’t have customers, particularly their admin users, a customer can be generated from their WP Users tab. However, this never migrated their existing billing and shipping addresses over with it.

Now when a Customer profile is created from a User, both addresses will be generated as well, only if both exist. If both are the same, only one address will be created.

Allow Removal of All Payment Methods

To prevent customer from placing orders for future dates and then removing their payment methods, at least one payment method is required at all times. In order to delete a payment method (expired, fraud, closed), a replacement must be added first.

This toggle allows customers to remove all payment methods at any time. The use case was for clients that need to pay their monthly service bill but not store saved credit cards, even though they are tokenized.

Allow No Default Payment Method

Previously, only admin could remove an account from being auto-charged. Customers did not have the ability to remove the payment method assigned to an address. Even if admin unassigned it, any edit from the customer would assign it again because they don’t have another option. This toggle allows customer to unassign the payment method saved to that address.

Note: this does not mean removing the payment method. This only means disabling it from being auto-charged. One use case was for customers that want to add a payment method, but not have it auto-charge so that they could pay on their own terms, frequency, or amount.

Email Bounces/Errors Return to Sender

Email notifications, such order reminders and invoices, are occasionally sent to addresses that don’t exist, are misspelled, or rejected by the client. These previously went to a catch-all bucket. They will now be forwarded back to the originating sending address.

Box of Good Overview Report

Previously, the Box of Good Overview Report was locked into periods of weekly snapshots. It also showed intervals previous week’s alongside it, matched to a Sun-Sat range.

Now the report will pull whichever range of dates selected. The only caveat is that ranges of months or more become very time-consuming and resource-intensive; i.e. it’s better to do a few monthly snapshots that one quarterly snapshot.

Schedule Auto-Map Orders

Each site may have different rules and timing for processing, fulfilling, mapping, and delivering orders. The orders can now be scheduled to be mapped at a specific time of day to guarantee that action happens after any previous editing steps that are required.

Posted on

Changelog – November 14th, 2021

Gift Cards

This is an inherently tricky feature because of restrictions around delivery days, regions, logged in or not, payment, and recipient notifications. I have added additional confusion because of differing features and processes between the core Gift Card plugin, what was already built last year, what was added this year, and what we’ve built for other systems. So this is to clear all that up, especially going into the holiday season.

  • Gift cards can be purchased by both new and existing customers.
  • New customers do not have to be in the delivery area. Address lookup and region validation will be skipped, and a normal checkout will proceed.
  • Existing customers will not go through the checkout. They will “Add Items to Order” as usual.
  • When a gift card is “Added to Cart”, the page will reload and any more gift cards can be added with their own parameters. They parameters are per-gift-card, not per-checkout.
  • When the order is submitted, any gift card product(s) will be separated from other produce items (if any), and put on their own dedicated order. This is for two reasons: 1) Gift cards don’t need to wait for their address delivery day to be generated, and 2) the amount of the gift card needs to go on the purchaser’s balance right away.
  • Many gift cards can be on one order and checkout process. The send date is functional, and each card can have its own send date (I previously said it was not), and individual recipients in the same order. Even though the order will be processed right away and the amount of the order put on their balance, the recipient will not be notified until the “Send Date” that was selected for each card.
  • Any other non-gift card products on that order will be processed as usual.
  • The amount of the gift cards will be put on their balance immediately, but the payment transactions will be processed on their usual schedule.
  • Existing customers can redeem their gift cards in their My Account -> Gift Card tab.
  • New Customers can redeem their gift cards on the checkout page.

Customer Product Search

Adding Products from the Customer My Account has been rebuilt to accommodate new needs and to fix a couple glitches. The default search functionality matched text in all the fields of a product: Description, Title, Attributes, Short Description. This created issues such as a search for “Family” on Box of Good would surface Beef Shares, Chicken, and Coffee, or a search for “Spread” would return all the bagels, because that search term was in the Description.

  • This new Search has been completely rebuilt to remove the WordPress search and provide our own filtering, based on title alone.
  • The result of the search now also notifies the user when there are no matches for the search term. Previously, it just did…..nothing.
  • It is also possible to add category-level or attribute-level search.

IdeaRoom: Signature Documents

We have reconfigured the signature process to accommodate new requirements. Previously, the signature was embedded into the page which needed it, as a popup window. This worked well when it was one signature on one page for one building type. As the options have expanded, we have multiple signatures on each order for specific statuses and differ between building types. Rather than manage how each of those appear now or could appear later with each client, and port the signature code around each time, we have changed the model from many signatures on many pages with many types of buildings, to just one signature page for each type. This is better long-term for us to maintain, improves mobile-viewing, allows customization between clients and better integration with their theme, and improves the process of getting content into a unified PDF.

  • Structuring the signature in this way also allows us to collect signatures both by logged in users and those not logged in. An email or text can be sent to a customer with a link to collect the signature. A customer doesn’t have to be logged in for their signature to be collected and tied to that order.
  • To-Do: Display the Order Details between the policy language being signed, and the actual signature
  • To-Do: Save Policy Messaging, Order Details, and Signature as one PDF.
  • If a delivery requires a Proof of Delivery (from the mobile camera, or uploaded via desktop), the preview will be shown before being uploaded.

Delivery Portal Link Without Workwave

The Admin Customer Orders tab has a link to the delivery portal when a stop number has been assigned. However, when Workwave is not present, no stop number is assigned, thus making it difficult to get to the Portal. This is particularly hard during demos with sheds and carports, when vehicles are not auto-assigned.

This fix provides a quick link to the vehicle portal on the delivery day for any order that has a vehicle assigned to it.

  • If a site has “Auto-assign” vehicles enabled, the button will appear as soon as the order is created.
  • Otherwise, the vehicle must first be assigned either through Fulfillment -> Assign Vehicles or manually via the Edit Order screen.

Order Processing Date Range

The Order Processing previously only allowed movement across time in one-day increments. This was particularly problematic for non-weekly delivery customers like malts or sheds, where the order they are fulfilling determines the day or range they are working on, rather than the day determining which orders to work on. Delivery customers are constrained to a more predictable operation that always works on “tomorrow”.

This provides a calendar to traverse the month and jump around to any date, past present or future.

Activity Tab Improvements

The admin Customer Activity Tab is a raw dump of almost any activity that occurs on a customer’s account. The tricky part is that data spans across a lot of objects, events, and assets with changing properties. This meant that a lot of the data being shown wasn’t very human-friendly, and either large numbers or empty fields. This update adds context to most of the results that will show up in Activity, particularly around products and addresses. The address titles are the First Name and Last Name to know which address was edited, and an edit to a product shows the title alongside which data was changed (price, date, discount, etc.).

Reports: Vendor Sales

Sheds clients use “Vendors” as their warehouse to differentiate which shed was sold from which location. Box of Good uses it for produce vendors, and any site can use it to track product data.

Reports: Affiliate Sales

Affiliate sales are used by a few sites. Commission amounts are set as a percentage on each Affiliate.

  • Lakeside for tracking student sales (in addition to having their own customer reports)
  • Tampa for tracking sales between their sales people
  • Box of Good for the PTO/PTA sales

Fulfillment: Multiple Category Search Filter

The Fulfillment filter for Product Category previously supported only one search term at a time. This updates the filter to allow as many categories as necessary.

  • Handy for reporting on sites like Lakeside with donations vs. flowers, or both.
  • Also makes it convenient for placing orders for products that span many categories but come from the same vendor (i.e. UNFI).
  • Separating buildings (sheds, carports, gazebos) from parts (doors, hinges, ramps), but grouping more than one building type or part type in the same report.

Posted on

Changelog – October 23rd, 2021


  1. Billing vs Shipping Addresses
  2. Order Item Refunds
  3. Order Status Colors
  4. Mobile-Friendly(er) Admin Edit Customer
  5. Automated WA State Quarterly Tax
  6. Editable Customer Payment Amounts
  7. Map Zoom Level Slider
  8. Disable Customer Order Editing
  9. IdeaRoom: Customer Signature
  10. IdeaRoom: Refactor

Billing vs Shipping Addresses

It is now possible to differentiate the billing address from the shipping address. This does not affect payment of an order, or whether a card will be charged. It’s purely for communication.

  • Each address can now be defined as the Default Billing or Default Shipping.
  • No change is made to any existing orders.
  • The shipping address is still the default billing address, until a default billing is explicitly assigned on the Addresses tab.
  • Each Order has a new “Set Billing” in the Order -> Edit dropdown.
  • When that is set, both shipping address and billing address appear on the order.

Order Item Refunds

This provides feedback on which items have already been refunded in an order, and restricts items from being refunded multiple times.

  • A negative Adjustment is created with the title of the product and the amount.
  • The Activity Log records which administrator performed the refund and when it occurred.

Order Status Colors

WooCommerce color coordinates order statuses for quick visual confirmation of order status. Each site uses order statuses differently, i.e. only sites that charge orders on checkout can reach “failed” status.

Still To Do: Provide consistent color rules for CAL custom statuses; routed, delivered, etc.

  • Pending (created, unpaid) – Grey
  • Processing (paid for) – Green
  • Failed – Red (only sites that charge orders)
  • Completed (delivered) – Blue
  • Others will be added for Shed order status flow

Mobile-Friendly(er) Admin Edit Customer

Some of the order editing features were not accessible on a mobile device because they overflowed off the right of the page. This page will always be desktop-first, as that is how it’s used primarily and it’s content-creation not content-consumption, but the content is now all visible and functional for mobile. Making an order and all its items mobile-first would either require wrapping each column of the order vertically (creating 8 rows for every item for every order), or hiding some columns of the order table, which would make editing orders more difficult. We opted for leaving the size of the order and its items the same, and providing a horizontal scroll, which is natural with a finger swipe on mobile.

  • Each tab is constrained to the window size.
  • Tabs that are wide (orders, primarily) move horizontally.
  • Multiple orders scroll together in sync; i.e. you don’t have to scroll over for one order, then the next, then the next, etc. They all scroll together.

Automated WA State Quarterly Tax

Tax rules are comprised of two pieces. Calculating tax rates are based off WooCommerce tax tables. Reporting tax codes to the state are based off CAL Addresses. WooCommerce doesn’t know about, nor support, tax codes. They are simply tax rates based on zip codes, but tax is remitted based on tax codes provided by the state.

  • The tax rate that calculates the dollar amount that actually gets paid by a customer on an order is from the WooCommerce tax tables. Those need to be updated manually every quarter (or so; few rates change each quarter).
  • The tax rate and code on a CAL address is used to calculate what to remit to the state for each code.

Editable Customer Payment Amounts

Toggle the ability for customer to choose a transaction amount against their balance. Originally, only the entire balance could be paid with a manual transaction from the customer’s My Account. This update provides a toggle in CAL -> Settings -> Payments.

  • If it’s toggled off, a customer can only pay for the entire outstanding balance.
  • If it’s toggled on, any amount greater than $0.00 and less than their balance can be paid, as many times or as often as needed.
  • This is a site-wide setting, meaning it is not on a per-customer basis.

Map Zoom Level Slider

Some clients serve a very specific region (Puget Sound, Los Angeles, Boise) and need their map to cover the deliverable regions by default. Others are not so specific and serve a much larger area or offer shipping, and thus need the map show the whole country when loaded. The slider controls every map that CAL uses: address lookup shortcode on home pages, checkout page, My Account Edit Address, Admin Add Customer, and Admin Customer Add Address.

  • Sliding to the right will zoom in more, using the lat/lng as its center point.
  • Sliding the the left will zoom out.

Disable Customer Order Editing

It is now possible for a CAL client to disable order editing by their customers. It isn’t a toggle in the admin (yet), but will become that. For now, it is a series of filters to make the customer My Account view-access only. Once an order is placed, it can not be removed or edited, regardless of the order cutoff or delivery day.

IDEAROOM: Customer Signature

In addition to requiring a signature upon delivery (from the delivery portal as admin), many clients will also require a signature for the quote. This enables a Signature requirement from the purchaser of the building so that it can be accepted on the customer’s device on the customer’s time.

  • The Signature can be required on any order status.
  • For each order status that it is required, the signature option is removed when it’s complete.
  • Client-specific messaging, concerning what they are agreeing to with their signature, could be added in the popup window for each specific order status.

IDEAROOM: Refactor for multiple clients in one CAL

While it was just Tampa Sheds using the IdeaRoom integration, it was easy to know what the domain was that was hosting the configurator, and which pages were defined for each type of configurator. CAL needs to know about each configurator instance that IdeaRoom is hosting and where, so that when a building is edited, it can open the right IdeaRoom instance and unique building hash value. CAL also requires custom theme templates to make the configurator full-screen, rather than inside the margins as a frame within the larger window. With each new configurator instance, staging or production, we originally had to create a plugin for each client to control their IdeaRoom setup. This refactor makes it possible for anyone to set, change, and update, where configurators are on the site, which types of buildings (sheds, barns, carports, etc), and what their IdeaRoom account IDs are to load the configurators, and where to send someone to edit a building. Previously, it was hardcoded to a specific theme template, page ID, and configurator ID. Those are now editable by any administrator, so page URLs can be unique for any client.