/// <summary>
            /// Retrieves the stock count journal transactions.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="journalId">The journal identifier.</param>
            /// <returns>
            /// The response.
            /// </returns>
            public static GetStockCountJournalTransactionServiceResponse GetStockCountJournalTransactions(RequestContext context, string journalId)
            {
                var dataRequest = new GetStockCountDataRequest
                {
                    JournalId = journalId,
                    TransactionRecordsOnly = true,
                    QueryResultSettings    = QueryResultSettings.AllRecords
                };

                var journalTransactions = context.Runtime.Execute <EntityDataServiceResponse <StockCountJournalTransaction> >(dataRequest, context).PagedEntityCollection;

                return(new GetStockCountJournalTransactionServiceResponse(journalTransactions));
            }
            /// <summary>
            /// Retrieves the stock count journal.
            /// </summary>
            /// <param name="request">The request.</param>
            /// <returns>
            /// A collection of stock count journals.
            /// </returns>
            public static GetStockCountJournalServiceResponse GetStockCountJournal(GetStockCountJournalServiceRequest request)
            {
                var dataRequest = new GetStockCountDataRequest
                {
                    QueryResultSettings = request.QueryResultSettings
                };

                if (!string.IsNullOrWhiteSpace(request.JournalId))
                {
                    dataRequest.JournalId = request.JournalId;
                }

                PagedResult <StockCountJournal> journals = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <StockCountJournal> >(dataRequest, request.RequestContext).PagedEntityCollection;

                return(new GetStockCountJournalServiceResponse(journals));
            }
            /// <summary>
            /// Sync Stock count journal transactions from AX.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="journalId">The journal identifier.</param>
            /// <returns>The response.</returns>
            public static SyncStockCountTransactionsFromAxServiceResponse SyncStockCountJournalTransactions(RequestContext context, string journalId)
            {
                var currJournalTrans = GetStockCountJournalTransFromAx(context, journalId);

                AddUpdateStockCount(journalId, context, currJournalTrans);

                var dataRequest = new GetStockCountDataRequest
                {
                    TransactionRecordsOnly = true,
                    JournalId           = journalId,
                    QueryResultSettings = QueryResultSettings.AllRecords
                };

                var currentScDbTransactions = context.Runtime.Execute <EntityDataServiceResponse <StockCountJournalTransaction> >(dataRequest, context).PagedEntityCollection;

                return(new SyncStockCountTransactionsFromAxServiceResponse(currentScDbTransactions));
            }
            /// <summary>
            /// Syncs StockCount journal from AX.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <returns>The response.</returns>
            public static SyncStockCountJournalsFromAxServiceResponse SyncStockCountJournalFromAx(RequestContext context)
            {
                var stockCountJournals = GetStockCountJournalsFromAx(context);

                // Remove stock count journals that are not available on AX anymore.
                var journalsToRemoved = GetUnusedJournals(context, stockCountJournals);
                var dataRequest       = new DeleteStockCountJournalsDataRequest(journalsToRemoved.Select(journal => journal.JournalId));

                context.Runtime.Execute <NullResponse>(dataRequest, context);

                AddUpdateStockCountJournal(context, stockCountJournals);

                // Get all the stock count journals from RetailServer database and send the dataset to client.
                var stockDataRequest = new GetStockCountDataRequest {
                    QueryResultSettings = QueryResultSettings.AllRecords
                };
                var currentJournals = context.Runtime.Execute <EntityDataServiceResponse <StockCountJournal> >(stockDataRequest, context).PagedEntityCollection;

                return(new SyncStockCountJournalsFromAxServiceResponse(currentJournals));
            }
            /// <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>
            /// Gets the unused journals.
            /// </summary>
            /// <param name="context">The request context.</param>
            /// <param name="activeList">The active list.</param>
            /// <returns>The stock count journals.</returns>
            private static ReadOnlyCollection <StockCountJournal> GetUnusedJournals(RequestContext context, IEnumerable <StockCountJournal> activeList)
            {
                var dataRequest = new GetStockCountDataRequest {
                    QueryResultSettings = QueryResultSettings.AllRecords
                };
                var currentJournals = context.Runtime.Execute <EntityDataServiceResponse <StockCountJournal> >(dataRequest, context).PagedEntityCollection.Results;

                IList <StockCountJournal> unusedList = new List <StockCountJournal>();

                foreach (var currScj in currentJournals)
                {
                    // check whether the current journal is present in active journal
                    var stockCountJournalExists = activeList.Where(active => string.Equals(active.JournalId, currScj.JournalId, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

                    // if the current journal does not exist in active journal delete them
                    if (stockCountJournalExists == null)
                    {
                        unusedList.Add(currScj);
                    }
                }

                return(new ReadOnlyCollection <StockCountJournal>(unusedList));
            }
Ejemplo n.º 7
0
            /// <summary>
            /// Dispatches stock count request.
            /// </summary>
            /// <param name="request">The data service request.</param>
            /// <returns>The data service response.</returns>
            private Response GetStockCountData(GetStockCountDataRequest request)
            {
                var dataManager = new StockCountDataManager(request.RequestContext);

                return(dataManager.GetStockCountData(request));
            }