/// <summary> /// Commits stock count journals in AX. /// </summary> /// <param name="request">The request.</param> /// <returns>The <see cref="StockCountJournal"/> journal.</returns> private static SingleEntityDataServiceResponse <StockCountJournal> CommitStockCountJournal(CommitStockCountJournalRealtimeRequest request) { var transactionClient = new TransactionService.TransactionServiceClient(request.RequestContext); StockCountJournal stockCountJournal = transactionClient.CommitStockCounts(request.Journal); return(new SingleEntityDataServiceResponse <StockCountJournal>(stockCountJournal)); }
/// <summary> /// Retrieves the Stock Count Journals from AX. /// </summary> /// <param name="inventLocationId">Pass Invent Location Id.</param> /// <returns>Returns the StockCountJournal list from AX.</returns> public PagedResult <StockCountJournal> GetStockCountJournals(string inventLocationId) { ThrowIf.Null <string>(inventLocationId, "inventoryLocationId"); var data = this.InvokeMethod(GetInventJournalsMethodName, inventLocationId); IEnumerable <StockCountJournal> journals = new List <StockCountJournal>(); if (!string.IsNullOrEmpty(data[0].ToString())) { XDocument doc = XDocument.Parse(data[0].ToString()); XElement root = doc.Elements("InventJournalTables").FirstOrDefault(); if (root != null) { journals = root.Elements("InventJournalTable").Select <XElement, StockCountJournal>( (sc) => { StockCountJournal scJournal = TransactionServiceClient.Parse(sc); return(scJournal); }); } } return(journals.AsPagedResult()); }
/// <summary> /// Commits the Stock count journals and transactions to AX. /// </summary> /// <param name="stockCountJournal">Pass in stock count journal.</param> /// <returns>Returns the stock count journal created.</returns> public StockCountJournal CommitStockCounts(StockCountJournal stockCountJournal) { ThrowIf.Null <StockCountJournal>(stockCountJournal, "stockCountJournal"); // Filter stock count line that has status pending updates. stockCountJournal.StockCountTransactionLines = stockCountJournal.StockCountTransactionLines .Where(stockCountLine => stockCountLine.StatusEnum == StockCountStatus.PendingUpdate).ToList(); string importValue = TransactionServiceClient.ToXml(stockCountJournal); var data = this.InvokeMethod(UpdateInventJournalsMethodName, importValue); var journalTransactions = new List <StockCountJournalTransaction>(); if (!string.IsNullOrWhiteSpace(data[0].ToString())) { XDocument doc = XDocument.Parse(data[0].ToString()); XElement root = doc.Elements("InventJournalTable").FirstOrDefault(); if (root != null) { journalTransactions = root.Elements("InventJournalTrans").Select <XElement, StockCountJournalTransaction>( (scLine) => { var scJournalTransaction = TransactionServiceClient.ParseTransactions(scLine); return(scJournalTransaction); }).ToList <StockCountJournalTransaction>(); } } stockCountJournal.StockCountTransactionLines.Clear(); stockCountJournal.StockCountTransactionLines.AddRange(journalTransactions); return(stockCountJournal); }
/// <summary> /// Parse StockCount journal xml data into object. /// </summary> /// <param name="xmlJournal">Xml format of a stock count journal.</param> /// <returns>Returns the StockCountJournal object.</returns> private static StockCountJournal Parse(XElement xmlJournal) { var journal = new StockCountJournal(); journal.RecordId = TransactionServiceClient.GetAttributeValue(xmlJournal, "RecId"); journal.JournalId = TransactionServiceClient.GetAttributeValue(xmlJournal, "JournalId"); journal.Description = TransactionServiceClient.GetAttributeValue(xmlJournal, "Description"); return(journal); }
/// <summary> /// Saves the stock count journal transactions. /// </summary> /// <param name="journalId">The stock count journal identifier.</param> /// <param name="context">The request context.</param> /// <param name="transactions">A collection of stock count journal transactions.</param> /// <returns> /// The response. /// </returns> public static SaveStockCountJournalTransactionServiceResponse SaveStockCountJournalTransactions(string journalId, RequestContext context, IEnumerable <StockCountJournalTransaction> transactions) { AddUpdateStockCount(journalId, context, transactions); // Refresh the stock count lines from database. var stockCountJournalTransactionResponse = GetStockCountJournalTransactions(context, journalId); var stockCountJournalResponse = new StockCountJournal { JournalId = journalId, StockCountTransactionLines = stockCountJournalTransactionResponse.StockCountJournalTransactions.Results }; return(new SaveStockCountJournalTransactionServiceResponse(stockCountJournalResponse)); }
/// <summary> /// Creates the <see cref="StockCountJournal"/> object to commit to AX. /// </summary> /// <param name="context">The request context.</param> /// <param name="journalId">The journal identifier.</param> /// <returns> /// The stock count journal with transaction lines to be committed to AX. /// </returns> private static StockCountJournal ConstructAxStockJournal(RequestContext context, string journalId) { ChannelConfiguration channelConfiguration = context.GetChannelConfiguration(); var dataRequest = new GetStockCountDataRequest { TransactionRecordsOnly = true, JournalId = journalId, QueryResultSettings = QueryResultSettings.AllRecords }; var currentScDbTransactions = context.Runtime.Execute <EntityDataServiceResponse <StockCountJournalTransaction> >(dataRequest, context).PagedEntityCollection.Results; StockCountJournal stockCountJournal = new StockCountJournal(); stockCountJournal.JournalId = journalId; foreach (var currScDbTran in currentScDbTransactions) { StockCountJournalTransaction journalTransaction = new StockCountJournalTransaction(); journalTransaction.RecordId = currScDbTran.RecordId; journalTransaction.ItemId = currScDbTran.ItemId; journalTransaction.ItemName = currScDbTran.ItemName; journalTransaction.Counted = currScDbTran.Counted; journalTransaction.Quantity = currScDbTran.Quantity; journalTransaction.ConfigId = currScDbTran.ConfigId; journalTransaction.TrackingGuid = currScDbTran.TrackingGuid; journalTransaction.InventColorId = currScDbTran.InventColorId; journalTransaction.InventSizeId = currScDbTran.InventSizeId; journalTransaction.InventStyleId = currScDbTran.InventStyleId; journalTransaction.InventDimId = currScDbTran.InventDimId; journalTransaction.InventSiteId = currScDbTran.InventSiteId; journalTransaction.InventLocationId = channelConfiguration.InventLocation; journalTransaction.Status = currScDbTran.Status; stockCountJournal.StockCountTransactionLines.Add(journalTransaction); } return(stockCountJournal); }
/// <summary> /// Serialize to xml format of a stock count journal. /// </summary> /// <param name="journal">Enter the StockCountJournal object.</param> /// <returns>Xml format of a stock count journal.</returns> private static string ToXml(StockCountJournal journal) { ThrowIf.Null(journal, "journal"); StringBuilder strOutput = new StringBuilder(); strOutput.Append("<InventJournalTable"); strOutput.Append(" JournalId=\"" + journal.JournalId + "\""); strOutput.Append(" RecId=\"" + journal.RecordId + "\""); strOutput.Append(" Worker=\"" + journal.Worker + "\""); strOutput.Append(">"); foreach (var line in journal.StockCountTransactionLines) { strOutput.Append(TransactionServiceClient.ToXml(line)); } strOutput.Append("</InventJournalTable>"); return(strOutput.ToString()); }
/// <summary> /// Commits the StockCount transactions to AX. /// </summary> /// <param name="context">The request context.</param> /// <param name="journalId">The journal identifier.</param> /// <param name="transactions">A collection of stock count transactions to commit to AX.</param> /// <returns>The response object.</returns> public static CommitStockCountTransactionsServiceResponse CommitStockCountTransactions(RequestContext context, string journalId, IEnumerable <StockCountJournalTransaction> transactions) { // Save the StockCount transactions into DB before commiting to AX. AddUpdateStockCount(journalId, context, transactions); var stockCountJournal = ConstructAxStockJournal(context, journalId); var commitStockCountsRequest = new CommitStockCountJournalRealtimeRequest(stockCountJournal); StockCountJournal commitedStockCounts = context.Execute <SingleEntityDataServiceResponse <StockCountJournal> >(commitStockCountsRequest).Entity; var removeStockCountTrans = new List <StockCountJournalTransaction>(); if (commitedStockCounts != null) { foreach (var transactionLine in stockCountJournal.StockCountTransactionLines) { StockCountJournalTransaction updatedLine = commitedStockCounts.StockCountTransactionLines .FirstOrDefault( line => string.Equals( line.TrackingGuid.ToString(), transactionLine.TrackingGuid.ToString(), StringComparison.OrdinalIgnoreCase) && line.UpdatedInAx); if (updatedLine != null) { removeStockCountTrans.Add(updatedLine); } } } // This deletes both the journals and transactions. var deleteDataRequest = new DeleteStockCountJournalsDataRequest(commitedStockCounts.JournalId); context.Runtime.Execute <NullResponse>(deleteDataRequest, context); return(new CommitStockCountTransactionsServiceResponse()); }
/// <summary> /// Create a stock count journal. /// </summary> /// <param name="inventoryLocationId">Pass Invent Location Id.</param> /// <param name="description">Pass journal's description.</param> /// <returns>Returns the StockCountJournal list from AX.</returns> public PagedResult <StockCountJournal> CreateStockCountJournal(string inventoryLocationId, string description) { var data = this.InvokeMethod(CreateInventoryJournalMethodName, inventoryLocationId, description); IEnumerable <StockCountJournal> journals = new List <StockCountJournal>(); if (!string.IsNullOrEmpty(data[0].ToString())) { XDocument doc = XDocument.Parse(data[0].ToString()); if (doc != null) { journals = doc.Elements("InventJournalTable").Select <XElement, StockCountJournal>( (sc) => { StockCountJournal scJournal = TransactionServiceClient.Parse(sc); return(scJournal); }); } } return(journals.AsPagedResult()); }
public Task Delete(StockCountJournal entity) { // Should use RemoveJournal() call rather than this call. throw new NotSupportedException(); }
public Task <StockCountJournal> Update(StockCountJournal entity) { return(Task.Run(() => InventoryManager.Create(CommerceRuntimeManager.Runtime).CreateOrUpdateStockCountJournal(entity))); }