OK. Here's a new SP. First off, I removed the link to the PayHist table, because that will only be the total sale. Then I made sure that the decimal was formatted correctly for the total amount. Additionally, MIN on the cost, as opposed to a MAX; this way the report represents the "Lowest" sell price, but the total will still show total sales. If you mark down items, this will help you see the current sell price. Here is the new SP. I have tested this on my system and checked the math. :)
ALTER PROCEDURE [dbo].[Smith_SR_TotalSalesByProduct]
@PortalId int,
@FromDate datetime,
@ToDate datetime
AS
SELECT p.ModelNumber,p.ModelName, min(od.UnitCost) as "UnitCost", sum(od.Quantity) as "TotalQty",
convert(money,sum(od.UnitCost * od.Quantity),1) as "TotalSales"
FROM Smith_StoreOrders o
INNER JOIN Smith_StoreOrderDetails od
ON o.OrderID = od.OrderID
INNER JOIN Smith_Products p
ON od.ProductID = p.ProductID
where o.deletedflag = 0 and o.portalid = @PortalId and o.orderdate >= @FromDate AND o.orderdate <= @ToDate
AND o.Status <> 'Cancelled'
group by p.ModelNumber,p.ModelName
order by totalsales desc