public async Task <int> FinalBuddyProcessing() { try { BSSAPIHelper bsshelper = new BSSAPIHelper(); OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); DatabaseResponse serviceCAF = await _orderAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString()); try { foreach (BuddyCheckList b in buddyActionList) { int process = await ProcessBuddy(b, config, (((List <ServiceFees>)serviceCAF.Results)).FirstOrDefault().ServiceCode); } List <BuddyCheckList> unProcessedBuddies = buddyActionList.Where(b => b.IsProcessed == false).ToList(); if (unProcessedBuddies != null && unProcessedBuddies.Count > 0) { foreach (BuddyCheckList upBuddy in unProcessedBuddies) { DatabaseResponse upBuddyCreateResponse = await _orderAccess.CreatePendingBuddyList(upBuddy); } return(0); } else { ProcessOrderQueueMessage(buddyActionList[0].OrderID); return(1); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } }
public async Task <int> RemoveBuddyHandler(int orderID, int customerID) { try { OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); DatabaseResponse checkBuddyResponse = await _orderAccess.CheckBuddyToRemove(orderID); if (checkBuddyResponse.ResponseCode == (int)DbReturnValue.RecordExists && checkBuddyResponse.Results != null) { BuddyToRemove buddyToRemove = (BuddyToRemove)checkBuddyResponse.Results; if (buddyToRemove.BuddyRemovalID > 0 && buddyToRemove.IsRemoved == 0 && buddyToRemove.IsPorted != 1) { BSSAPIHelper bsshelper = new BSSAPIHelper(); DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); DatabaseResponse serviceCAF = await _orderAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString()); DatabaseResponse requestIdToUpdateRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), customerID, (int)BSSCalls.ExistingSession, buddyToRemove.MobileNumber); BSSUpdateResponseObject bssUpdateResponse = new BSSUpdateResponseObject(); try { bssUpdateResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUpdateRes.Results, buddyToRemove.MobileNumber, true); DatabaseResponse updateBuddyRemoval = await _orderAccess.UpdateBuddyRemoval(buddyToRemove.BuddyRemovalID); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BuddyRemovalFailed) + " for Order : " + orderID); } } return(1); } else { return(0); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } }
public async Task <BuddyCheckList> ProcessBuddy(BuddyCheckList buddy) { try { BSSAPIHelper bsshelper = new BSSAPIHelper(); BuddyDataAccess _buddyAccess = new BuddyDataAccess(); DatabaseResponse configResponse = await _buddyAccess.GetConfiguration(ConfiType.BSS.ToString(), _connectionString); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); LogInfo.Information(JsonConvert.SerializeObject(config)); DatabaseResponse serviceCAF = await _buddyAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString(), _connectionString); DatabaseResponse requestIdRes = await _buddyAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.GetAssets.ToString(), buddy.CustomerID, (int)BSSCalls.NewSession, "", _connectionString); ResponseObject res = new ResponseObject(); try { res = await bsshelper.GetAssetInventory(config, (((List <ServiceFees>)serviceCAF.Results)).FirstOrDefault().ServiceCode, (BSSAssetRequest)requestIdRes.Results); LogInfo.Information(JsonConvert.SerializeObject(res)); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); buddy.IsProcessed = false; return(buddy); } string AssetToSubscribe = string.Empty; if (res != null && (int.Parse(res.Response.asset_details.total_record_count) > 0)) { AssetToSubscribe = bsshelper.GetAssetId(res); BSSNumbers numbers = new BSSNumbers(); numbers.FreeNumbers = bsshelper.GetFreeNumbers(res); //insert these number into database string json = bsshelper.GetJsonString(numbers.FreeNumbers); // json insert DatabaseResponse updateBssCallFeeNumbers = await _buddyAccess.UpdateBSSCallNumbers(json, ((BSSAssetRequest)requestIdRes.Results).userid, ((BSSAssetRequest)requestIdRes.Results).BSSCallLogID, _connectionString); //Block number _connectionString DatabaseResponse requestIdToUpdateRes = await _buddyAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), buddy.CustomerID, (int)BSSCalls.ExistingSession, AssetToSubscribe, _connectionString); BSSUpdateResponseObject bssUpdateResponse = new BSSUpdateResponseObject(); try { bssUpdateResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUpdateRes.Results, AssetToSubscribe, false); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); buddy.IsProcessed = false; return(buddy); } if (bssUpdateResponse != null && bsshelper.GetResponseCode(bssUpdateResponse) == "0") { // update buddy process BuddyNumberUpdate buddyToProcess = new BuddyNumberUpdate { OrderSubscriberID = buddy.OrderSubscriberID, UserId = ((BSSAssetRequest)requestIdRes.Results).userid, NewMobileNumber = AssetToSubscribe }; LogInfo.Information(JsonConvert.SerializeObject(buddyToProcess)); DatabaseResponse buddyProcessResponse = await _buddyAccess.ProcessBuddyPlan(buddyToProcess, _connectionString); LogInfo.Information(JsonConvert.SerializeObject(buddyProcessResponse)); if (buddyProcessResponse.ResponseCode == (int)DbReturnValue.CreateSuccess || buddyProcessResponse.ResponseCode == (int)DbReturnValue.BuddyAlreadyExists) { // update process status buddy.IsProcessed = true; return(buddy); } else { // buddy process failed buddy.IsProcessed = false; return(buddy); } } else { // buddy block failed buddy.IsProcessed = false; return(buddy); } } else { // no assets returned buddy.IsProcessed = false; return(buddy); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); buddy.IsProcessed = false; return(buddy); } }
public async Task <List <Recordset> > GetInvoiceList(int customerID) { BSSAPIHelper bsshelper = new BSSAPIHelper(); OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); DatabaseResponse systemConfigResponse = await _orderAccess.GetConfiguration(ConfiType.System.ToString()); DatabaseResponse bssConfigResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi bssConfig = bsshelper.GetGridConfig((List <Dictionary <string, string> >)bssConfigResponse.Results); GridSystemConfig systemConfig = bsshelper.GetGridSystemConfig((List <Dictionary <string, string> >)systemConfigResponse.Results); DatabaseResponse accountResponse = await _orderAccess.GetCustomerBSSAccountNumber(customerID); if (accountResponse.ResponseCode == (int)DbReturnValue.RecordExists) { if (!string.IsNullOrEmpty(((BSSAccount)accountResponse.Results).AccountNumber)) { // Get default daterange in month from config by key - BSSInvoiceDefaultDateRangeInMonths DatabaseResponse dateRangeResponse = ConfigHelper.GetValueByKey(ConfigKeys.BSSInvoiceDefaultDateRangeInMonths.ToString(), _iconfiguration); int rangeInMonths = int.Parse(((string)dateRangeResponse.Results)); DatabaseResponse requestIdRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Customer.ToString(), BSSApis.GetInvoiceDetails.ToString(), customerID, 0, ""); BSSInvoiceResponseObject invoiceResponse = await bsshelper.GetBSSCustomerInvoice(bssConfig, ((BSSAssetRequest)requestIdRes.Results).request_id, ((BSSAccount)accountResponse.Results).AccountNumber, rangeInMonths); if (invoiceResponse.Response.result_code == "0") { // Get download link prefix from config DatabaseResponse downloadLinkResponse = ConfigHelper.GetValueByKey(ConfigKeys.BSSInvoiceDownloadLink.ToString(), _iconfiguration); string downloadLinkPrefix = (string)downloadLinkResponse.Results; foreach (Recordset recordset in invoiceResponse.Response.invoice_details.recordset) { recordset.download_url = downloadLinkPrefix + recordset.bill_id; } return(invoiceResponse.Response.invoice_details.recordset); } else { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.NoInvoiceFound) + " : " + customerID); return(new List <Recordset>()); } } else { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.MandatoryFieldMissing) + " for Customer - " + customerID); return(new List <Recordset>()); } } else { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.FailedToGetBillingAccount)); return(new List <Recordset>()); } }
public async Task <int> ProcessBuddy(BuddyCheckList buddy, GridBSSConfi config, int serviceCode) { try { BSSAPIHelper bsshelper = new BSSAPIHelper(); OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); DatabaseResponse requestIdRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.GetAssets.ToString(), buddy.CustomerID, (int)BSSCalls.NewSession, ""); ResponseObject res = new ResponseObject(); try { res = await bsshelper.GetAssetInventory(config, serviceCode, (BSSAssetRequest)requestIdRes.Results); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); buddy.IsProcessed = false; return(0); } string AssetToSubscribe = string.Empty; if (res != null) { AssetToSubscribe = bsshelper.GetAssetId(res); BSSNumbers numbers = new BSSNumbers(); numbers.FreeNumbers = bsshelper.GetFreeNumbers(res); //insert these number into database string json = bsshelper.GetJsonString(numbers.FreeNumbers); // json insert DatabaseResponse updateBssCallFeeNumbers = await _orderAccess.UpdateBSSCallNumbers(json, ((BSSAssetRequest)requestIdRes.Results).userid, ((BSSAssetRequest)requestIdRes.Results).BSSCallLogID); } else { return(0); } if (res != null && (int.Parse(res.Response.asset_details.total_record_count) > 0)) { //Block number DatabaseResponse requestIdToUpdateRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), buddy.CustomerID, (int)BSSCalls.ExistingSession, AssetToSubscribe); BSSUpdateResponseObject bssUpdateResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUpdateRes.Results, AssetToSubscribe, false); if (bsshelper.GetResponseCode(bssUpdateResponse) == "0") { // update buddy process BuddyNumberUpdate buddyToProcess = new BuddyNumberUpdate { OrderSubscriberID = buddy.OrderSubscriberID, UserId = ((BSSAssetRequest)requestIdRes.Results).userid, NewMobileNumber = AssetToSubscribe }; DatabaseResponse buddyProcessResponse = await _orderAccess.ProcessBuddyPlan(buddyToProcess); if (buddyProcessResponse.ResponseCode == (int)DbReturnValue.CreateSuccess) { // update process status buddy.IsProcessed = true; return(1); } else { // buddy process failed buddy.IsProcessed = false; return(0); } } else { // buddy block failed buddy.IsProcessed = false; LogInfo.Error(EnumExtensions.GetDescription(CommonErrors.UpdateAssetBlockingFailed)); return(0); } } else { // no assets returned buddy.IsProcessed = false; LogInfo.Error(EnumExtensions.GetDescription(CommonErrors.GetAssetFailed)); return(0); } } catch (Exception ex) { buddy.IsProcessed = false; LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } }
public async Task <IActionResult> UpdateNRICIDDetails([FromHeader(Name = "Grid-General-Token")] string Token, [FromForm] UpdateOrderPersonalIDDetailsPublicRequest request) { try { if (!ModelState.IsValid) { return(Ok(new OperationResponse { HasSucceeded = false, IsDomainValidationErrors = true, Message = string.Join("; ", ModelState.Values .SelectMany(x => x.Errors) .Select(x => x.ErrorMessage)) })); } TokenValidationHelper tokenValidationHelper = new TokenValidationHelper(); if (!tokenValidationHelper.ValidateGenericToken(Token, _iconfiguration)) { return(Ok(new OperationResponse { HasSucceeded = false, Message = Core.Extensions.EnumExtensions.GetDescription(DbReturnValue.TokenAuthFailed), IsDomainValidationErrors = true })); } CommonDataAccess commonDataAccess = new CommonDataAccess(_iconfiguration); var tokenResult = await commonDataAccess.ValidateVerificationToken(request.RequestToken); if (tokenResult.ResponseCode != (int)DbReturnValue.RecordExists) { return(Ok(new OperationResponse { HasSucceeded = false, Message = EnumExtensions.GetDescription(DbReturnValue.RequestTokenExpired), IsDomainValidationErrors = false })); } AccountDataAccess _AccountAccess = new AccountDataAccess(_iconfiguration); CommonDataAccess _commonDataAccess = new CommonDataAccess(_iconfiguration); DatabaseResponse customerResponse = await _commonDataAccess.GetCustomerIdFromOrderId(request.OrderID); if (customerResponse.ResponseCode == (int)DbReturnValue.RecordExists) { IFormFile frontImage = request.IDImageFront; IFormFile backImage = request.IDImageBack; BSSAPIHelper bsshelper = new BSSAPIHelper(); MiscHelper configHelper = new MiscHelper(); OrderDetails customerOrderDetails = await _commonDataAccess.GetOrderDetails(request.OrderID); NRICDetailsRequest personalDetails = new NRICDetailsRequest { OrderID = request.OrderID, IdentityCardNumber = customerOrderDetails.IdentityCardNumber, IdentityCardType = customerOrderDetails.IdentityCardType, Nationality = customerOrderDetails.Nationality, NameInNRIC = customerOrderDetails.Name, DOB = customerOrderDetails.DOB, Expiry = customerOrderDetails.ExpiryDate, }; //process file if uploaded - non null if (frontImage != null && backImage != null) { DatabaseResponse awsConfigResponse = await _commonDataAccess.GetConfiguration(ConfiType.AWS.ToString()); if (awsConfigResponse != null && awsConfigResponse.ResponseCode == (int)DbReturnValue.RecordExists) { GridAWSS3Config awsConfig = configHelper.GetGridAwsConfig((List <Dictionary <string, string> >)awsConfigResponse.Results); AmazonS3 s3Helper = new AmazonS3(awsConfig); string fileNameFront = customerOrderDetails.IdentityCardNumber.Substring(1, customerOrderDetails.IdentityCardNumber.Length - 2) + "_Front_" + DateTime.Now.ToString("yyMMddhhmmss") + Path.GetExtension(frontImage.FileName); //Grid_IDNUMBER_yyyymmddhhmmss.extension UploadResponse s3UploadResponse = await s3Helper.UploadFile(frontImage, fileNameFront); if (s3UploadResponse.HasSucceed) { personalDetails.FrontImage = awsConfig.AWSEndPoint + s3UploadResponse.FileName; } else { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.S3UploadFailed)); } string fileNameBack = customerOrderDetails.IdentityCardNumber.Substring(1, customerOrderDetails.IdentityCardNumber.Length - 2) + "_Back_" + DateTime.Now.ToString("yyMMddhhmmss") + Path.GetExtension(frontImage.FileName); //Grid_IDNUMBER_yyyymmddhhmmss.extension s3UploadResponse = await s3Helper.UploadFile(backImage, fileNameBack); if (s3UploadResponse.HasSucceed) { personalDetails.BackImage = awsConfig.AWSEndPoint + s3UploadResponse.FileName; } else { LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.S3UploadFailed)); } } else { // unable to get aws config LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.FailedToGetConfiguration)); } } //file //update ID ReUpload details DatabaseResponse updateNRICResponse = await _commonDataAccess.UpdateNRICDetails(null, 0, personalDetails); if (updateNRICResponse.ResponseCode == (int)DbReturnValue.UpdateSuccess) { DatabaseResponse updateTokenStatus = await _commonDataAccess.UpdateTokenForVerificationRequests(request.OrderID); // EmailResponse emailResponse = (EmailResponse)updateNRICResponse.Results; // string emailStatus= await SendAdminEmailNotificationOnIDReUpload(emailResponse.Email, emailResponse.OrderNumber); return(Ok(new OperationResponse { HasSucceeded = true, Message = EnumExtensions.GetDescription(DbReturnValue.UpdateSuccess), IsDomainValidationErrors = false })); } else if (updateNRICResponse.ResponseCode == (int)DbReturnValue.UpdateSuccessSendEmail) { DatabaseResponse updateTokenStatus = await _commonDataAccess.UpdateTokenForVerificationRequests(request.OrderID); // EmailResponse emailResponse = (EmailResponse)updateNRICResponse.Results; // string emailStatus = await SendAdminEmailNotificationOnIDReUpload(emailResponse.Email, emailResponse.OrderNumber); // LogInfo.Warning(EnumExtensions.GetDescription(DbReturnValue.UpdateSuccessSendEmail) + "for " + request.OrderID + "Order"); return(Ok(new OperationResponse { HasSucceeded = true, Message = EnumExtensions.GetDescription(DbReturnValue.UpdateSuccessSendEmail), IsDomainValidationErrors = false })); } else if (updateNRICResponse.ResponseCode == (int)DbReturnValue.NotExists) { LogInfo.Warning(EnumExtensions.GetDescription(DbReturnValue.NotExists) + " " + EnumExtensions.GetDescription(CommonErrors.ImageAlreadyUploaded) + " Order" + request.OrderID); return(Ok(new OperationResponse { HasSucceeded = false, Message = EnumExtensions.GetDescription(CommonErrors.ImageAlreadyUploaded), IsDomainValidationErrors = false })); } else { LogInfo.Warning(EnumExtensions.GetDescription(DbReturnValue.UpdationFailed)); return(Ok(new OperationResponse { HasSucceeded = false, Message = EnumExtensions.GetDescription(DbReturnValue.UpdationFailed), IsDomainValidationErrors = false })); } } else { // failed to locate customer LogInfo.Warning(EnumExtensions.GetDescription(CommonErrors.FailedToGetCustomer)); return(Ok(new OperationResponse { HasSucceeded = false, Message = EnumExtensions.GetDescription(CommonErrors.FailedToGetCustomer), IsDomainValidationErrors = false })); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(Ok(new OperationResponse { HasSucceeded = false, Message = StatusMessages.ServerError, IsDomainValidationErrors = false })); } }
public async Task <string> GetNumberFromBSS(int CustomerID) { OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); BSSAPIHelper bsshelper = new BSSAPIHelper(); DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); DatabaseResponse serviceCAF = await _orderAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString()); DatabaseResponse requestIdRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.GetAssets.ToString(), CustomerID, (int)BSSCalls.NewSession, ""); ResponseObject res = new ResponseObject(); try { res = await bsshelper.GetAssetInventory(config, (((List <ServiceFees>)serviceCAF.Results)).FirstOrDefault().ServiceCode, (BSSAssetRequest)requestIdRes.Results); if (res != null && res.Response != null && res.Response.asset_details != null && (int.Parse(res.Response.asset_details.total_record_count) > 0)) { BSSNumbers numbers = new BSSNumbers(); numbers.FreeNumbers = bsshelper.GetFreeNumbers(res); string number = numbers.FreeNumbers[0].MobileNumber; string json = bsshelper.GetJsonString(numbers.FreeNumbers); // json insert DatabaseResponse updateBssCallFreeNumbers = await _orderAccess.UpdateBSSCallNumbers(json, ((BSSAssetRequest)requestIdRes.Results).userid, ((BSSAssetRequest)requestIdRes.Results).BSSCallLogID); DatabaseResponse requestIdToUpdateMainLineRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), CustomerID, (int)BSSCalls.ExistingSession, number); BSSUpdateResponseObject bssUpdateResponse = new BSSUpdateResponseObject(); try { //line blocking bssUpdateResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUpdateMainLineRes.Results, number, false); if (bsshelper.GetResponseCode(bssUpdateResponse) == "0") { return(number); } else { return(""); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); return(""); } } else { return(""); } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); return(""); } }
public async Task <int> HandleRollbackOnAdditionalBuddyProcessingFailure(int customerID, int orderID, List <AdditionalBuddy> additionalBuddies) { try { OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); BSSAPIHelper bsshelper = new BSSAPIHelper(); DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); DatabaseResponse serviceCAF = await _orderAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString()); //unblock all subscribers for the order foreach (AdditionalBuddy buddy in additionalBuddies) { // unblock mainline subscriber - not ported if (buddy.IsPorted == 0) { DatabaseResponse requestIdToUnblockSubscribers = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), customerID, (int)BSSCalls.ExistingSession, buddy.MobileNumber); BSSUpdateResponseObject bssUpdateAdditionalBuddyMainlineUnblockResponse = new BSSUpdateResponseObject(); try { bssUpdateAdditionalBuddyMainlineUnblockResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUnblockSubscribers.Results, buddy.MobileNumber, true); if (bsshelper.GetResponseCode(bssUpdateAdditionalBuddyMainlineUnblockResponse) != "0") { //failed to unblock subscriber number add it to buddy removal table DatabaseResponse logUnblockFailedSubscriber = await _orderAccess.LogUnblockFailedMainline(orderID, buddy); if (logUnblockFailedSubscriber.ResponseCode != (int)DbReturnValue.CreateSuccess) { LogInfo.Warning("Unlocking failed subscriber loging to BuddyRemoval table failed for OrderID:" + orderID + ", MobileNumber:" + buddy.MobileNumber); } } } catch { //failed to unblock subscriber number add it to buddy removal table DatabaseResponse logUnblockFailedSubscriber = await _orderAccess.LogUnblockFailedMainline(orderID, buddy); if (logUnblockFailedSubscriber.ResponseCode != (int)DbReturnValue.CreateSuccess) { LogInfo.Warning("Unlocking failed subscriber loging to BuddyRemoval table failed for OrderID:" + orderID + ", MobileNumber:" + buddy.MobileNumber); } } } } //remove additional buddy for the order from additional buddy table DatabaseResponse removeAdditionalBuddyRes = await _orderAccess.RemoveAdditionalBuddyOnRollBackOrder(orderID); //rollback order DatabaseResponse rollbackResponse = await _orderAccess.RollBackOrder(orderID, "Rollback while processing additional buddy line"); return(1); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } }
public async Task <int> AddRemoveBuddyHandler(int orderID, int customerID) { try { OrderDataAccess _orderAccess = new OrderDataAccess(_iconfiguration); // call remove buddy handler here int isRemoved = await RemoveBuddyHandler(orderID, customerID); DatabaseResponse checkAdditionalBuddyResponse = await _orderAccess.CheckAdditionalBuddy(orderID); // check additional Buddy if (checkAdditionalBuddyResponse.ResponseCode == (int)DbReturnValue.RecordExists && checkAdditionalBuddyResponse.Results != null) { List <AdditionalBuddy> additionalBuddies = (List <AdditionalBuddy>)checkAdditionalBuddyResponse.Results; foreach (AdditionalBuddy buddy in additionalBuddies) { if (buddy.OrderAdditionalBuddyID > 0 && buddy.IsProcessed == 0) { BSSAPIHelper bsshelper = new BSSAPIHelper(); DatabaseResponse configResponse = await _orderAccess.GetConfiguration(ConfiType.BSS.ToString()); GridBSSConfi config = bsshelper.GetGridConfig((List <Dictionary <string, string> >)configResponse.Results); DatabaseResponse serviceCAF = await _orderAccess.GetBSSServiceCategoryAndFee(ServiceTypes.Free.ToString()); DatabaseResponse requestIdToGetAdditionalBuddy = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.GetAssets.ToString(), customerID, (int)BSSCalls.NewSession, ""); ResponseObject res = new ResponseObject(); BSSNumbers numbers = new BSSNumbers(); //get a free number for additional buddy try { res = await bsshelper.GetAssetInventory(config, (((List <ServiceFees>)serviceCAF.Results)).FirstOrDefault().ServiceCode, (BSSAssetRequest)requestIdToGetAdditionalBuddy.Results); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BSSConnectionFailed)); // need to unblock all subscribers for the order and roll back the order and return int buddyRollback = await HandleRollbackOnAdditionalBuddyProcessingFailure(customerID, orderID, additionalBuddies); // rollback on bss failure return(3); } if (res != null && res.Response != null && res.Response.asset_details != null && (int.Parse(res.Response.asset_details.total_record_count) > 0)) { numbers.FreeNumbers = bsshelper.GetFreeNumbers(res); //insert these number into database string json = bsshelper.GetJsonString(numbers.FreeNumbers); // json insert DatabaseResponse updateBssCallFeeNumbers = await _orderAccess.UpdateBSSCallNumbers(json, ((BSSAssetRequest)requestIdToGetAdditionalBuddy.Results).userid, ((BSSAssetRequest)requestIdToGetAdditionalBuddy.Results).BSSCallLogID); DatabaseResponse requestIdToUpdateAdditionalBuddyRes = await _orderAccess.GetBssApiRequestId(GridMicroservices.Order.ToString(), BSSApis.UpdateAssetStatus.ToString(), customerID, (int)BSSCalls.ExistingSession, numbers.FreeNumbers[0].MobileNumber); BSSUpdateResponseObject bssUpdateAdditionalBuddyResponse = new BSSUpdateResponseObject(); // block the number for additional buddy try { bssUpdateAdditionalBuddyResponse = await bsshelper.UpdateAssetBlockNumber(config, (BSSAssetRequest)requestIdToUpdateAdditionalBuddyRes.Results, numbers.FreeNumbers[0].MobileNumber, false); // create buddy subscriber with blocked number and the existing main line if (bsshelper.GetResponseCode(bssUpdateAdditionalBuddyResponse) == "0") { CreateBuddySubscriber additinalBuddySubscriberToCreate = new CreateBuddySubscriber { OrderID = orderID, MobileNumber = numbers.FreeNumbers[0].MobileNumber, MainLineMobileNumber = buddy.MobileNumber, UserId = ((BSSAssetRequest)requestIdToUpdateAdditionalBuddyRes.Results).userid }; DatabaseResponse createAdditionalBuddySubscriberResponse = await _orderAccess.CreateBuddySubscriber(additinalBuddySubscriberToCreate); // update if (createAdditionalBuddySubscriberResponse.ResponseCode == (int)DbReturnValue.CreateSuccess) { DatabaseResponse updateBuddyProcessedResponse = await _orderAccess.UpdateAdditionalBuddyProcessing(buddy.OrderAdditionalBuddyID); } } } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical) + EnumExtensions.GetDescription(CommonErrors.BuddyRemovalFailed) + " for Order : " + orderID); } } else { // rollback on no assets retunred int buddyRollback = await HandleRollbackOnAdditionalBuddyProcessingFailure(customerID, orderID, additionalBuddies); return(2); } } } } return(1); } catch (Exception ex) { LogInfo.Error(new ExceptionHelper().GetLogString(ex, ErrorLevel.Critical)); return(0); } }