Well firstly, I forgot the @@
in the handler field. Script is working as needed.
I donāt know if it could be of use to anyone else, but hereās what Iāve done:
NOTE: THIS REQUIRES DIRECT MODIFICATION OF THE DATABASE. PROCEED AT YOUR OWN RISK.
For now, Iām using the āTagā field in product setup to store the minimum amount for commissioned sale (one could use this for commission amount as well).
Next, open your favourite IDE (SQL Server Management Studio, DataGrip, etc.)
Iām using SQL Server Management Studio (SSMS)
Navigate to your database:
When your database is selected, go to File->New->Query with current connection (or CTRL+N).
This will open a window with which one may execute commands.
Next is to create the view. A view is a like a virtual table. It doesnāt physically hold any data; itās more of a stored query that can be queried itself.
Copy the following into the new SQL query window:
CREATE VIEW v_cigarcommission
AS
SELECT
T.Id AS TicketId,
O.Id AS OrderId,
O.Quantity AS Quantity,
O.MenuItemName AS Name,
M.CustomTags AS Tags,
O.Price AS SalePrice,
MIP.Price AS MenuPrice,
CAST(M.Tag AS DECIMAL(16,2)) AS MinimumPrice,
O.CreatingUserName AS OrderUser,
CONVERT(DATE, T.Date) AS TicketDateShort,
T.Date AS TicketDateLong,
CAST((CASE WHEN (O.Price - CAST(M.Tag AS DECIMAL(16,2))) <= 0
THEN 0 * O.Quantity
ELSE ((O.Price - CAST(M.Tag AS DECIMAL(16,2))) * O.Quantity) END) AS DECIMAL(16,2)) AS Commission
FROM dbo.Tickets T
INNER JOIN dbo.Orders O ON O.TicketId = T.Id
INNER JOIN dbo.MenuItems M ON O.MenuItemId = M.Id
INNER JOIN dbo.MenuItemPortions MIPOR ON MIPOR.Name = O.PortionName AND MIPOR.MenuItemId = O.MenuItemId
INNER JOIN dbo.MenuItemPrices MIP ON MIPOR.Id = MIP.MenuItemPortionId
WHERE (T.IsClosed = 1) AND (M.GroupCode = 'Cigars') AND (O.OrderStates NOT LIKE '%Cstatus%');
Select the execute button or press F5. You should see "Command(s) completed successfully.
"
I use two scripts (Manage->Settings->Automation->Scripts)
The first is used to calculate the sum of commission per user:
Name: Cigar Commission Sum
Handler: @@CommissionSum
SELECT SUM(Commission) AS Commission
FROM v_cigarcommission
WHERE TicketDateLong > '{Start}' AND TicketDateLong < '{End}' AND OrderUser = '@1'
The second is for reporting total commission of all users for the report period:
Name: Cigar Commission Total
Handler: @@CommissionTotal
SELECT SUM(Commission) AS Commission
FROM v_cigarcommission
WHERE TicketDateLong > '{Start}' AND TicketDateLong < '{End}'
I use two reports:
The first shows only the current user and is available to all users via a report widget on the navigation screen:
[Commission Details:4, 1, 2, 2]
@{SETTING:CURRENTUSER}
@{REPORT ORDER DETAILS:O.MenuItemName,O.ExactTotal.Sum.desc:(ODI=True) AND (OU=$1)AND (MG=Cigars):{0}:,}
>|Qty|Total Sales
>>*** $1 ***
{REPORT ORDER DETAILS:O.MenuItemName,O.Quantity.Sum,O.TotalPrice.Sum.desc:(ODI=True) AND (OU=$1) AND O.MenuItemName="$2"}
>>Total Commission:||@@CommissionSum:$1
The second will list all users, cigar sales, and total commission:
[Sales by User:4, 1, 2, 2]
@{REPORT ORDER DETAILS:O.User.asc:(ODI=True):,}
@{REPORT ORDER DETAILS:O.MenuItemName,O.ExactTotal.Sum.desc:(ODI=True) AND (OU=$1)AND (MG=Cigars):{0}:,}
>|Qty|Total Sales
>> *** $1 ***
>{REPORT ORDER DETAILS:O.MenuItemName,O.Quantity.Sum.desc,O.ExactTotal.Sum.desc.Sum.desc:(ODI=True) AND (OU=$1) AND O.MenuItemName="$2"}
{REPORT ORDER DETAILS:' '+[O.PortionName],O.Quantity.Sum.desc,(([O.Price] * [O.Quantity]) - ([MT.Minimum Price] * [O.Quantity])).sum.desc:(ODI=True) AND (OU=$1) AND O.MenuItemName="$2":2}
>Total Commission for $1:||@@CommissionSum:$1
>>Total Cigar Commissions||@@CommissionTotal
The plan is in the future to use product tags to store said information, which is why the view contains custom tags.