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); }
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); }