public static void Run(TimerInfo getRewardsTrxReadyForFulfillmentTimer, ICollector <string> errormessage, TraceWriter log) { try { if (getRewardsTrxReadyForFulfillmentTimer.IsPastDue) { log.Verbose("Timer is running late!", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); } //Get RewardsTrx Ready for fulfillment List <SqlParameter> objprm = new List <SqlParameter>(); objprm.Add(new SqlParameter("@RewardTrxStatus", "Ready for fulfillment")); List <Common.Model.GetRewardsRequest> lstRewardsTrx = MSSQLConnection.ExecuteStoredProcedure <Common.Model.GetRewardsRequest>(Common.Constants.USPContstants.GetRewardsTrx, objprm).ToList(); log.Verbose($"Get RewardsTrx Ready for fulfillment:={lstRewardsTrx.Count}", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); //Service bus queue names and connection strings var connectionString = ConfigurationManager.AppSettings["MyServiceBusReader"].ToString(); var FulfillmentRequestTopicClient = TopicClient.CreateFromConnectionString(connectionString, "fulfillmentrequest"); var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); #region Create Subscrptions for the first time //// Create a "EnergyEarthSubscription" filtered subscription. if (!namespaceManager.SubscriptionExists("fulfillmentrequest", "EnergyEarthSubscription")) { SqlFilter energyEarthFilter = new SqlFilter("channelType = 'EnergyEarth'"); namespaceManager.CreateSubscription("fulfillmentrequest", "EnergyEarthSubscription", energyEarthFilter); } //// Create a "GBASSSubscription" filtered subscription. if (!namespaceManager.SubscriptionExists("fulfillmentrequest", "GBASSCTLAdjSubscription")) { SqlFilter GBASSFilter = new SqlFilter("channelType = 'GBASSCTLAdj'"); namespaceManager.CreateSubscription("fulfillmentrequest", "GBASSCTLAdjSubscription", GBASSFilter); } if (!namespaceManager.SubscriptionExists("fulfillmentrequest", "GBASSTariffSubscription")) { SqlFilter GBASSFilter = new SqlFilter("channelType = 'GBASSTariff'"); namespaceManager.CreateSubscription("fulfillmentrequest", "GBASSTariffSubscription", GBASSFilter); } //// Create a "CRMSubscription" filtered subscription. if (!namespaceManager.SubscriptionExists("fulfillmentrequest", "CRMSubscription")) { SqlFilter CRMFilter = new SqlFilter("channelType = 'CRM'"); namespaceManager.CreateSubscription("fulfillmentrequest", "CRMSubscription", CRMFilter); } //// Create a "SmartConnectSubscription" filtered subscription. if (!namespaceManager.SubscriptionExists("fulfillmentrequest", "SmartConnectSubscription")) { SqlFilter SmartConnectFilter = new SqlFilter("channelType = 'SmartConnectCheque'"); namespaceManager.CreateSubscription("fulfillmentrequest", "SmartConnectSubscription", SmartConnectFilter); } #endregion RewardFulfillmentRequest RewardsRequestObj = new RewardFulfillmentRequest(); foreach (Common.Model.GetRewardsRequest item in lstRewardsTrx) { RewardFulfillmentRequestList rewardFulfillmentRequestList = new RewardFulfillmentRequestList(); rewardFulfillmentRequestList.RewardFulfillmentRequest = new RewardFulfillmentRequest(); RewardsRequestObj.RequestId = item.RequestId; RewardsRequestObj.TransactionType = item.TransactionType; RewardsRequestObj.RMSRewardID = item.RMSRewardID; RewardsRequestObj.Reward = new Reward(); RewardsRequestObj.Reward.ProductCode = item.ProductCode; RewardsRequestObj.Reward.ProductValue = item.ProductValue.ToString(); RewardsRequestObj.Reward.ProgramName = item.ProgramName; RewardsRequestObj.Reward.EffectiveDate = item.EffectiveDate; RewardsRequestObj.Reward.RewardType = item.RewardType; RewardsRequestObj.Customer = new CustomerJSON(); RewardsRequestObj.Customer.CustomerID = item.CustomerID; RewardsRequestObj.Customer.SourceSystemID = item.DBSourceSystemID.ToString(); RewardsRequestObj.Customer.SourceSystemName = item.SourceSystemShortName; RewardsRequestObj.Customer.SourceSystemUniqueID = item.SourceSystemUniqueID; RewardsRequestObj.Customer.SourceSystemUniqueIDType = item.SourceSystemUniqueIDType; RewardsRequestObj.Customer.MasterID = item.MasterID; RewardsRequestObj.Customer.Email = item.Email; RewardsRequestObj.Customer.FirstName = item.FirstName; RewardsRequestObj.Customer.LastName = item.LastName; RewardsRequestObj.Customer.CompanyName = item.CompanyName; RewardsRequestObj.Customer.AddressLine1 = item.AddressLine1; RewardsRequestObj.Customer.AddressLine2 = item.AddressLine2; RewardsRequestObj.Customer.City = item.City; RewardsRequestObj.Customer.StateProvince = item.StateProvince; RewardsRequestObj.Customer.ZipPostalCode = item.ZipPostalCode; RewardsRequestObj.Customer.Phone1 = item.Phone1; RewardsRequestObj.Customer.Product = item.Product; RewardsRequestObj.Customer.Language = item.LanguageCode; RewardsRequestObj.AdditionalData = JsonConvert.DeserializeObject <AdditionalData[]>(item.AdditionalData); rewardFulfillmentRequestList.RewardFulfillmentRequest = RewardsRequestObj; var reqObject = JsonConvert.SerializeObject(rewardFulfillmentRequestList); if (item.FulfillmentChannelID != (int)Common.Constants.FulfillmentChannel.EnergyEarth) { var json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(reqObject); var serializedJson = (JObject)JsonConvert.DeserializeObject(reqObject); foreach (var response in serializedJson["RewardFulfillmentRequest"]["Customer"]) { if (response.Path.Contains("CustomerID")) { response.Remove(); break; } } reqObject = JsonConvert.SerializeObject(serializedJson); } log.Verbose($"Reward fulfillment request push to different channel :={reqObject.ToString()}", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); var message = new BrokeredMessage(reqObject); if (item.FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.EnergyEarth) { message.Properties["channelType"] = FulfillmentChannel.EnergyEarth.ToString(); FulfillmentRequestTopicClient.Send(message); } else if (item.FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSTariff) { message.Properties["channelType"] = FulfillmentChannel.GBASSTariff.ToString(); FulfillmentRequestTopicClient.Send(message); } else if (item.FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.GBASSCTLAdj) { message.Properties["channelType"] = FulfillmentChannel.GBASSCTLAdj.ToString(); FulfillmentRequestTopicClient.Send(message); } else if (item.FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.Cheque) { message.Properties["channelType"] = "SmartConnectCheque"; FulfillmentRequestTopicClient.Send(message); } //Call stored procedure to Update RewardTrx List <SqlParameter> RewardTrxParams = new List <SqlParameter>(); RewardTrxParams.Add(new SqlParameter("@RewardTrxID", item.RewardTrxID)); var RewardTrxID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.UpdateFulfillmentRequestTimestamp, RewardTrxParams); log.Verbose($"RewardTrx updated successfully. RewardTrID={RewardTrxID[0]}", "JE.RMS.Services.EvaluateRewardsTrx"); //Call stored procedure to Save MessageLog List <SqlParameter> MessageLogParams = new List <SqlParameter>(); MessageLogParams.Add(new SqlParameter("@RewardsTrxID", item.RewardTrxID)); MessageLogParams.Add(new SqlParameter("@MessageType", MessageType.RewardFulfillmentRequest.GetDescription())); MessageLogParams.Add(new SqlParameter("@IPAddress", "")); MessageLogParams.Add(new SqlParameter("@Message", reqObject)); MessageLogParams.Add(new SqlParameter("@RMSRewardID", null)); var MessageLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveMessageLog, MessageLogParams); log.Verbose($"MessageLog stored successfully. MessageLogID={MessageLogID[0]}", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); //Call stored procedure to Save RewardTrxChangeLog List <SqlParameter> RewardTrxChangeLogParams = new List <SqlParameter>(); RewardTrxChangeLogParams.Add(new SqlParameter("@RewardsTrxID", item.RewardTrxID.ToString())); RewardTrxChangeLogParams.Add(new SqlParameter("@RewardTrxStatus", "Sent for fulfillment")); RewardTrxChangeLogParams.Add(new SqlParameter("@Comment", string.Empty)); RewardTrxChangeLogParams.Add(new SqlParameter("@RMSRewardID", null)); var RewardTrxChangeLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveRewardTrxChangeLog, RewardTrxChangeLogParams); log.Verbose($"RewardTrxChangeLog stored successfully. RewardTrxChangeLogID={RewardTrxChangeLogID[0]}", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); } log.Verbose($"C# Timer trigger function executed at: {DateTime.Now}", "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); } catch (Exception ex) { log.Error($"Exception ={ex}", ex, "JE.RMS.Services.GetRewardsTrxReadyForFulfillment"); errormessage.Add(JsonConvert.SerializeObject(ex).ToString()); } }
private static string ProcessRequest(List <GetRewardsRequest> lstRewardsTrx, ICollector <string> errormessage, TraceWriter log) { try { RewardFulfillmentRequest RewardsRequestObj = new RewardFulfillmentRequest(); foreach (GetRewardsRequest item in lstRewardsTrx) { RewardFulfillmentRequestList rewardFulfillmentRequestList = new RewardFulfillmentRequestList(); rewardFulfillmentRequestList.RewardFulfillmentRequest = new RewardFulfillmentRequest(); RewardsRequestObj.RequestId = item.RequestId; RewardsRequestObj.TransactionType = item.TransactionType; RewardsRequestObj.RMSRewardID = item.RMSRewardID; RewardsRequestObj.Reward = new Reward(); RewardsRequestObj.Reward.ProductCode = item.ProductCode; RewardsRequestObj.Reward.ProductValue = item.ProductValue.ToString(); RewardsRequestObj.Reward.ProgramName = item.ProgramName; RewardsRequestObj.Reward.EffectiveDate = item.EffectiveDate; RewardsRequestObj.Reward.RewardType = item.RewardType; RewardsRequestObj.Customer = new CustomerJSON(); RewardsRequestObj.Customer.CustomerID = item.CustomerID; RewardsRequestObj.Customer.SourceSystemID = item.DBSourceSystemID.ToString(); RewardsRequestObj.Customer.SourceSystemName = item.SourceSystemShortName; RewardsRequestObj.Customer.SourceSystemUniqueID = item.SourceSystemUniqueID; RewardsRequestObj.Customer.SourceSystemUniqueIDType = item.SourceSystemUniqueIDType; RewardsRequestObj.Customer.MasterID = item.MasterID; RewardsRequestObj.Customer.Email = item.Email; RewardsRequestObj.Customer.FirstName = item.FirstName; RewardsRequestObj.Customer.LastName = item.LastName; RewardsRequestObj.Customer.CompanyName = item.CompanyName; RewardsRequestObj.Customer.AddressLine1 = item.AddressLine1; RewardsRequestObj.Customer.AddressLine2 = item.AddressLine2; RewardsRequestObj.Customer.City = item.City; RewardsRequestObj.Customer.StateProvince = item.StateProvince; RewardsRequestObj.Customer.ZipPostalCode = item.ZipPostalCode; RewardsRequestObj.Customer.Phone1 = item.Phone1; RewardsRequestObj.Customer.Product = item.Product; RewardsRequestObj.Customer.Language = item.LanguageCode; RewardsRequestObj.AdditionalData = JsonConvert.DeserializeObject <AdditionalData[]>(item.AdditionalData); rewardFulfillmentRequestList.RewardFulfillmentRequest = RewardsRequestObj; var reqObject = JsonConvert.SerializeObject(rewardFulfillmentRequestList); //Call stored procedure to Update RewardTrx List <SqlParameter> RewardTrxParams = new List <SqlParameter>(); RewardTrxParams.Add(new SqlParameter("@RewardTrxID", item.RewardTrxID)); var RewardTrxID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.UpdateFulfillmentRequestTimestamp, RewardTrxParams); log.Verbose($"RewardTrx updated successfully. RewardTrID={RewardTrxID[0]}", "JE.RMS.Services.ApplyReward"); //Call stored procedure to Save MessageLog List <SqlParameter> MessageLogParams = new List <SqlParameter>(); MessageLogParams.Add(new SqlParameter("@RewardsTrxID", item.RewardTrxID)); MessageLogParams.Add(new SqlParameter("@MessageType", MessageType.RewardFulfillmentRequest.GetDescription())); MessageLogParams.Add(new SqlParameter("@IPAddress", "")); MessageLogParams.Add(new SqlParameter("@Message", reqObject)); MessageLogParams.Add(new SqlParameter("@RMSRewardID", null)); var MessageLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveMessageLog, MessageLogParams); log.Verbose($"MessageLog stored successfully. MessageLogID={MessageLogID[0]}", "JE.RMS.Services.ApplyReward"); //Call stored procedure to Save RewardTrxChangeLog List <SqlParameter> RewardTrxChangeLogParams = new List <SqlParameter>(); RewardTrxChangeLogParams.Add(new SqlParameter("@RewardsTrxID", item.RewardTrxID.ToString())); RewardTrxChangeLogParams.Add(new SqlParameter("@RewardTrxStatus", "Sent for fulfillment")); RewardTrxChangeLogParams.Add(new SqlParameter("@Comment", string.Empty)); RewardTrxChangeLogParams.Add(new SqlParameter("@RMSRewardID", null)); var RewardTrxChangeLogID = MSSQLConnection.ExecuteStoredProcedure <long>(USPContstants.SaveRewardTrxChangeLog, RewardTrxChangeLogParams); log.Verbose($"RewardTrxChangeLog stored successfully. RewardTrxChangeLogID={RewardTrxChangeLogID[0]}", "JE.RMS.Services.ApplyReward"); if (item.FulfillmentChannelID == (int)Common.Constants.FulfillmentChannel.EnergyEarth) { using (HttpClient httpClient = new HttpClient()) { //Add Basic Authentication header httpClient.BaseAddress = new Uri(ConfigurationManager.AppSettings["ProcessFulfillmentUrl"].ToString()); var response = httpClient.PostAsJsonAsync(string.Empty, rewardFulfillmentRequestList).Result; if (response.IsSuccessStatusCode) { log.Verbose($"Success : Process fulfillment for EE", "JE.RMS.Services.ApplyReward"); } else { log.Error($"Error : Process fulfillment for EE", null, "JE.RMS.Services.ApplyReward"); return(response.Content.ReadAsStringAsync().Result); } } } } return("Success"); } catch (Exception ex) { log.Error($"Exception={ex}", ex, "JE.RMS.Services.ApplyReward"); errormessage.Add(JsonConvert.SerializeObject(ex).ToString()); return("Fail"); } }