public List <EntitlementResponse> Provision(FulfillOrderRequest request)
        {
            var resultEntitlements = new List <EntitlementResponse>();

            var entitlementList = flexeraClient.GetEntitlements(request.Account.AccountNumber);

            List <string> LicenseServers = GetLicensServers(request);

            var productFamilies = request.Order.LineItems.Select(c => new { c.EntitlementFamily, c.IsSingleSeat,
                                                                            c.DeployToCloudLicenseServer }).Distinct();

            foreach (var p in productFamilies)
            {
                var ocsProductFamily = p.EntitlementFamily + (p.DeployToCloudLicenseServer ? "_Networked" : "_Local");
                if (!string.IsNullOrWhiteSpace(p.EntitlementFamily))
                {
                    var orderEntitlement = new OrderEntitlement();
                    orderEntitlement.EntitlementFamily = p.EntitlementFamily;

                    orderEntitlement.LineItems = GetLineEntitlementLineItems(request, p.EntitlementFamily, p.DeployToCloudLicenseServer);

                    if (orderEntitlement.LineItems.Count > 0)
                    {
                        var qty     = orderEntitlement.LineItems[0].Quantity;
                        var entResp = new EntitlementResponse();

                        //if (p.IsSingleSeat)
                        //    entResp.EntitlementId = flexeraClient.CreateEntitlement(request.Account.AccountNumber, p.EntitlementFamily);
                        //else
                        entResp.EntitlementId = GetProductFamilyEntitlementId(entitlementList, request.Account.AccountNumber,
                                                                              request.Account.CompanyName, ocsProductFamily);

                        entResp.EntitlementFamily = p.EntitlementFamily;

                        entResp.EntitlementLineItems = new List <EntitlementLineItemResponse>();

                        foreach (var li in orderEntitlement.LineItems)
                        {
                            var entLiResp = new EntitlementLineItemResponse();

                            var existingLineItem = (from i in entitlementList
                                                    from j in i.LineItems
                                                    where j.PartNumber == li.PartNumber
                                                    select j).FirstOrDefault();

                            if (existingLineItem != null)
                            {
                                existingLineItem.ProductRatePlanChargeId = li.ProductRatePlanChargeId;
                                existingLineItem.Quantity += qty;
                                entLiResp = flexeraClient.Update(existingLineItem);
                            }
                            else
                            {
                                if (request.RequestType == FulfillmentRequestType.Renewal)
                                {
                                    if (li.IsPerpertual)
                                    {
                                        li.Quantity = qty;
                                        flexeraClient.Update(li);
                                    }
                                    else
                                    {
                                        flexeraClient.ExpireLineItem(entResp.EntitlementId, li.ActivationId);
                                        li.Quantity = qty;
                                        entLiResp   = flexeraClient.AddLineItemToEntitlement(entResp.EntitlementId, li);
                                    }
                                }
                                else
                                {
                                    li.Quantity = qty;
                                    entLiResp   = flexeraClient.AddLineItemToEntitlement(entResp.EntitlementId, li);
                                }
                            }

                            if (p.DeployToCloudLicenseServer)
                            {
                                entLiResp.CloudLicenseServerId = li.LicenseManagerId;


                                if (LicenseServers.Count > 0)
                                {
                                    var cls = LicenseServers.FirstOrDefault(ls => ls == entLiResp.CloudLicenseServerId);
                                    if (string.IsNullOrWhiteSpace(cls))
                                    {
                                        cls = LicenseServers.Last();
                                    }

                                    flexeraClient.AddEntitlementLineItemToLicenseServer(entLiResp, cls);
                                    entLiResp.CloudLicenseServerId = cls;
                                }
                            }
                            entResp.EntitlementLineItems.Add(entLiResp);
                        }
                        resultEntitlements.Add(entResp);
                    }
                }
            }

            request.setDevices(LicenseServers);

            return(resultEntitlements);
        }
Exemple #2
0
        public List <OrderEntitlement> GetEntitlements(string soldTo)
        {
            var entitlementList = new List <OrderEntitlement>();
            var searchQuery     = new searchEntitlementRequestType
            {
                entitlementSearchCriteria = new searchEntitlementDataType
                {
                    soldTo = new Entitlement.SimpleQueryType
                    {
                        searchType = Entitlement.simpleSearchType.CONTAINS,
                        value      = soldTo
                    },
                }
            };
            var fnoWs = new v1EntitlementOrderService();

            fnoWs.Url             = EndPointUrl + "EntitlementOrderService";
            fnoWs.PreAuthenticate = true;
            fnoWs.Credentials     = new NetworkCredential(UserName, Password);

            searchQuery.batchSize  = "100";
            searchQuery.pageNumber = "1";
            var resp = fnoWs.getEntitlementsQuery(searchQuery);

            if (resp.statusInfo.status == Entitlement.StatusType.SUCCESS)
            {
                if (resp.entitlement == null)
                {
                    return(new List <OrderEntitlement>());
                }

                foreach (var e in resp.entitlement)
                {
                    if (e.simpleEntitlement.soldTo != soldTo)
                    {
                        continue;
                    }

                    var entitlement = new OrderEntitlement();
                    entitlement.EntitlementId = e.simpleEntitlement.entitlementId.id;

                    if (e.simpleEntitlement.entitlementAttributes != null)
                    {
                        var productFamily = e.simpleEntitlement.entitlementAttributes.FirstOrDefault(j => j.attributeName == "OCS_ProductFamily");

                        if (productFamily != null)
                        {
                            entitlement.EntitlementFamily = productFamily.stringValue;
                        }
                    }

                    entitlement.LineItems = (from i in e.simpleEntitlement.lineItems
                                             select new OrderEntitlementLineItem
                    {
                        ActivationId = i.activationId.id,
                        EffectiveDate = i.startDate,
                        Quantity = int.Parse(i.numberOfCopies),
                        EntitlementId = e.simpleEntitlement.entitlementId.id,
                        ExpirationDate = i.expirationDate,
                        PartNumber = i.partNumber.primaryKeys.partId,
                        IsPerpertual = i.isPermanent
                    }).ToList();

                    entitlementList.Add(entitlement);
                }
            }
            return(entitlementList);
        }