Sales order line workflows in Dynamics 365
Price control to maintain sales price compliance – something that seems like it should be supported out of the box in Dynamics AX or Dynamics 365 for Finance and Operations. Specifically, we’ve heard a number of companies say they want a way to review if a sales representative modifies a price that’s generated from a trade agreement when a sales order is created. While a simple report or list page reporting on order events might be useful for this, some people require a rigid workflow for review and approval.
Well, here’s a surprise for you. This type of functionality exists in the Retail module of Dynamics 365 for Finance and Operations (and AX 2012 R3, as well).
Setting up the retail module
Ugh. Retail. If you’re not a company with actual retail stores, you likely aren’t using the majority of the Retail module inside D365FO. Providing you have the Retail configuration keys enabled, though, this functionality is still usable in bits and pieces, but it’s a chore to set up to get it working. This blog post will discuss the absolute minimums, with all the quirks, to get this module setup to enable price change request workflows. There’s a cool video from Lachlan Cash going through this in AX 2012, but it doesn’t show all the details of setting up Retail if you haven’t used it before (link here).
Basically, what we’re going to be doing is using the call center functionality. In order to use the price override feature, you first need to be a retail channel user. In order to be a retail channel user, you first need to create a retail call center.
Create a call center
The first step is to create a call center. This is one of the quirks. Before we can do this, we’ll need some info codes setup with which to assign to the call center. The new call center form is kind of quirky, though, so we’ll want to set up the info codes before we create the call center.
Info codes are reason codes. The info code we eventually assign to the “Price override” will drive the drop-down of reasons a user can select to indicate why the price override is required. To create these, navigate to Retail>Channel setup>Info codes. Three info codes will be required.
They are can use the defaults that are populated when the record is created. The important field to point out is the “Input type” – this needs to be set to Subcode list. If not, the entry won’t be available when creating the channel. Additionally, to create the list values, select the PriceOverr entry and click the “Subcodes” button on the top of the form.
Once the info codes are set up, the channel can be created
Create a new call center
Again, we’re doing the most basic setup possible here – one call center is required for this functionality to work. To create a call center, navigate to Retail>Channels>Call centers>All call centers. This form is kind of buggy. When you create a new call center, it will take out a number from the retail channel number sequence and not give it back. Also, it will only give you info codes that have the subcode list “input type” to select from, so make sure everything is set up.
Navigate to the form listed above and create a new record. In the form that displays, enter all the setups we just recently created.
After creating this record, save it. Note, it’s here, with the “Enable order price control” parameter, that we indicate that pricing changes need to be tracked.
Each user that will be creating sales orders that needs to have pricing override functionality enabled will need to be added as a channel user. To do this, click the “Channel users” button in the “Channel” tab of the ribbon bar and add users as necessary.
Add the call center to an organization hierarchy
In order to properly assign the modes of delivery to the retail channel, the channel first has to be in an organization hierarchy (with the type of Retail assortment). Navigate to Organization administration>Organizations>Organization hierarchies and create a new record (called Retail assortment in this example).
Click the “Assign purpose” button. This will pop up a new form that has all the organization hierarchy purposes. Find and select the Retail assortment record. In the “Assigned hierarchies” pane, click the “Add” button. Select the Retail assortment hierarchy that we just created and click OK. Close the form.
We still haven’t included our call center in this hierarchy, though. From the above form, click the “view” button. Click the “Edit” button. Click the “Insert” button and select Retail channel. In the form displays, select the retail call center we just created and click the OK button.
Finally, click the Publish button. Assign an effective date and click “Publish”.
Setup modes of delivery for the retail channel
We have to specify which mode of deliveries are available out of each channel and which items can be delivered with the mode of delivery. If you don’t do this, you get an error when you save a sales order line that says “Mode of delivery is not valid for Item number”. This error indicates that the combination of mode of delivery on your sales order line and the item number that you’ve specified haven’t been assigned to the channel and the “Process delivery modes” job hasn’t been run yet. Here’s how these get assigned.
Navigate to Sales and marketing>Setup>Distribution>Modes of delivery. Select an appropriate mode of delivery (you will have to do this for any mode of delivery that these users will use) and click the “Add line” in the “Retail channels” fast tab. In the form that displays, make sure the Retail assortment organization hierarchy is selected, select the Default channel that we created in a previous step, and click the “->” button to move the record to the “Select organization nodes” section. Click the “OK” button.
You’ll also need to add products that can be sold through this channel. To do this, from the “Modes of delivery” form, click the “Add line” button in the “Products” fast tab. Note – if you want to add a large group of products, you can first add them to a Retail product category hierarchy and add the entire hierarchy at once.
Finally, we need to add the addresses or regions that the channel can supply. Navigate to the “Addresses” fast tab and enter a record similar to the screenshot below.
After the mode of delivery form is updated, a periodic job to explode these combinations out needs to be run. To do this, navigate to Retail>Retail IT>Process delivery modes. If you’ve updated a bunch of these addresses and product combinations, send it to batch. If not, just click the OK button and execute it on the client. Once this job is complete, you should no longer receive that message when adding a new sales order line.
Retail sales order line workflow
The final setup to enabling the price change workflow is the setup of the actual workflow. This workflow will be used to determine who to route the approval of the price change to. Again, since we’re keeping this as simple as possible, we’ll set up a real simple workflow.
Navigate to Retail>Headquarter setup>Retail workflows and create a new record for the Retail sales line workflow. In this workflow, we’ll just have a single approval step. After setting up the basic settings for the workflow, make sure the assignment on the step is to an appropriate user.
Once the workflow is activated, it should be ready to go.
Miscellaneous additional setups
There are a couple more things that need to be set in order for this functionality to properly work. First, in order to even allow price changes to a sales order entered against a retail channel, the “Allow price adjust” checkbox must be checked. If this checkbox is instead unchecked, users will not be able to edit fields related to pricing.
Secondarily, certain supervisors or managers can have the ability to change prices without needing to go through the workflow. Parameters can be set to control a margin threshold in which the prices need to remain. These permissions are assigned to security roles and are managed through the Retail>Channel setup>Call center setup>Override permissions form.
If you’d like the order to go on hold when a price change is made, in order to prevent someone from processing the order further, navigate to Retail>Channel setup>Call center setup>Call center parameters. On the “Holds” tab, the “Price override hold code” field will specify which hold code to automatically apply to orders that have had price overrides.
If you’d like to track when price overrides are made, who made them, and what the original prices were, make sure to turn on order events. These are setup in Sales and marketing>Setup>Events. To track them, make sure the “Sales line price override” field is checked.
Using the price override functionality
Now that everything is set up, when a channel user creates a new sales order, either from the “All sales orders” form or from the “Customer service” form, price control will be enabled. This means that, when a price is changed from the default, a user will have to specify a reason code to indicate why and send it through workflow.
To test this, create a new sales order from Accounts receivable>Orders>All sales orders and add the line referenced in the mode of the delivery setup above. After the record is entered, try overwriting the price in the “Unit price” field.
To set a reason code, enter a value in the “Reason code” field on the “Price and discount” tab in the “Line details” section of the form. Note – the options in the “Reason code” field came from our subcode list that we entered in an earlier step.
After making that change, if you have the default order holds enabled, an order hold will be added to the order. Also, you’ll see a warning icon at the very far left of the sale order line and notice that a workflow button up in the sales order header has appeared. Submit this change to workflow. After the appropriate user reviews and accepts the change, the order hold will be automatically removed and the order can continue to be processed.
Reviewing order events
If you’ve enabled the order events as I mentioned in the miscellaneous section above, you can review them from the order. To do so, click the “Order events” button in the “Sales order” tab of the sales order.
These can also be seen from Sales and marketing>Inquiries and reports>History>Order events if you want to review them all across all orders.
I tried to go through everything required and walked through it again in my VPC, but let me know if I missed something. There’s a lot of setups required here, but this functionality is pretty useful for people trying to restrict changes to published prices and have a second set of eyes on any changes that may happen.