private async Task <CustomerAccountResult> Link(LinkCustomerInput input) { _logger.LogInformation(GetLogMessage( $@"Linking Account, Account Manager: {input.AccountManagerId}, Customer Lookup Info: {input.EmailAddress}")); CustomerAccountResult retVal = new CustomerAccountResult(); var cu = await _customers.Queryable() .Include(x => x.Person).ThenInclude(x => x.ApplicationUser) .Include(x => x.OrganizationCustomers) .Where(x => x.Person.ApplicationUser.Email == input.EmailAddress) .FirstAsync(); if (cu.OrganizationCustomers.Count > 0) { var orgCu = cu.OrganizationCustomers.First(); var input2 = new CustomerAccountInput { CustomerId = cu.Id, CustomerOrganizationId = orgCu.OrganizationId, PaymentTermId = input.PaymentTermId.GetValueOrDefault(1) }; input2.InjectFrom(input); var output = await Create(input2); if (output.Succeeded) { await Task.Run(() => { retVal = new CustomerAccountResult() { AccountManagerId = input.AccountManagerId, AccountManagerOrganizationId = input.AccountManagerOrganizationId, CustomerId = orgCu.CustomerId, CustomerOrganizationId = orgCu.OrganizationId, Succeeded = true, BuyerNumber = output.BuyerNumber, Number = output.Number }; RaiseEvent(new CustomerAccountLinkedEvent { AccountManagerId = input.AccountManagerId, AccountManagerOrganizationId = input.AccountManagerOrganizationId, CustomerId = orgCu.CustomerId, CustomerOrganizationId = orgCu.OrganizationId }); }); } } return(retVal); }
public async Task <CustomerAccountResult> LinkOrganizationCustomer(IOrganizationCustomer customer) { _logger.LogInformation(GetLogMessage("Customer: {0}; Organization: {1}"), customer.CustomerId, customer.OrganizationId); var retVal = new CustomerAccountResult() { CustomerId = customer.CustomerId, CustomerOrganizationId = customer.OrganizationId }; var customerOrganization = await _organizations .Queryable() .Include(x => x.Customer) .ThenInclude(x => x.OrganizationMarketer) .ThenInclude(x => x.Organization) .ThenInclude(x => x.ProviderOrganization) .FirstAsync(); var agencyOrganization = customerOrganization.Customer.OrganizationMarketer.Organization; _logger.LogDebug(GetLogMessage("Agency Organization Id: {0}"), agencyOrganization.Id); if (agencyOrganization.ProviderOrganization != null) { _logger.LogDebug(GetLogMessage("Provider Agency found")); var c = _customers .Queryable().Include(x => x.Person).ThenInclude(x => x.ApplicationUser) .First(x => x.Id == customer.CustomerId); retVal.AccountManagerOrganizationId = agencyOrganization.Id; retVal.AccountManagerId = agencyOrganization.ProviderOrganization.DefaultAccountManagerId; var input = new LinkCustomerInput() { AccountManagerId = agencyOrganization.ProviderOrganization.DefaultAccountManagerId, AccountManagerOrganizationId = agencyOrganization.Id, EmailAddress = c.Person.ApplicationUser.Email, }; _logger.LogDebug(GetLogMessage("Linking {@input}"), input); retVal = await Link(input); _logger.LogDebug(GetLogMessage("Response {@retVal}"), retVal); } else { retVal.Succeeded = true; _logger.LogDebug(GetLogMessage("Referrer Provider Organization not found," + " it shouldn't happen but it's not the end of the world")); } return(retVal); }
public async Task <CustomerAccountResult> LinkOrganizationCustomer(IProviderAgencyOwner ao, LinkCustomerInput input) { input.AccountManagerOrganizationId = ao.OrganizationId; return(await Link(input)); }
public async Task <CustomerAccountResult> LinkOrganizationCustomer(IOrganizationAccountManager am, LinkCustomerInput input) { input.AccountManagerId = am.AccountManagerId; input.AccountManagerOrganizationId = am.OrganizationId; return(await Link(input)); }