public bool CanCreate(SapBusinessPartner sapBusinessPartner, SapSaleOrderModel billingRequest) { if (sapBusinessPartner == null) { _logger.LogError($"Failed at generating billing request for user: {billingRequest.UserId}."); return(false); } if (string.IsNullOrEmpty(sapBusinessPartner.FederalTaxID)) { _logger.LogError($"Can not create billing request for user id : {billingRequest.UserId}, FiscalId: {billingRequest.FiscalID} and user type: {billingRequest.PlanType}"); return(false); } return(true); }
public async Task <SapBusinessPartner> TryGetBusinessPartner(int userId, string cuit, int userPlanTypeId) { var incompleteCardCode = _businessPartnerMapper.MapDopplerUserIdToSapBusinessPartnerId(userId, userPlanTypeId); var message = new HttpRequestMessage { RequestUri = new Uri($"{_sapServiceConfig.BaseServerUrl}{_sapServiceConfig.BusinessPartnerConfig.Endpoint}?$filter=startswith(CardCode,'{incompleteCardCode}') and Frozen eq 'tNO'"), Method = HttpMethod.Get }; var cookies = await StartSession(); message.Headers.Add("Cookie", cookies.B1Session); message.Headers.Add("Cookie", cookies.RouteId); var client = _httpClientFactory.CreateClient(); var sapResponse = await client.SendAsync(message); // Should throw error because if the business partner doesn't exists it returns an empty json. sapResponse.EnsureSuccessStatusCode(); var fiscalId = string.IsNullOrEmpty(cuit) ? null : cuit; var businessPartnersList = JsonConvert.DeserializeObject <SapBusinessPartnerList>(await sapResponse.Content.ReadAsStringAsync()); var businessPartner = businessPartnersList.value.FirstOrDefault(x => x.FederalTaxID == fiscalId); if (businessPartner == null) { var amountBusinessPartnersForSameUser = businessPartnersList.value.Count(); if (amountBusinessPartnersForSameUser >= _sapConfig.MaxAmountAllowedAccounts) { throw new ArgumentOutOfRangeException("User can't have more than 10 accounts in Sap"); } businessPartner = new SapBusinessPartner() { CardCode = $"{incompleteCardCode}{amountBusinessPartnersForSameUser}" }; } return(businessPartner); }