I am extending Tea Commerce using the .NET API. Specifically, I am updating the price (UnitPrice) of the orderline to give discounts. As soon as I do this the product names of the products that had their price updated are blank. I see this both from XSLT and the order object in the javascript API. Any ideas why is this happening? Or what am I doing wrong? Thank you!
I am banging my head against the wall with this. Also, note, I am implementing pessimistic stock management (this works well) too. In WebshopEvents_OrderLineAdded (and "removed"), I am looping over all order lines and making a decision on what the discount should be and then setting the UnitPrice. I am doing something along the lines of:
for (int i = 0; i < order.OrderLines.Count(); i++)
{
tempLine = order.OrderLines.ElementAt(i);
if (tempLine.NodeId is a product category that gets a discount) //this is pseudo-code for simplicity
discountPrice = 49.95M;
tempLine.UnitPrice = discountPrice;
}
I have tried calling order.Save() when directly after I have applied the discount and at the end of this event (i.e. one update). As I said, I am managing stock values too. I do an order.Save() immediately after calling SetStock.
Playing with when and how many times I call order.Save() hasn't made a difference but to be clear. How should I use order.Save()? Does it matter if I call it multiple times? Or could it be that I am using a temp variable to hold the order line?
The order.Save() method is saving the order and everything in it to the database. BUT it will only save the things, that have been changed on the order. So if you change the UnitPrice on an order line only the order line will be saved. If you change a property on the order line only that property will be saved.
A few questions By product names, you mean an order line property? Is all order line properties left blank after your code has been run?
Maybe replace your for loop with a foreach like this:
foreach(var orderline in order.OrderLines){ //Do the magic }
Yes, I mean an order line property by product names. Only those order lines for which the price has been updated is the product name blank. Also, just saw that if I add/remove products the issue appears to correct itself though not reliably. It worked once when I added a product but then I tried to reproduce it and it took a couple add/removes before it fixed itself. But it did fix itself eventually.
I tried to use VS2010 to attach to a locally running IIS but the site was funky. Something about data page invalid. Not sure what the issue is with that so I added some additional logging and ToJson'd the order at different points. Look at nodeid 1362. Anything funny there? That is the discounted product and it doesn't have any of the "standard" properties. Only a custom one that I added which I only started doing today and the issue existed previously so it's not related.
It looks like the order your posted has order lines with properties. Isn't that correct? Which events are you hooked into with the Tea Commerce .NET API?
Those are the properties for nodeid 1445. Only products which have had their price changed (see earlier in this thread) have the issue. Here nodeid 1362 had it's price changed. These are the properties for nodeid 1362 (only 1 as opposed to 4):
I am doing the discounting in "added" and "removed". Those 2 events do the same thing as far as discounting goes. Also, I am managing stock levels in these 2 methods as well. That works great.
Price update destroys orderline properties?
Hi,
I am extending Tea Commerce using the .NET API. Specifically, I am updating the price (UnitPrice) of the orderline to give discounts. As soon as I do this the product names of the products that had their price updated are blank. I see this both from XSLT and the order object in the javascript API. Any ideas why is this happening? Or what am I doing wrong? Thank you!
Carlos
Hi Carlos,
Welcome to the Umbraco forum.
From your description I cannot say what is wrong. I'm doing exactly that in a few of my own e-commerce solutions and never ran into that.
You should try and run it on your local IIS and attach a debugger. Then you can step through it and see if anything weird happens.
/Rune
Hi Rune,
I am banging my head against the wall with this. Also, note, I am implementing pessimistic stock management (this works well) too. In WebshopEvents_OrderLineAdded (and "removed"), I am looping over all order lines and making a decision on what the discount should be and then setting the UnitPrice. I am doing something along the lines of:
for (int i = 0; i < order.OrderLines.Count(); i++)
{
tempLine = order.OrderLines.ElementAt(i);
if (tempLine.NodeId is a product category that gets a discount) //this is pseudo-code for simplicity
discountPrice = 49.95M;
tempLine.UnitPrice = discountPrice;
}
I have tried calling order.Save() when directly after I have applied the discount and at the end of this event (i.e. one update). As I said, I am managing stock values too. I do an order.Save() immediately after calling SetStock.
Playing with when and how many times I call order.Save() hasn't made a difference but to be clear. How should I use order.Save()? Does it matter if I call it multiple times? Or could it be that I am using a temp variable to hold the order line?
Thanks.
Carlos
Hi Carlos,
The order.Save() method is saving the order and everything in it to the database. BUT it will only save the things, that have been changed on the order. So if you change the UnitPrice on an order line only the order line will be saved. If you change a property on the order line only that property will be saved.
A few questions
By product names, you mean an order line property?
Is all order line properties left blank after your code has been run?
Maybe replace your for loop with a foreach like this:
foreach(var orderline in order.OrderLines){
//Do the magic
}
/Rune
Hi Rune,
Yes, I mean an order line property by product names. Only those order lines for which the price has been updated is the product name blank. Also, just saw that if I add/remove products the issue appears to correct itself though not reliably. It worked once when I added a product but then I tried to reproduce it and it took a couple add/removes before it fixed itself. But it did fix itself eventually.
I will try your foreach suggestion. Thanks.
Carlos
This is some enigma you have there :)
Best thing would be if you could debug it locally. If not, maybe try to debug it on the server by writing to the umbraco log.
Afterwards you can check the log in the database and se what is going on.
/Rune
Hi Rune,
FYI, foreach didn't help. I will try local debugging. Any other suggestions? Thanks.
Carlos
No, not before you have some more info. Just walk throught your steps in debug mode and check the values.
Also, you might want to check the properties in the Tea Commerce tables if you need to go all in on the debugging.
/Rune
Hi Rune,
I tried to use VS2010 to attach to a locally running IIS but the site was funky. Something about data page invalid. Not sure what the issue is with that so I added some additional logging and ToJson'd the order at different points. Look at nodeid 1362. Anything funny there? That is the discounted product and it doesn't have any of the "standard" properties. Only a custom one that I added which I only started doing today and the issue existed previously so it's not related.
Without further adieu here is the the JSON:
{
"Id": 596,
"Country": {
"Id": 2,
"Name": "United States"
},
"CreatedDate": "\/Date(1340251738283-0500)\/",
"Currency": {
"CultureName": "en-US",
"ISOCode": "USD",
"Id": 3
},
"IsOrder": false,
"MemberId": null,
"ModifiedDate": "\/Date(1340251764196-0500)\/",
"Name": "AMTA-596",
"OrderDate": null,
"OrderLines": [{
"Id": 2140,
"IsUnique": false,
"NodeId": 1445,
"Properties": [{
"Id": 6497,
"Alias": "nodeName",
"Value": "Month to month agreement"
}, {
"Id": 6498,
"Alias": "productName",
"Value": "Month to month agreement"
}, {
"Id": 6499,
"Alias": "productNumber",
"Value": "Monthly"
}, {
"Id": 6500,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}],
"Quantity": 1,
"TotalPrice": 0.0000,
"TotalPriceFormatted": "$0.00",
"TotalPriceFormattedNoSymbol": "0.00",
"TotalPriceWithoutVAT": 0,
"TotalPriceWithoutVATFormatted": "$0.00",
"TotalPriceWithoutVATFormattedNoSymbol": "0.00",
"TotalVAT": 0.0000,
"TotalVATFormatted": "$0.00",
"TotalVATFormattedNoSymbol": "0.00",
"UnitPrice": 0.0000,
"UnitPriceFormatted": "$0.00",
"UnitPriceFormattedNoSymbol": "0.00",
"UnitPriceWithoutVAT": 0,
"UnitPriceWithoutVATFormatted": "$0.00",
"UnitPriceWithoutVATFormattedNoSymbol": "0.00",
"UnitVAT": 0.0000,
"UnitVATFormatted": "$0.00",
"UnitVATFormattedNoSymbol": "0.00",
"VAT": 0.0000,
"VATPercent": "0"
}, {
"Id": 2141,
"IsUnique": false,
"NodeId": 1939,
"Properties": [{
"Id": 6501,
"Alias": "nodeName",
"Value": "312-216-5110"
}, {
"Id": 6502,
"Alias": "productName",
"Value": "aBusinessPhone"
}, {
"Id": 6503,
"Alias": "productNumber",
"Value": "312-216-5110"
}, {
"Id": 6504,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}],
"Quantity": 1,
"TotalPrice": 49.950000,
"TotalPriceFormatted": "$49.95",
"TotalPriceFormattedNoSymbol": "49.95",
"TotalPriceWithoutVAT": 49.95,
"TotalPriceWithoutVATFormatted": "$49.95",
"TotalPriceWithoutVATFormattedNoSymbol": "49.95",
"TotalVAT": 0.000000,
"TotalVATFormatted": "$0.00",
"TotalVATFormattedNoSymbol": "0.00",
"UnitPrice": 49.950000,
"UnitPriceFormatted": "$49.95",
"UnitPriceFormattedNoSymbol": "49.95",
"UnitPriceWithoutVAT": 49.95,
"UnitPriceWithoutVATFormatted": "$49.95",
"UnitPriceWithoutVATFormattedNoSymbol": "49.95",
"UnitVAT": 0.000000,
"UnitVATFormatted": "$0.00",
"UnitVATFormattedNoSymbol": "0.00",
"VAT": 0.0000,
"VATPercent": "0"
}, {
"Id": 2142,
"IsUnique": false,
"NodeId": 1362,
"Properties": [{
"Id": 6508,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}],
"Quantity": 1,
"TotalPrice": 79.950000,
"TotalPriceFormatted": "$79.95",
"TotalPriceFormattedNoSymbol": "79.95",
"TotalPriceWithoutVAT": 79.95,
"TotalPriceWithoutVATFormatted": "$79.95",
"TotalPriceWithoutVATFormattedNoSymbol": "79.95",
"TotalVAT": 0.000000,
"TotalVATFormatted": "$0.00",
"TotalVATFormattedNoSymbol": "0.00",
"UnitPrice": 79.950000,
"UnitPriceFormatted": "$79.95",
"UnitPriceFormattedNoSymbol": "79.95",
"UnitPriceWithoutVAT": 79.95,
"UnitPriceWithoutVATFormatted": "$79.95",
"UnitPriceWithoutVATFormattedNoSymbol": "79.95",
"UnitVAT": 0.000000,
"UnitVATFormatted": "$0.00",
"UnitVATFormattedNoSymbol": "0.00",
"VAT": 0.0000,
"VATPercent": "0"
}, {
"Id": 2143,
"IsUnique": false,
"NodeId": 1446,
"Properties": [{
"Id": 6509,
"Alias": "nodeName",
"Value": "12 month agreement"
}, {
"Id": 6510,
"Alias": "productName",
"Value": "12 month agreement"
}, {
"Id": 6511,
"Alias": "productNumber",
"Value": "Annual"
}, {
"Id": 6512,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}],
"Quantity": 1,
"TotalPrice": 0.0000,
"TotalPriceFormatted": "$0.00",
"TotalPriceFormattedNoSymbol": "0.00",
"TotalPriceWithoutVAT": 0,
"TotalPriceWithoutVATFormatted": "$0.00",
"TotalPriceWithoutVATFormattedNoSymbol": "0.00",
"TotalVAT": 0.0000,
"TotalVATFormatted": "$0.00",
"TotalVATFormattedNoSymbol": "0.00",
"UnitPrice": 0.0000,
"UnitPriceFormatted": "$0.00",
"UnitPriceFormattedNoSymbol": "0.00",
"UnitPriceWithoutVAT": 0,
"UnitPriceWithoutVATFormatted": "$0.00",
"UnitPriceWithoutVATFormattedNoSymbol": "0.00",
"UnitVAT": 0.0000,
"UnitVATFormatted": "$0.00",
"UnitVATFormattedNoSymbol": "0.00",
"VAT": 0.0000,
"VATPercent": "0"
}],
"OrderStatus": {
"DictionaryItemName": "",
"Id": 1,
"Name": "New"
},
"Payment": {
"DictionaryItemName": "creditCard",
"Fee": 0.00000000,
"FeeFormatted": "$0.00",
"FeeFormattedNoSymbol": "0.00",
"FeeVAT": 0.00000000,
"FeeVATFormatted": "$0.00",
"FeeVATFormattedNoSymbol": "0.00",
"FeeWithoutVAT": 0.0000,
"FeeWithoutVATFormatted": "$0.00",
"FeeWithoutVATFormattedNoSymbol": "0.00",
"Id": 1,
"MediaId": 1218,
"Name": "Credit card"
},
"PaymentStatus": null,
"Properties": [],
"Shipping": {
"DictionaryItemName": "",
"Fee": 0.0000,
"FeeFormatted": "$0.00",
"FeeFormattedNoSymbol": "0.00",
"FeeVAT": 0.0000,
"FeeVATFormatted": "$0.00",
"FeeVATFormattedNoSymbol": "0.00",
"FeeWithoutVAT": 0,
"FeeWithoutVATFormatted": "$0.00",
"FeeWithoutVATFormattedNoSymbol": "0.00",
"Id": null,
"MediaId": null,
"Name": ""
},
"TotalPrice": 129.90000000,
"TotalPriceFormatted": "$129.90",
"TotalPriceFormattedNoSymbol": "129.90",
"TotalPriceWithoutFees": 129.900000,
"TotalPriceWithoutFeesFormatted": "$129.90",
"TotalPriceWithoutFeesFormattedNoSymbol": "129.90",
"TotalPriceWithoutFeesWithoutVAT": 129.90,
"TotalPriceWithoutFeesWithoutVATFormatted": "$129.90",
"TotalPriceWithoutFeesWithoutVATFormattedNoSymbol": "129.90",
"TotalPriceWithoutVAT": 129.9000,
"TotalPriceWithoutVATFormatted": "$129.90",
"TotalPriceWithoutVATFormattedNoSymbol": "129.90",
"TotalQuantity": 4,
"TotalVAT": 0.00000000,
"TotalVATFormatted": "$0.00",
"TotalVATFormattedNoSymbol": "0.00",
"TotalVATWithoutFees": 0.000000,
"TotalVATWithoutFeesFormatted": "$0.00",
"TotalVATWithoutFeesFormattedNoSymbol": "0.00",
"Transaction": {
"PaymentAmount": null,
"PaymentAmountFormatted": "$0.00",
"PaymentAmountFormattedNoSymbol": "0.00",
"PaymentCardNumber": null,
"PaymentCardType": null,
"PaymentTransactionId": null
},
"UmbracoLanguageId": 0,
"VAT": 0.0000,
"VATGroupId": 1,
"VATPercent": "0"
}
Carlos
Also, the "standard" properties were there 4 seconds before in a previous entry.
Hi Carlos,
Looks to me like all your orderlines have 4 properties. Here's from one of the orderlines:
"Properties": [{
"Id": 6497,
"Alias": "nodeName",
"Value": "Month to month agreement"
}, {
"Id": 6498,
"Alias": "productName",
"Value": "Month to month agreement"
}, {
"Id": 6499,
"Alias": "productNumber",
"Value": "Monthly"
}, {
"Id": 6500,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}]
---
Or am I misunderstanding you?
/Rune
Hi Carlos
It looks like the order your posted has order lines with properties. Isn't that correct? Which events are you hooked into with the Tea Commerce .NET API?
Kind regards
Anders
Hi Rune,
Those are the properties for nodeid 1445. Only products which have had their price changed (see earlier in this thread) have the issue. Here nodeid 1362 had it's price changed. These are the properties for nodeid 1362 (only 1 as opposed to 4):
"Id": 2142,
"IsUnique": false,
"NodeId": 1362,
"Properties": [{
"Id": 6508,
"Alias": "mainProductLine",
"Value": "aBusinessPhone"
}],
Hi Anders,
I am hooked into:
WebshopEvents_AfterOrderFinalized
WebshopEvents_OrderLineAdded
WebshopEvents_OrderLineRemoved
I am doing the discounting in "added" and "removed". Those 2 events do the same thing as far as discounting goes. Also, I am managing stock levels in these 2 methods as well. That works great.
Carlos
Also, the discount is being applied based on that they have another product in their cart. Namely, nodeid 1446.
Carlos
Hi Carlos,
Do you have a page where we can see the problem in action? If you don't want to post it publicly you can e-mail it to us at [email protected]
Please tell us how to reproduce it as well
/Rune
Hi Rune,
I sent over the information you requested. Please confirm you received it. Thank you.
Carlos
Hi Rune/Anders,
Tea Commerce 1.4.3.0 BETA 6 appears to have corrected this issue for me. Thanks!
Carlos
Could you please mark your own answer as the solution for this question - thanks :)
Kind regards
Anders
is working on a reply...