private NullResponse InsertLoyaltyCard(InsertLoyaltyCardDataRequest request) { ThrowIf.Null(request.LoyaltyCard, "loyaltyCard"); using (DataTable loyaltyCardTable = new DataTable(LoyaltyCardTypeName)) using (DataTable loyaltyCardTierTable = new DataTable(LoyaltyCardTierTypeName)) { // Prepare loyalty card data AddLoyaltyCardTableTypeSchema(loyaltyCardTable); loyaltyCardTable.Rows.Add(ConvertLoyaltyCardToDataRow(loyaltyCardTable, request.LoyaltyCard)); // Prepare loyalty card tier data AddLoyaltyCardTierTableTypeSchema(loyaltyCardTierTable); foreach (var cardLoyaltyGroup in request.LoyaltyCard.LoyaltyGroups) { foreach (var cardTier in cardLoyaltyGroup.LoyaltyCardTiers) { loyaltyCardTierTable.Rows.Add(ConvertLoyaltyCardTierToDataRow(loyaltyCardTierTable, request.LoyaltyCard, cardLoyaltyGroup, cardTier)); } } // Insert var parameters = new ParameterSet(); parameters["@TVP_LOYALTYCARDTABLETYPE"] = loyaltyCardTable; parameters["@TVP_LOYALTYCARDTIERTABLETYPE"] = loyaltyCardTierTable; int errorCode; using (SqlServerDatabaseContext sqlServerDatabaseContext = new SqlServerDatabaseContext(request)) { errorCode = sqlServerDatabaseContext.ExecuteStoredProcedureNonQuery(LoyaltySqlServerDataService.InsertLoyaltyCardSprocName, parameters); } if (errorCode != (int)DatabaseErrorCodes.Success) { throw new StorageException(StorageErrors.Microsoft_Dynamics_Commerce_Runtime_CriticalStorageError, errorCode, "Unable to save the loyalty card in the channel database."); } } return(new NullResponse()); }
/// <summary> /// Gets the transactions for a loyalty card. /// </summary> /// <param name="request">The request.</param> /// <returns>The response containing the loyalty card transactions.</returns> private static IssueLoyaltyCardServiceResponse IssueLoyaltyCard(IssueLoyaltyCardServiceRequest request) { var serviceRequest = new IssueLoyaltyCardRealtimeRequest( request.LoyaltyCardNumber, request.LoyaltyCardTenderType, request.PartyRecordId, request.ChannelId); IssueLoyaltyCardRealtimeResponse serviceResponse = request.RequestContext.Execute <IssueLoyaltyCardRealtimeResponse>(serviceRequest); LoyaltyCard loyaltyCard = serviceResponse.LoyaltyCard; if (loyaltyCard != null && loyaltyCard.PartyRecordId != 0) { loyaltyCard.CustomerAccount = request.CustomerAccountNumber; } // Insert the issue loyalty card into the channel database var insertLoyaltyCardDataRequest = new InsertLoyaltyCardDataRequest(loyaltyCard); request.RequestContext.Execute <NullResponse>(insertLoyaltyCardDataRequest); return(new IssueLoyaltyCardServiceResponse(loyaltyCard)); }