Beispiel #1
0
            /// <summary>
            /// Invoke the method to save non sale tender type transactions.
            /// </summary>
            /// <param name="request">Request for non sale tender transactions.</param>
            /// <returns>Returns the non sale tender transactions.</returns>
            private static SaveNonSaleTenderServiceResponse SaveNonSaleTenderTransactions(SaveNonSaleTenderServiceRequest request)
            {
                NonSalesTransaction nonSalesTransaction = StoreOperationServiceHelper.ConvertToNonSalesTenderTransaction(request.RequestContext, request);

                // If the previously created tender transaction response did not get received due to network connection issue.
                // On client retry, check if it was already saved. If true, returns saved object.
                var getCurrentShiftNonSalesTransactionsdataServiceRequest = new GetCurrentShiftNonSalesTransactionsDataRequest(nonSalesTransaction, request.TransactionId);
                NonSalesTransaction savedNonSalesTransaction = request.RequestContext.Runtime.Execute <EntityDataServiceResponse <NonSalesTransaction> >(getCurrentShiftNonSalesTransactionsdataServiceRequest, request.RequestContext).PagedEntityCollection.FirstOrDefault();

                if (savedNonSalesTransaction == null)
                {
                    var saveNonSalesTransactionsdataServiceRequest = new SaveNonSalesTransactionDataRequest(nonSalesTransaction);
                    savedNonSalesTransaction = request.RequestContext.Runtime.Execute <SingleEntityDataServiceResponse <NonSalesTransaction> >(saveNonSalesTransactionsdataServiceRequest, request.RequestContext).Entity;
                }

                return(new SaveNonSaleTenderServiceResponse(savedNonSalesTransaction));
            }
Beispiel #2
0
            /// <summary>
            /// Save non sales transaction.
            /// </summary>
            /// <param name="request">Non sales transaction data service request.</param>
            /// <returns>A SingleEntityDataServiceResponse containing the saved NonSalesTransaction object.</returns>
            private SingleEntityDataServiceResponse <NonSalesTransaction> SaveNonSalesTransaction(SaveNonSalesTransactionDataRequest request)
            {
                ThrowIf.Null(request, "request");
                ThrowIf.Null(request.NonSalesTransaction, "request.NonSalesTransaction");

                var nonSalesTransaction = request.NonSalesTransaction;

                NonSalesTransaction savedTransaction = null;

                using (var transactionTable = new DataTable(RetailTransactionTableType))
                    using (var paymentTable = new DataTable(RetailTransactionPaymentTransTableType))
                        using (var reasonCodeTable = new DataTable(RetailTransactionInfoCodeTransTableType))
                        {
                            TransactionLog transaction = this.Convert(nonSalesTransaction);

                            RetailTransactionTableSchema.PopulateSchema(transactionTable);

                            TransactionLogDataManager.FillData(request.RequestContext, transaction, transactionTable);

                            var parameters = new ParameterSet();
                            parameters[DatabaseAccessor.ChannelIdVariableName] = request.RequestContext.GetPrincipal().ChannelId;
                            parameters["@tvp_Transaction"] = transactionTable;

                            if (!nonSalesTransaction.TransactionType.Equals(Microsoft.Dynamics.Commerce.Runtime.DataModel.TransactionType.OpenDrawer))
                            {
                                RetailTransactionPaymentSchema.PopulatePaymentSchema(paymentTable);
                                this.FillPaymentDataTable(nonSalesTransaction.Id, nonSalesTransaction, paymentTable, request.RequestContext);
                                parameters["@tvp_PaymentTrans"] = paymentTable;
                            }
                            else
                            {
                                RetailTransactionPaymentSchema.PopulateReasonCodeSchema(reasonCodeTable);                                    // Populate reason code schema
                                this.FillReasonCodeLines(transaction.Id, nonSalesTransaction, reasonCodeTable, -1m, request.RequestContext); // Fill captured reason code details
                                parameters["@tvp_ReasoncodeLine"] = reasonCodeTable;                                                         // Reason code parameter for [Open Drawer] store operation
                            }

                            int errorCode;
                            using (SqlServerDatabaseContext sqlServerDatabaseContext = new SqlServerDatabaseContext(request))
                            {
                                savedTransaction = sqlServerDatabaseContext.ExecuteStoredProcedure <NonSalesTransaction>(InsertNonSaleTenderSprocName, parameters, out errorCode).FirstOrDefault();
                            }

                            if (errorCode != (int)DatabaseErrorCodes.Success)
                            {
                                throw new StorageException(StorageErrors.Microsoft_Dynamics_Commerce_Runtime_CriticalStorageError, errorCode, "Unable to save non sale tender operation.");
                            }
                        }

                return(new SingleEntityDataServiceResponse <NonSalesTransaction>(savedTransaction));
            }