Quantcast
Channel: Microsoft Dynamics CRM Forum - Recent Threads
Viewing all articles
Browse latest Browse all 79901

Plugins won't work when quote is created with different Price List

$
0
0

Hello guys, 

I have couple of plugins on the "quote" entity and they work just fine when the Price list is USD. When I create a new Quote, and set the Price List to something other than "USD", like "EUR" per say - I'm not allowed to create a quote product for this quote, and the error that I get is "ISV Code aborted the operation".


I know that this error is given when you have more than one plugin updating the same entity, but I don't use the pricelist for none of this plugins, except for one, that is not even triggered on create of quote, but on change of a yes/no field. 

Here is the code that is in that plugin:

 protected void ExecuteQuoteCreateOrders(LocalPluginContext localContext)
        {
            if (localContext == null)
            {
                throw new ArgumentNullException("localContext");
            }

            // TODO: Implement your custom Plug-in business logic.

            IPluginExecutionContext context = localContext.PluginExecutionContext;
            IOrganizationService service = localContext.OrganizationService;
            Guid quoteProductID = (Guid)((Entity)context.InputParameters["Target"]).Id;
            var serviceContext = new OrganizationServiceContext(service);
            ColumnSet set = new ColumnSet();
            set.AllColumns = true;
            var quote = service.Retrieve("quote", quoteProductID, set);

            if (context.Depth > 1)
            {
                return;
            }
            else
            {

                var customerID = (EntityReference)quote["customerid"];

                var customer = service.Retrieve(customerID.LogicalName, customerID.Id,
                    new ColumnSet() { AllColumns = true });

                if (quote.Contains("new_createinvoice"))
                {
                    var salesorderType = (OptionSetValue)quote["new_createinvoice"];

                    if (salesorderType.Value == 1)
                    {

                        string quoteName = (string)quote["name"];
                        string orderProductName = "Advance payment for " + quoteName;
                        var prepayedAmount = (Money)quote["new_prepayedamount"];
                        var advanceProductId = "14";
                        var salesorder = new Entity("salesorder");
                        salesorder["name"] = quoteName + " Invoice Order for the Prepayment";
                        salesorder["quoteid"] = new EntityReference(quote.LogicalName, quote.Id);
                        salesorder["customerid"] = new EntityReference(customer.LogicalName, customer.Id);
                        salesorder["pricelevelid"] = (EntityReference)quote["pricelevelid"];
                        salesorder["new_recommendedtotal"] = (Money)quote["new_prepayedamount"];
                        salesorder["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value);
                        salesorder["new_reloadflag"] = false;

                        var orderID = (Guid)service.Create(salesorder);


                        //Create the order detail
                        var orderProduct = new Entity("salesorderdetail");

                        orderProduct["salesorderid"] = new EntityReference("salesorder", orderID);

                        //////retrieve product

                        ConditionExpression condition = new ConditionExpression();
                        condition.AttributeName = "name";
                        condition.Operator = ConditionOperator.Equal;
                        condition.Values.Add("pc");

                        FilterExpression filter = new FilterExpression();
                        filter.AddCondition(condition);

                        QueryExpression query = new QueryExpression();
                        query.EntityName = "uom";
                        query.ColumnSet = new ColumnSet(true);
                        query.Criteria = filter;


                        // Query for the UOM

                        ConditionExpression conditionProduct = new ConditionExpression();
                        conditionProduct.AttributeName = "productnumber";
                        conditionProduct.Operator = ConditionOperator.Equal;
                        conditionProduct.Values.Add(advanceProductId);

                        FilterExpression filterProduct = new FilterExpression();
                        filterProduct.AddCondition(conditionProduct);

                        QueryExpression queryProduct = new QueryExpression();
                        queryProduct.EntityName = "product";
                        queryProduct.ColumnSet = new ColumnSet(true);
                        queryProduct.Criteria = filterProduct;


                        EntityCollection uomCollection = service.RetrieveMultiple(query);
                        EntityCollection productCollection = service.RetrieveMultiple(queryProduct);
                        //uom.Entities.F

                        var firstUom = uomCollection.Entities.FirstOrDefault();
                        var firstProduct = productCollection.Entities.FirstOrDefault();
                        //foreach (var product in uom.Entities)
                        //{
                        //    orderProduct["productid"] = product.ToEntityReference();
                        //}


                        //EntityCollection uoms = service.RetrieveMultiple(unitQuery);
                        //var uomProduct = uoms.Entities[0];
                        //var uom = service.Retrieve("uom", new Guid("06EBB338-468D-437B-B547-A3E600EB9A97"), new ColumnSet(){AllColumns=true});
                        var uom = service.Retrieve(firstUom.LogicalName, firstUom.Id, new ColumnSet() { AllColumns = true });
                        //throw new InvalidPluginExecutionException(firstProduct.Id.ToString());

                        //var product = service.Retrieve("product", new Guid("0DD28827-C9D5-E311-9397-00155D0A4E33"), new ColumnSet(){AllColumns=true});
                        var product = service.Retrieve(firstProduct.LogicalName, firstProduct.Id, new ColumnSet() { AllColumns = true });
                        orderProduct["productid"] = new EntityReference("product", product.Id);
                        orderProduct["uomid"] = new EntityReference("uom", uom.Id);
                        orderProduct["description"] = (string)orderProductName;
                        orderProduct["tax"] = (decimal)0;
                        orderProduct["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value);
                        orderProduct["priceperunit"] = new Money(prepayedAmount.Value);
                        //throw new InvalidPluginExecutionException(prepayedAmount.Value.ToString());
                        orderProduct["quantity"] = (decimal)1;
                        orderProduct["new_pricingtype"] = new OptionSetValue(1);
                        orderProduct["new_ratio"] = (decimal)1;
                        orderProduct["manualdiscountamount"] = new Money(0);
                        orderProduct["new_specificdiscountpercentage"] = (decimal)0;
                        orderProduct["new_grossannualincome"] = new Money(prepayedAmount.Value);
                        orderProduct["new_gaixratio"] = new Money(prepayedAmount.Value);
                        orderProduct["new_recommendedvalue"] = new Money(prepayedAmount.Value);
                        orderProduct["new_fixedpriceplusratio"] = new Money(prepayedAmount.Value);


                        service.Create(orderProduct);
                        //service.Update(salesorder);


                    }
                    else if (salesorderType.Value == 2)
                    {

                        string quoteName = (string)quote["name"];
                        string orderProductName = "Advance payment for " + quoteName;
                        var prepayedAmount = (Money)quote["new_prepayedamount"];

                        var salesorder = new Entity("salesorder");
                        salesorder["name"] = quote["name"] + " Invoice Order for the Residual";
                        salesorder["quoteid"] = new EntityReference(quote.LogicalName, quote.Id);
                        salesorder["customerid"] = new EntityReference(customer.LogicalName, customer.Id);
                        salesorder["pricelevelid"] = (EntityReference)quote["pricelevelid"];
                        salesorder["new_recommendedtotal"] = (Money)quote["new_prepayedamount"];
                        salesorder["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value);
                        salesorder["new_reloadflag"] = false;

                        var orderID = (Guid)service.Create(salesorder);


                        //Create the order detail
                        var orderProduct = new Entity("salesorderdetail");

                        orderProduct["salesorderid"] = new EntityReference("salesorder", orderID);

                        //////retrieve product

                        ConditionExpression condition = new ConditionExpression();
                        condition.AttributeName = "name";
                        condition.Operator = ConditionOperator.Equal;
                        condition.Values.Add("pc");

                        FilterExpression filter = new FilterExpression();
                        filter.AddCondition(condition);

                        QueryExpression query = new QueryExpression();
                        query.EntityName = "uom";
                        query.ColumnSet = new ColumnSet(true);
                        query.Criteria = filter;


                        // Query for the UOM

                        ConditionExpression conditionProduct = new ConditionExpression();
                        conditionProduct.AttributeName = "productnumber";
                        conditionProduct.Operator = ConditionOperator.Equal;
                        conditionProduct.Values.Add("14");

                        FilterExpression filterProduct = new FilterExpression();
                        filterProduct.AddCondition(conditionProduct);

                        QueryExpression queryProduct = new QueryExpression();
                        queryProduct.EntityName = "product";
                        queryProduct.ColumnSet = new ColumnSet(true);
                        queryProduct.Criteria = filterProduct;


                        EntityCollection uomCollection = service.RetrieveMultiple(query);
                        EntityCollection productCollection = service.RetrieveMultiple(queryProduct);
                        //uom.Entities.F

                        var firstUom = uomCollection.Entities.FirstOrDefault();
                        var firstProduct = productCollection.Entities.FirstOrDefault();

                        var uom = service.Retrieve(firstUom.LogicalName, firstUom.Id, new ColumnSet() { AllColumns = true });

                        var product = service.Retrieve(firstProduct.LogicalName, firstProduct.Id, new ColumnSet() { AllColumns = true });
                        orderProduct["productid"] = new EntityReference("product", product.Id);
                        orderProduct["uomid"] = new EntityReference("uom", uom.Id);
                        orderProduct["description"] = (string)orderProductName;
                        orderProduct["tax"] = (decimal)0;
                        orderProduct["new_pricingtype"] = new OptionSetValue(((OptionSetValue)quote["new_pricingtype"]).Value);
                        orderProduct["priceperunit"] = new Money(prepayedAmount.Value);
                        orderProduct["quantity"] = (decimal)1;
                        orderProduct["new_pricingtype"] = new OptionSetValue(1);
                        orderProduct["new_ratio"] = (decimal)1;
                        orderProduct["manualdiscountamount"] = new Money(0);
                        orderProduct["new_specificdiscountpercentage"] = (decimal)0;
                        orderProduct["new_grossannualincome"] = new Money(prepayedAmount.Value);
                        orderProduct["new_gaixratio"] = new Money(prepayedAmount.Value);
                        orderProduct["new_recommendedvalue"] = new Money(prepayedAmount.Value);
                        orderProduct["new_fixedpriceplusratio"] = new Money(prepayedAmount.Value);

                        service.Create(orderProduct);
                    };
                }
            }
        }

Do you guys have any suggestions that may point me to the solution of this?

Thanks in Advance, 

Georgi B


Viewing all articles
Browse latest Browse all 79901

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>