public OrderItemModel GetOrderItem(int nodeId) { SearchResult contentNode = null; // Query ChalmersILLOrderItemsSearcher in Examine for the node. try { var searcher = ExamineManager.Instance.SearchProviderCollection["ChalmersILLOrderItemsSearcher"]; var searchCriteria = searcher.CreateSearchCriteria(Examine.SearchCriteria.BooleanOperation.Or); var query = searchCriteria.Id(nodeId); var searchResult = searcher.Search(query.Compile()); var searchResultCount = searchResult.Count(); if (searchResultCount == 0) { LogHelper.Warn <OrderItemManager>("GetOrderItem: Couldn't find any node with the ID " + nodeId + " while querying with Examine."); } else if (searchResultCount > 1) { // should never happen LogHelper.Warn <OrderItemManager>("GetOrderItem: Found more than one node with the ID " + nodeId + " while querying with Examine."); } else { contentNode = searchResult.First(); } } catch (Exception e) { LogHelper.Error <OrderItemManager>("Failed to query node.", e); } // The list of statuses to return binds to the model var orderItem = new OrderItemModel(); if (contentNode != null) { // Set values orderItem.CreateDate = DateTime.ParseExact(contentNode.Fields.GetValueString("createDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); orderItem.UpdateDate = DateTime.ParseExact(contentNode.Fields.GetValueString("updateDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); orderItem.NodeId = contentNode.Id; orderItem.OrderId = contentNode.Fields.GetValueString("OrderId"); orderItem.OriginalOrder = contentNode.Fields.GetValueString("OriginalOrder"); orderItem.Reference = contentNode.Fields.GetValueString("Reference"); if (contentNode.Fields.GetValueString("FollowUpDate") != null && contentNode.Fields.GetValueString("FollowUpDate") != "") { try { orderItem.FollowUpDate = DateTime.ParseExact(contentNode.Fields.GetValueString("FollowUpDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); orderItem.FollowUpDateIsDue = orderItem.FollowUpDate <= DateTime.Now ? true : false; } catch (Exception) { } } orderItem.PatronName = contentNode.Fields.GetValueString("PatronName"); orderItem.PatronEmail = contentNode.Fields.GetValueString("PatronEmail"); orderItem.PatronCardNo = contentNode.Fields.GetValueString("PatronCardNo"); orderItem.ProviderName = contentNode.Fields.GetValueString("ProviderName") != null?contentNode.Fields.GetValueString("ProviderName") : ""; orderItem.ProviderOrderId = contentNode.Fields.GetValueString("ProviderOrderId") != null?contentNode.Fields.GetValueString("ProviderOrderId") : ""; orderItem.ProviderInformation = contentNode.Fields.GetValueString("ProviderInformation") != null?contentNode.Fields.GetValueString("ProviderInformation") : ""; orderItem.ProviderDueDate = contentNode.Fields.GetValueString("ProviderDueDate") == "" ? DateTime.Now : DateTime.ParseExact(contentNode.Fields.GetValueString("ProviderDueDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); // Parse out the integer of status and type int OrderStatusId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderStatusDataTypeDefinitionName"], contentNode.Fields.GetValueString("Status")); int OrderPreviousStatusId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderStatusDataTypeDefinitionName"], contentNode.Fields.GetValueString("PreviousStatus")); int OrderLastDeliveryStatusId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderStatusDataTypeDefinitionName"], contentNode.Fields.GetValueString("LastDeliveryStatus")); int OrderTypeId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderTypeDataTypeDefinitionName"], contentNode.Fields.GetValueString("Type")); int OrderDeliveryLibraryId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderDeliveryLibraryDataTypeDefinitionName"], contentNode.Fields.GetValueString("DeliveryLibrary")); int OrderCancellationReasonId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderCancellationReasonDataTypeDefinitionName"], contentNode.Fields.GetValueString("CancellationReason")); int OrderPurchasedMaterialId = _umbraco.DataTypePrevalueId(ConfigurationManager.AppSettings["umbracoOrderPurchasedMaterialDataTypeDefinitionName"], contentNode.Fields.GetValueString("PurchasedMaterial")); // Status (id, whole prevalue "xx:yyyy" and just string "yyyy") orderItem.StatusId = OrderStatusId; orderItem.StatusString = OrderStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderStatusId).Split(':').Last() : ""; orderItem.Status = OrderStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderStatusId) : ""; // Previous status (id, whole prevalue "xx:yyyy" and just string "yyyy") orderItem.PreviousStatusId = OrderPreviousStatusId; orderItem.PreviousStatusString = OrderPreviousStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderPreviousStatusId).Split(':').Last() : ""; orderItem.PreviousStatus = OrderPreviousStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderPreviousStatusId) : ""; // Last delivery status (id, whole prevalue "xx:yyyy" and just string "yyyy") orderItem.LastDeliveryStatusId = OrderLastDeliveryStatusId; orderItem.LastDeliveryStatusString = OrderLastDeliveryStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderLastDeliveryStatusId).Split(':').Last() : ""; orderItem.LastDeliveryStatus = OrderLastDeliveryStatusId != -1 ? umbraco.library.GetPreValueAsString(OrderLastDeliveryStatusId) : ""; // Type (id and prevalue) orderItem.TypeId = OrderTypeId; orderItem.Type = OrderTypeId != -1 ? umbraco.library.GetPreValueAsString(OrderTypeId) : ""; // Delivery Library (id and prevalue) orderItem.DeliveryLibraryId = OrderDeliveryLibraryId; orderItem.DeliveryLibrary = OrderDeliveryLibraryId != -1 ? umbraco.library.GetPreValueAsString(OrderDeliveryLibraryId) : ""; // Cancellation reason (id and prevalue) orderItem.CancellationReasonId = OrderCancellationReasonId; orderItem.CancellationReason = OrderCancellationReasonId != -1 ? umbraco.library.GetPreValueAsString(OrderCancellationReasonId) : ""; // Purchased material (id and prevalue) orderItem.PurchasedMaterialId = OrderPurchasedMaterialId; orderItem.PurchasedMaterial = OrderPurchasedMaterialId != -1 ? umbraco.library.GetPreValueAsString(OrderPurchasedMaterialId) : ""; orderItem.DueDate = contentNode.Fields.GetValueString("DueDate") == "" ? DateTime.Now : DateTime.ParseExact(contentNode.Fields.GetValueString("DueDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); orderItem.BookId = contentNode.Fields.GetValueString("BookId"); orderItem.DeliveryDate = contentNode.Fields.GetValueString("DeliveryDate") == "" ? new DateTime(1970, 1, 1) : DateTime.ParseExact(contentNode.Fields.GetValueString("DeliveryDate"), "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture, DateTimeStyles.None); // List of LogItems bound to this OrderItem //orderItem.LogItemsList = Logging.GetLogItems(nodeId); if (!String.IsNullOrEmpty(contentNode.Fields.GetValueString("Log"))) { orderItem.LogItemsList = JsonConvert.DeserializeObject <List <LogItem> >(contentNode.Fields.GetValueString("Log")); orderItem.LogItemsList.Reverse(); } else { orderItem.LogItemsList = new List <LogItem>(); } // List of attachments bound to this OrderItem if (!String.IsNullOrEmpty(contentNode.Fields.GetValueString("Attachments"))) { orderItem.AttachmentList = JsonConvert.DeserializeObject <List <OrderAttachment> >(contentNode.Fields.GetValueString("Attachments")); } else { orderItem.AttachmentList = new List <OrderAttachment>(); } orderItem.SierraInfoStr = contentNode.Fields.GetValueString("SierraInfo"); if (orderItem.SierraInfoStr == null || orderItem.SierraInfoStr == "") { orderItem.SierraInfoStr = JsonConvert.SerializeObject(new SierraModel()); } orderItem.SierraInfo = JsonConvert.DeserializeObject <SierraModel>(orderItem.SierraInfoStr); orderItem.DrmWarning = contentNode.Fields.GetValueString("DrmWarning"); } // NOTE: These values are no longer stored in the actual node, only added in OrderItemSurfaceController after checking relations. orderItem.EditedBy = ""; orderItem.EditedByMemberName = ""; orderItem.EditedByCurrentMember = false; // Include the Content Version Count in Umbraco db // FIXME: Always set to zero to avoid ContentService calls. Never used. Should be removed from model? orderItem.ContentVersionsCount = 0; orderItem.DeliveryLibrarySameAsHomeLibrary = IsDeliveryLibrarySameAsHomeLibrary(orderItem); // Return the populated object return(orderItem); }