//private async Task<PortalActionResult> MyobContactCustomerDataSyncAysnc(string accountId, string partnerPortalId) //{ // var account = ZohoRepository.Accounts.FirstOrDefault(x => x.AccountId == accountId); // if (account == null) // { // return new PortalActionResult // { // IsSuccess = false, // Message = string.Format($"Could not find partner account:{0}", accountId) // }; // } // PortalActionResult result = ValidateAccount(account); // if (!result.IsSuccess) // { // return result; // } // var accountExist = _myobApiService.IsZohoAccountExistInMyob(account.AccountId, account.MyobDataFile); // if (accountExist) // { // return new PortalActionResult // { // IsSuccess = true, // Message = $"[Account:{account.AccountId}]: {account.AccountName} already exist in Myob" // }; // } // //PortalActionResult insertResult = await InsertMyobContactCustomer(account, partnerPortalId); // return new PortalActionResult // { // IsSuccess = true // }; //} //private async Task<PortalActionResult> InsertMyobContactCustomer(ZohoAccount account, string partnerPortalId) //{ // Customer item = new Customer(); // OnDisplayMessage($"[PartnerPortal:{partnerPortalId}] Insert Myob Contact->Customer"); // await ZohoRepository.AddActionLogAsync(new ZohoActionLog // { // TableName = TableName, // Action = "[Start] Partner Portal Insert Myob Customer", // ActionData = account.AccountId, // ActionResult = string.Empty, // CreatedBy = LoggerName, // CreatedTime = DateTime.Now, // Stageindicator = 1 // }); // item.IsIndividual = false; // item.IsActive = true; // item.CompanyName = account.AccountName; // item.CustomField1 = new Identifier // { // Label = "Zoho Acc UUID", // Value = account.AccountId // }; // item.Addresses = new List<Address> // { // new Address // { // Location = 1, // Street = account.BillingStreet, // City = account.BillingCity, // State = account.BillingState, // PostCode = account.BillingCode, // Country = account.BillingCountry, // Phone1 = account.Phone, // Fax = account.Fax, // Email = account.CompanyEmail, // Website = account.Website // } // }; // var sellingDetailsOptions = _myobApiService.ContactCustomerImportOptions[account.MyobDataFile].SellingDetailsOptions; // item.SellingDetails = new CustomerSellingDetails // { // SaleLayout = (InvoiceLayoutType)Enum.Parse(typeof(InvoiceLayoutType), sellingDetailsOptions.SaleLayout), // PrintedForm = sellingDetailsOptions.PrintedForm, // InvoiceDelivery = (DocumentAction)Enum.Parse(typeof(DocumentAction), sellingDetailsOptions.InvoiceDelivery), // ABN = account.AbnCompanyNum, // TaxCode = new TaxCodeLink // { UID = new Guid(sellingDetailsOptions.TaxCode) }, // FreightTaxCode = new TaxCodeLink // { UID = new Guid(sellingDetailsOptions.FreightTaxCode) }, // UseCustomerTaxCode = true, // Terms = new CustomerTerms // { // PaymentIsDue = (TermsPaymentType)Enum.Parse(typeof(TermsPaymentType), sellingDetailsOptions.TermsPaymentIsDue) // } // }; // var result = await _myobApiService.InsertContactCustomerAsync(item, account.MyobDataFile); // OnDisplayMessage($"[PartnerPortal:{partnerPortalId}] Insert Myob Contact->Customer Finished"); // await ZohoRepository.AddActionLogAsync(new ZohoActionLog // { // TableName = TableName, // Action = "[Finish] Partner Portal Insert Myob Customer", // ActionData = partnerPortalId, // ActionResult = JsonConvert.SerializeObject(new { Request = item, Response = result }), // CreatedBy = LoggerName, // CreatedTime = DateTime.Now, // Stageindicator = 1 // }); // item.Uid = new Guid(result); // return new PortalActionResult // { // IsSuccess = true // }; //} private async Task <string> ValidatePartnerPortalAsync(string partnerPortalId) { if (string.IsNullOrEmpty(partnerPortalId)) { return("Could not find Partner Portal Id"); } var partnerPortal = ZohoRepository.PartnerPortals.FirstOrDefault(x => x.PartnerPortalID.Equals(partnerPortalId)); if (partnerPortal == null) { return($"Could not find partner portal record for id:{partnerPortalId}"); } var accountId = partnerPortal.PartnerAccount; var contactId = partnerPortal.PortalAdmin; //check User already has a PortalAdmin var count = ZohoRepository.PartnerPortals.Count(x => x.PartnerAccount == accountId); if (count > 1) { return($"Only allow one Portal Admin for Account :{accountId}"); } //check only one contact should have portal admin enabled //2017-08-03 we enabled partner portal reassign portal admin //var adminContact = ZohoRepository.Contacts.FirstOrDefault(x => x.AccountID == accountId && x.PortalAdmin == true); //if (adminContact != null) //{ // return new PortalActionResult // { // IsSuccess = false, // Message = string.Format("Account :{0} already have a portal admin {1} ignore this update", // accountId, adminContact.ContactID) // }; //} //in ACL, we do not care about Account information, we only link Company to Account using contact id //var account = _zohoRepository.Accounts.FirstOrDefault(x => x.AccountID == accountId); //if (account == null) //{ // return new PortalActionResult // { // IsSuccess = false, // Resutl = string.Format("Could not find partner account:{0}", accountId) // }; //} var contact = ZohoRepository.Contacts.FirstOrDefault(x => x.ContactID == contactId); if (contact == null) { return($"[PartnerPortal: {partnerPortalId}] Could not find partner portal admin contact:{contactId}"); } var user = await _userManager.FindByEmailAsync(contact.Email); if (user?.CompanyId != null && user?.CompanyId.Value > 0) { var company = await _userManager.GetCompanyAsync(user.CompanyId.Value); if (company.CompanyZohoAccountId != accountId) { return ($"[PartnerPortal: {partnerPortalId}] Portal Admin already exist in ACL but belong to other Zoho Account"); } } if (user != null) { var userZohoContact = await _userManager.GetUserZohoContactAsync(user.Id); if (userZohoContact?.ZohoContactId != contactId) { if (userZohoContact != null) { return ($"[PartnerPortal: {partnerPortalId}] Portal Admin Email already registered in ACL and belong to another contact {userZohoContact.ZohoContactId} "); } } } return(string.Empty); }