If the owner of the opportunity is responsible for 70% of the proposed revenue, and one team member is responsible for the other 30%, we would like to see their respective pipelines reflect their contributions. Currently the owner receives 100% of the proposed revenue in their pipeline. Is there another way to manage this within the base CRM product?. If not, our thoughts were to add a column in the sales team entry function for "split"
As far as I know CRM lacks any native "split" functionality, so you are on the right track to build it yourself. On your sales team entity you can add the split % field and then choose a way to do the necessary math.
Options could include:
Out-of-box calculated fields.
JavaScript (will only work on the form, not for imported or integrated records)
Business rules
Use a workflow tools add-on such as Aiden Kaskela's Workflow Elements or Jason Lattimer's Numeric Workflow Utilities. Andrew Butenko's Ultimate Workflow Toolkit has some very useful things but I'm not sure if has a math module.
Write your own custom workflows or plugins to do the math.
One piece of logic you'll need is to ensure that the split across the sales team totals 100%.
Related
What is the DDD way of handling the following scenario:
user enters Order Create screen and starts creatingnew Order with OrderItems
user chooses ProductX from products catalog and adds quantity
OrderItem for ProductX is created on Order and user goes on adding another product
in the meantime, before Order is saved, admin changes price for ProductX
Assuming Product and Order/OrderItem are separate aggregates, potentially even separate bounded contexts, how is this handled?
I can think of several options:
optimistic concurrency combined with db transactions, but then if we broaden the question to microservices where each microservice has its own db - what then?
joining everything into one giant AR but that doesn’t seem right.
introduce a business rule that no product prices are updated during the point of sales working hours but that is often not possible (time triggered discounts, e.g.)
What is the proper DDD/microservices way of solving this?
What is the proper DDD/microservices way of solving this?
The general answer is that you make time an explicit part of your pricing model. Price changes made to the product catalog have an effective date, which means that you can, by modeling time in the order, have complete agreement on what price the shopper saw at the time of the order.
This might introduce the concept of a QuotedPrice as something separate from the Catalog price, where the quote is a promise to hold a price for some amount of time.
To address this sort of problem in general, here are three important papers to review:
Memories, Guesses, and Apologies -- Pat Helland, 2007
Data on the Outside vs Data on the Inside -- Pat Helland, 2005
Race Conditions Don't Exist -- Udi Dahan, 2010
I think one way to solve this through is Events. As you said, Product and Order can are very least separate aggregates, I would keep them loosely coupled. Putting them into one single aggregate root would against Open/Close and Single Responsibility Principle.
If a Product changes it can raise a ProductChanged event and likewise of an Order.
Depending on whether these Domain-Objects are within the same service or different service you can create a Domain-Event or an Integration event. Read more about it here.
From the above link:
A domain event is, something that happened in the domain that you want other parts of the same domain (in-process) to be aware of. The notified parts usually react somehow to the events.
I think this fits perfectly to your scenario.
I have a list of opportunity product lines associated to the opportunity. The products in the opportunity lines are labor based, engineering services. For projecting resource requirements I want to add two fields to my opportunity entity.
Total Labor Effort
This field would be populated by the total quantity of all "labor based" products in the opportunity product lines.
Weighted Labor Effort
Same as Total Labor Effort, except the value will be multiplied by the probability of closing the deal. This is a separate custom field in the opportunity.
I have tried a roll up field, but I can't seem to get it to sum up the quantity of the products in the product lines. It will only look at the product lines themselves. Calculated field seem to be more limited even.
What features of Dynamics CRM could help me achieve this?
If I could add my 2 cents,
There is indeed rollup field limitation here.
Now I could sense 2 ways to achive this.
Dynamics-365-Workflow-Tools
Reason been, this is well documented and up to date with latest CRM Version and especially fucntion query Values
If you don't want to add overhead of adding any 3rd party solution may it be free of cost, I would move my logic to Plugins i.e custom c# code to perform operations (server side)
I personally would go for custom code, you have more control of what you want to achieve there.
I recommend using Kaskela Workflow Elements, a free workflow extension that can query the opportunity products and return the number of line items: https://kaskelasolutions.com/current-query-get-results/
After you import Workflow Elements, you will need two workflows:
1. one that is started whenever a product line item is created /modified/deleted and it will update a "trigger" field on the opportunity, such as a "date detail changed"
2. one on the Opportunity that will count the detail lines.
In the 2nd workflow, use the "Query - Get Results" feature
You will need to create a FetchXML query to get the Opportunity Line items - you can use Advanced Find to create the query. This looks a bit strange because you create the query using the child records and link back to the parent opportunity, but this is how Kaskela filters the results to just the Opportunity Lines that are related to the opportunity.
The next step in your workflow is to insert the results into the opportunity record:
Ultimately I solved this using MS Flow to retrieve all the Opportunity Line from an "updated" Opportunity and summing them up before finally writing to the Opportunity field. For weighted value I made a simple calculated field based on the close probability and total labor effort.
MS FLow Screen Shot
When employees log in through
site.com/employees/login
They get to access the vendor_companies table through
App\Models\Employee\VendorCompany Model
When vendors log in through
site.com/vendors/login
They get to access the vendor_companies table through
App\Models\Vendor\VendorCompany
Is this approach ok?
Although having a single model is most common, what you have is fine. There are times when you want to do customization in one model depending on how you want to treat Vendors. Two different models allow you to have a cleaner separation and makes it easier to maintain functionality, especially between two teams - one team that builds vendor features vs. other team that builds features for employees.
When you build your controllers, you will have to put additional effort to identify whether you are dealing with vendor or employee and then call the appropriate model.
On the flip side, it is common to have a single model and you have customization based on vendor or employee. Give your method a shot and try your methodology.
I am currently leading the implementation of Office 365 for a crowdfunding portal for a UN agency. The portal features stories of survivors of human trafficking. Their cases are generated in Dynamics (for various reasons) and published to the user-facing platform. Each case comprises of a collection of records including various text fields which contain individual story points.
The problem: Those survivor stories are usually generated by teams on the ground but can be diplomatically sensitive.
As such each case needs to go through an elaborate review process to ensure that higher ups can propose changes to the case, make comments for specific fields. Each field can have several (1:n) comments/ change suggestions from n staff (not just one).
It was proposed to collate feedback in a field called 'comments' but this separates the input from the fields the comment was made about. We are now looking for a solution that emulates Word's 'tracking changes' feature.
Options considered but ruled out:
We are aware that Dynamics comes with an audit history module, but this usually requires changes/ comments to be displayed in a separate window which defeats the purpose.
Is anyone aware of a useful workaround which accomplishes one or several of the below:
Flags changes in a particular record per record and next to said record
Allows for said changes to be accepted or rejected by the Case owner
Supports workflow integration and user hierarchies.
Works in Dynamics (not Sharepoint... ... ...)
Any advice would be highly appreciated.
While I am all for creative uses of CRM, and CRM can store the data you're looking for, using CRM as a collaborative document editing system might be pushing the envelope.
Before you build out a custom document editing system, you might want to consider reviewing SharePoint, and some of the other document management add-ons that exist for CRM. While I have not implemented it myself, I have heard good things about LaserFiche.
You might also want to look into a 3rd party editor that provides "track changes" capabilities that you can embed in a web resource on the Case form.
I took a quick look and found this LoopIndex LITE plugin for CKEditor.
If you do go the custom route, here's a potential design for capturing the comments on a field-by-field basis:
Each field could have a separate text box where a user can enter a new comment about that field. A workflow could take that comment, turn it into a new "comment" record which would include the user, timestamp, and text. The workflow would also clear the box for the next comment.
You might also want to have this text box hidden by default for each field and have a checkbox called "Add Comment" (again for each field), which would show the new comment text box.
And you could consider having the new comment text box automatically populate with the original text, so the user can edit it rather than from start from scratch. This could be optional via an "Edit original text" checkbox or button.
To get really fancy you could run a text diff module to compare the updated text and the original, and store the new text as HTML, highlighting the differences.
The approval process would work off the "comment" entity. People could review each comment and approve or deny, with additional "meta-comments".
You could then have a web resource that would compile all existing comments for the field into html and display them under the field, formatted based on their status (i.e. pending review in black, denied in red, approved in green).
While I think this approach can be effective, adding a new field to the survivor's story would have some overhead. Another approach would be to create a Story Field entity and a Story Field Type entity. Let's say there are 5 fields now in the survivor's story. When you populate a story into CRM you'd create 5 Story Field records, each with its appropriate type. And, the Story Field entity would have a 1:N to Comments. This way, adding a new field to the survivor's story template is as simple as adding a new Story Field Type.
My proposal:
Use CRM incident entity or any custom entity as now hierarchy data can be maintained.
Parent incident is field collected record & child incidents can be used for tracking each feedback / comments / change requests from officials.
Build a custom approval mechanism using actions/workflow/plugins based on your team skill set. This can be invoked based on BPF stages in child Case.
On approval (child case closures) the values / comments can be rolled up / incorporated to the parent incident record.
Note: Multiple parallel feedback for overwriting changes can be a challenge, but approval business process flow should take care of this scenario.
I was using the Rally Tree Grid app found here:
https://github.com/Echo3ToEcho7/RallyTreeGrid
I was able to add the task time spent and task actuals column for my task, but i have been unable to get the sum of theses items to roll up to the user story, feature, initiative or theme level in this view. Would anyone be able to assist thanks?
Per WS API object model TaskEstimateTotal, TaskRemainingTotal, TaskActualTotal exist on UserStories (HierarchicalRequirement). Those fileds do not exist on Tasks. Tasks have Estimate and Actuals attributes. I assume when you say "TaskActualTotal populate on the tasks" you mean Estimate or Actuals populates on the tasks.
There is no attribute on PortfolioItem object in WS API object model where tasks esimates rollup to PI, or where TaskEstimateTotal, TaskRemainingTotal, TaskActualTotal of the associated user stories rollup to PI.
It is possible keep a count of TaskActualTotal values on stories and sum them up in your javascript code, but there is no shortcut, and that works with Rally.data.custom.Store.
PI object has a LeafStoryPlanEstimateTotal attribute which is a sum of the plan estimates of all leaf user stories (stories without children) associated with this Portfolio Item.
I've been trying to get similar data (cost of porfolio items in terms of task estimates and timespent from timesheet), but it seems that there is no easy way.
even though i can get custom reports for tasks, timespent from timespeet, user stories etc, There isn't a custom report capability to get portfolio information.
I've created and Idea / Feature request for something that does this or atleast makes it possible, Feel free to vote it up to get visibility on it to the Rally team
https://ideas.rallydev.com/ideas/D3120