private async Task <Counterparty> MapCommandToCounterparty(AddUpdateCounterpartyCommand command)
        {
            Counterparty counterparty = new Counterparty();

            counterparty.CounterpartyID            = command.CounterpartyID;
            counterparty.CounterpartyCode          = command.CounterpartyCode;
            counterparty.Description               = command.Description;
            counterparty.CounterpartyType          = command.CounterpartyType;
            counterparty.MDMId                     = command.MDMId;
            counterparty.IsDeactivated             = command.IsDeactivated;
            counterparty.CounterpartyTradeStatusId = command.CounterpartyTradeStatusId;
            counterparty.HeadofFamily              = command.HeadofFamily;
            counterparty.CountryId                 = command.CountryId;
            counterparty.ProvinceId                = command.ProvinceId;
            counterparty.C2CCode                   = command.C2CCode;
            counterparty.MDMCategoryCode           = command.MDMCategoryCode;
            counterparty.VATRegistrationNumber     = command.VATRegistrationNumber;
            counterparty.FiscalRegistrationNumber  = command.FiscalRegistrationNumber;
            counterparty.ContractTermId            = command.ContractTermId;
            counterparty.ACManagerId               = command.ACManagerId;
            counterparty.DepartmentId              = command.DepartmentId;
            counterparty.AlternateMailingAddress1  = command.AlternateMailingAddress1;
            counterparty.AlternateMailingAddress2  = command.AlternateMailingAddress2;
            counterparty.AlternateMailingAddress3  = command.AlternateMailingAddress3;
            counterparty.AlternateMailingAddress4  = command.AlternateMailingAddress4;
            counterparty.IntroductoryBrocker       = command.IntroductoryBrocker;

            counterparty.CounterpartyAddresses    = command.CounterpartyAddresses;
            counterparty.CounterpartyBankAccounts = command.CounterpartyBankAccounts;
            counterparty.CounterpartyBankAccountIntermediaries = command.CounterpartyBankAccountIntermediaries;
            counterparty.CounterpartyContacts     = command.CounterpartyContacts;
            counterparty.CounterpartyCompanies    = command.CounterpartyCompanies;
            counterparty.CounterpartyTaxes        = command.CounterpartyTaxes;
            counterparty.CounterpartyAccountTypes = command.CounterpartyAccountTypes;
            counterparty.CounterpartyMdmCategory  = command.CounterpartyMdmCategory;
            return(counterparty);
        }
        public async Task <IEnumerable <int> > Handle(AddUpdateCounterpartyCommand request, CancellationToken cancellationToken)
        {
            _unitOfWork.BeginTransaction();
            try
            {
                List <Counterparty> counterpartyList = new List <Counterparty>();
                var counterparty = await MapCommandToCounterparty(request);

                counterpartyList.Add(counterparty);
                var counterpartyIds = await _counterpartyRepository.AddUpdateCounterpartyAsync(counterpartyList, request.Company);

                if (counterparty.CounterpartyID != null && counterparty.CounterpartyID > 0)
                {
                    await _counterpartyRepository.DeleteCounterpartyDetailsAsync(counterpartyList, request.Company);
                }
                _unitOfWork.Commit();
                return(counterpartyIds);
            }
            catch
            {
                _unitOfWork.Rollback();
                throw;
            }
        }