function CalculateOpportunityProductQuantity(executionContext) {
var formContext = executionContext.getFormContext();
var opportunityRecordId = formContext.data.entity.getId().slice(1, -1);
var globalContext = Xrm.Utility.getGlobalContext();
// Retrive unitwise product quantity data
var fetchXml = "<fetch mapping='logical' >" +
"<entity name= 'opportunity' >"+
"<link-entity name='opportunityproduct' from='opportunityid' to='opportunityid' alias='opportunityprod' >"+
"<attribute name='quantity' />"+
"<filter>"+
"<condition attribute='opportunityid' operator= 'eq' value='" + opportunityRecordId + "' uiname='Will be ordering' uitype='opportunity' />"+
"</filter>"+
"<link-entity name='uom' from='uomid' to='uomid' alias='unitdata' >"+
"<attribute name='name' />"+
"<attribute name='uomid' />"+
"<order attribute='name' />"+
"</link-entity>"+
"</link-entity>"+
"</entity>"+
"</fetch>";
fetchXml = "?fetchXml=" + encodeURIComponent(fetchXml);
Xrm.WebApi.retrieveMultipleRecords("opportunity", fetchXml).then(
function success(response) {
// Odata response value set into a json array
unitwisequantitys = [];
for (var i = 0; i < response.entities.length; i++) {
unititem = {}
unititem ["unitname"] = response.entities[i]["unitdata.name"];
unititem ["quantity"] = response.entities[i]["opportunityprod.quantity"];
unitwisequantitys.push(unititem);
}
// Quantity sum Group by Unitname
var helper = {};
var groupbyunit = unitwisequantitys.reduce(function(r, o) {
var key = o.unitname;
if(!helper[key]) {
helper[key] = Object.assign({}, o); // create a copy of o
r.push(helper[key]);
} else {
helper[key].quantity += o.quantity;
}
return r;
}, []);
// Get specific unit name quantity
let maunitquantity = groupbyunit.find(o => o.unitname === 'MA');
let qaunitquantity = groupbyunit.find(o => o.unitname === 'qm');
// Set the quantity value
formContext.getAttribute("qm_quantity").setValue(qaunitquantity.quantity);
formContext.getAttribute("ma_quantity").setValue(maunitquantity.quantity);
},
function (error) {
console.log(error.message);
}
);
}
Comments
Post a Comment