close ad
WARNING PC USERS: Do Not Install the DREAMWEAVER CC 2017 Update »
open ad
View Menu

Technical Support Forums

Free, outstanding support from WebAssist and your colleagues

rating

excluding certain products from delivery calculation

Thread began 9/06/2016 4:44 pm by Christopher West | Last modified 9/13/2016 6:55 pm by Ray Borduin | 819 views | 13 replies |

Christopher WestCommunity Expert

excluding certain products from delivery calculation

Hi ok, I have set up a delivery calculation page (this page is hidden from customers as its function is to perform a recordset lookup and then create a session which is then used in the ecart object.

a sample of the code is:

php:
<?php

$rsDeliveryCost 
= new WA_MySQLi_RS("rsDeliveryCost",$ecartdb,1);
$rsDeliveryCost->setQuery("SELECT * FROM shippingcosts WHERE ShippingCostZone = ? AND ShippingCostWeightTo <= ? AND ShippingCostSize <= ?");
$rsDeliveryCost->bindParam("s""".$rsShippingZone->getColumnVal("ShippingZone")  ."""-1"); //colname
$rsDeliveryCost->bindParam("s""".$eCart->DisplayInfo("TotalWeight")  ."""-1"); //colname2
$rsDeliveryCost->bindParam("s""".$eCart->DisplayInfo("TotalSize")  ."""-1"); //colname3
$rsDeliveryCost->execute();?>



as you can see I had created some additional properties in the ecart object so that I can use.

In my products tables I have 2 fields, the first is "ProductFreeDelivery" and the second is "ProductCollectionOnly" these store a value of either "0" or "1", So any products that have a value of "0" on either of these two table fields I want to exclude them from the shipping calculation.

I assume I have 2 different options:

Option 1 - Would be to do a recordset INNER JOIN to the above code to include my Products table and then I can filter out the two table fields in the above about recordset.

Option 2 - In the eCart Object, I would create 2 new properties in the "Columns" table which would store the two table fields as mentioned. With this I can then add two new lines to the above recordset, for example:

php:
$rsDeliveryCost->bindParam("s", "".$eCart->DisplayInfo("ProductFreeDelivery")  ."", "-1"); //colname2

$rsDeliveryCost->bindParam("s", "".$eCart->DisplayInfo("ProductCollectionOnly")  ."", "-1"); //colname3



And then use that some how to check for a value that doesnt equal "1".

Are there any other ways that are more logical?

Chris

Sign in to reply to this post

Ray BorduinWebAssist

I'd just put a weight of zero in the items that have free shipping, and then put a free row in your database for zero weight.

Sign in to reply to this post

Christopher WestCommunity Expert

Hi are there any alternative solutions, Im not sure if that solution would be good for me as I am also calculating delivery based on package size (not just weight).

Sign in to reply to this post

Ray BorduinWebAssist

There are a million ways you could do it.

Maybe add a column to the cart for "ChargeShipping" and set it to 0 or 1 based on whether you charge shipping or not, then add a calculation for "ShipWeight" = [Weight] * [Quantity] * [ChargeShipping]. Then you can use the total of that column when calculating the shipping which won't include the weights of items where you don't charge shipping.

That way you could use the total of the ShipWeight column to

Sign in to reply to this post

Christopher WestCommunity Expert

Hi Ray, I'm looking at a fresh approach (as before I was overthinking and confusing different approaches).

I'm almost there, I just need a little help finishing of the logic.

Here is what I have done

(1) In my products table in the database I have I have 2 fields;ProductFreeDelivery and ProductCollectionOnly (these are both tinyint value of 0 or 1)
(2) in my eCart object I have added 2 columns: ProductFreeDelivery and ProductCollectionOnly (im using Output type: Number)
(3) In my eCart object for Calculations I have included:
(A) TotalWeight = [Weight] * [Quantity] * [ProductCollectionOnly] * [ProductFreeDelivery]
(B) TotalSize = ([Width] * [Height] * [Depth]) * [Quantity] * [ProductCollectionOnly] * [ProductFreeDelivery]

(4) On my product page the Add to cart server behaviour I have matched the bindings for both ProductCollectionOnly and ProductFreeDelivery

So from the above setup the the weight is calculated with any products with a value of 1 in the products table fields.

Its a little backwards, because the logic suggests that if 1 is set for (ProductCollection or ProductFreeDelivery) in the products table then include that product in the weight/size calculation) So I would need to reverse the 0 or 1 value in my admin page when admin is setting for those. Does that make sense? I guess I should have used your naming convention that you suggested with "ChargeShipping" since then any product with value of 1 would mean charge shipping. But even though my naming convention is backwards, it still works I assume. I'm just seeing if there are any issues i haven't thought of?


Chris

Chris

Sign in to reply to this post

Ray BorduinWebAssist

It looks like that would work. Yes, that is why I suggested that particular column name originally.

Sign in to reply to this post

Christopher WestCommunity Expert

Its slightly giving wrong result:

My shopping basket is displaying weight of 20kg and size of 2000cm3
in my database for shipping costs I have set a price of £50 if the weight up to is 20kg and size up to is 2000cm3
However the delivery cost result on the page shows nothing.
If I change the below code to to use >= for both ShippingCostWeightTo and ShippingCostSize then it shows £50 as the delivery cost. But that doesnt make sense, since I am saying if my database value is more than or equal to the actual shopping basket value. I thought it should have been less than or equal to?

php:
<?php

$rsDeliveryCost 
= new WA_MySQLi_RS("rsDeliveryCost",$ecartdb,1);
$rsDeliveryCost->setQuery("SELECT * FROM shippingcosts WHERE ShippingCostZone = ? AND ShippingCostWeightTo <= ? AND ShippingCostSize <= ?");
$rsDeliveryCost->bindParam("s""".$rsShippingZone->getColumnVal("ShippingZone")  ."""-1"); //colname
$rsDeliveryCost->bindParam("s""".$eCart->DisplayInfo("TotalWeight")  ."""-1"); //colname2
$rsDeliveryCost->bindParam("s""".$eCart->DisplayInfo("TotalSize")  ."""-1"); //colname3
$rsDeliveryCost->execute();
?>
Sign in to reply to this post

Ray BorduinWebAssist

$rsDeliveryCost->setQuery("SELECT * FROM shippingcosts WHERE ShippingCostZone = ? AND ShippingCostWeightTo <= ? AND ShippingCostSize <= ? ORDER BY ShippingCost DESC");

Sign in to reply to this post

Christopher WestCommunity Expert

Hi this wouldnt work as ORDER BY ShippingCost DESC "ShippingCost" doesnt exist. Would this be ShippingCostValue? I did try that but it didnt return a value on the page.

I am attaching screenshot of my table in db

Chris

Sign in to reply to this post

Ray BorduinWebAssist

Yes ORDER BY ShippingCostValue

I would think that would work. Are you sure you are setting the values correctly? Try dumping the recordset to the page and see if the values are set correctly. Also try testing the SQL query in PHPMyAdmin to make sure the results look correct to you there.

Sign in to reply to this post
loading

Build websites with a little help from your friends

Your friends over here at WebAssist! These Dreamweaver extensions will assist you in building unlimited, custom websites.

Build websites from already-built web applications

These out-of-the-box solutions provide you proven, tested applications that can be up and running now.  Build a store, a gallery, or a web-based email solution.

Want your website pre-built and hosted?

Close Windowclose

Rate your experience or provide feedback on this page

Account or customer service questions?
Please user our contact form.

Need technical support?
Please visit support to ask a question

Content

rating

Layout

rating

Ease of use

rating

security code refresh image

We do not respond to comments submitted from this page directly, but we do read and analyze any feedback and will use it to help make your experience better in the future.

Close Windowclose

We were unable to retrieve the attached file

Close Windowclose

Attach and remove files

add attachmentAdd attachment
Close Windowclose

Enter the URL you would like to link to in your post

Close Windowclose

This is how you use right click RTF editing

Enable right click RTF editing option allows you to add html markup into your tutorial such as images, bulleted lists, files and more...

-- click to close --

Uploading file...