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