Example #1
0
        private async Task <CustomerAccountResult> Link(LinkCustomerWithCompanyInput input)
        {
            _logger.LogInformation(GetLogMessage(
                                       $@"Linking Account, Account Manager: {input.AccountManagerId}, Customer Lookup Info: {input.EmailAddress} ({input.CompanyName})"));

            CustomerAccountResult retVal = new CustomerAccountResult();


            var cu = _customerService.Repository.Queryable()
                     .FindByOrganizationNameAndEmail(input.EmailAddress, input.CompanyName).FirstOrDefaultAsync();

            await Task.WhenAll(cu);

            if (cu.Result == null)
            {
                retVal.ErrorMessage = "Customer not found";
                return(retVal);
            }

            var input2 = new CustomerAccountInput
            {
                CustomerId             = cu.Result.CustomerId,
                CustomerOrganizationId = cu.Result.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             = cu.Result.CustomerId,
                        CustomerOrganizationId = cu.Result.OrganizationId,
                        Succeeded   = true,
                        BuyerNumber = output.BuyerNumber,
                        Number      = output.Number
                    };

                    RaiseEvent(new CustomerAccountLinkedEvent
                    {
                        AccountManagerId             = input.AccountManagerId,
                        AccountManagerOrganizationId = input.AccountManagerOrganizationId,
                        CustomerId             = cu.Result.CustomerId,
                        CustomerOrganizationId = cu.Result.OrganizationId
                    });
                });
            }


            return(retVal);
        }
Example #2
0
        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);
        }