let accountNameToDelete = "";
$(document).ready(async function () {
await ShowPopupMessage( "CP-Remove-Account-Confirm","#removeCustomerAccountContent");
})
//triggered when adding a location
$("#btn-map-location").on("click", function () {
//This is to test commit functionality
//This is to test commit
showLoader();
let customerNumber = $("#customerNumber").val();
if (customerNumber) {
//get the account details from account table based on the account number entered
apiService.getItems(
"accounts?$select=accountid,name,address1_composite,accountnumber&$filter=accountnumber eq '" + customerNumber + "'"
)
.then((data) => {
if (data.value.length > 0) {
let accountData = {
"ricnt_Account@odata.bind": `/accounts(${data.value[0].accountid})`,
"ricnt_Contact@odata.bind": `/contacts(${$("#contact-id").val()})`
};
//checks if the account is already added
apiService.getItems(
"ricnt_contactaccountmappings?$select=ricnt_contactaccountmappingid,ricnt_Account,ricnt_Contact&$expand=ricnt_Account($select=accountnumber),ricnt_Contact($select=contactid)&$filter=ricnt_Account/accountnumber eq '" + data.value[0].accountnumber + "' and ricnt_Contact/contactid eq '" + $("#contact-id").val() + "'"
)
.then((data) => {
if (data.value.length == 0) {
//add the account to contact account mapping table
apiService.postItem("ricnt_contactaccountmappings", accountData)
.then((res, status, xhr) => {
hideLoader();
showSuccessToast("Account added successfully.");
populateAccountTable();
$("#customerNumber").val("");
populateAccountDropdown();
})
.catch((error) => {
hideLoader();
showErrorToast("Failed to create order.");
console.error("Error creating order:", error);
});
}
else {
hideLoader();
showErrorToast("Account is already added.");
}
})
.catch((error) => {
hideLoader();
showErrorToast("Failed to get account details.");
console.error("Failed to get account details", error);
});
}
else {
hideLoader();
showErrorToast("Invalid account number.");
}
})
.catch((error) => {
hideLoader();
showErrorToast("Failed to get account details.");
console.error("Failed to get account details", error);
});
}
else {
showErrorToast("Customer number is required.");
hideLoader();
}
});
// triggered when clicking on Add/Remove button
$("#add-remove-location").on("click", function () {
populateAccountTable();
});
function populateAccountTable() {
let userAccountDetails = "";
showLoader();
//get account details of the current user
apiService.getItems(
"ricnt_contactaccountmappings?$select=ricnt_contactaccountmappingid,ricnt_Account,ricnt_Contact&$expand=ricnt_Account($select=accountnumber,name,address1_composite),ricnt_Contact($select=contactid)&$filter=ricnt_Contact/contactid eq '" + $("#contact-id").val() + "'"
)
.then((data) => {
if (data.value.length > 0) {
data.value.forEach(element => {
userAccountDetails += `
| ${element.ricnt_Account.name} |
${element.ricnt_Account.accountnumber} |
${element.ricnt_Account.address1_composite ?? "-"} |
|
`;
});
}
//poulate account table
$("#added-accounts").empty();
$("#added-accounts").append(userAccountDetails);
hideLoader();
})
.catch((error) => {
hideLoader();
showErrorToast("Failed to get account details.");
console.error("Failed to get account details", error);
});
}
function deleteAccountConfirm(id, accountnumber) {
if(userAccountDetailsArray.length ==1) {
showErrorToast("At least one account must remain linked to this customer.");
return;
}
$("#account-name-delete").text($("#" + id).data("value"));
$("#txt-account-to-delete").val(id);
$("#txt-account-number-to-delete").val(accountnumber);
accountNameToDelete = $("#"+id).data("value");
$("#changeLocationModal").modal('hide');
$("#removeAccountModal").modal('show');
}
function deleteAccount() {
showLoader();
apiService.deleteItem("ricnt_contactaccountmappings", $("#txt-account-to-delete").val())
.then(async (data) => {
showSuccessToast("Account deleted successfully.");
populateAccountTable();
$('input[type="checkbox"][value="' + $("#txt-account-number-to-delete").val() + '"]').parent().hide();
let accountNumberToDelete = $("#txt-account-number-to-delete").val();
let accountLabelToDelete = accountNameToDelete + " - " + accountNumberToDelete;
selectedAccountLabels = selectedAccountLabels.filter(item => item != accountLabelToDelete);
selectedAccounts = selectedAccounts.filter(item => item != accountNumberToDelete);
sessionStorage.setItem('selectedAccounts', JSON.stringify(selectedAccounts));
sessionStorage.setItem('selectedAccountLabels', JSON.stringify(selectedAccountLabels));
//updateLocationDropdownButton();
await setDefaultAccount();
location.reload();
})
.catch((error) => {
hideLoader();
showErrorToast("Failed to delete account.");
console.error("Failed to delete account", error);
})
}
async function setDefaultAccount(){
const [currentPrimaryAccount, accountMappingsList] = await Promise.all([
getCurrentPrimaryAccount(),
getAccountMappings()
]);
if (!accountMappingsList || accountMappingsList.length === 0) {
console.log("No account mappings found.");
hideLoader();
return;
}
// If the current primary exists in mapping list, do nothing
const primaryInMapping = accountMappingsList.some(
a => a.accountid === currentPrimaryAccount?.accountid
);
if (primaryInMapping) return;
// Sort mapping accounts by accountnumber ascending
accountMappingsList.sort((a, b) => {
if (a.accountnumber < b.accountnumber) return -1;
if (a.accountnumber > b.accountnumber) return 1;
return 0;
});
const topMostAccount = accountMappingsList[0];
// Update contact with new primary account
const data = {
"msdyn_accountnumber@odata.bind": `/accounts(${topMostAccount.accountid})`
};
const tableName = "contacts";
const itemId = $("#contact-id").val();
showLoader();
return apiService.updateItem(tableName, itemId, data)
.then(response => {
hideLoader();
console.log("Primary account updated successfully!");
})
.catch(error => {
hideLoader();
console.error("Error updating primary account:", error);
showErrorToast("Failed to primary account. Check console for details.");
});
}
async function getCurrentPrimaryAccount() {
try {
const data = await apiService.getItems(
"contacts?$select=contactid,_msdyn_accountnumber_value&$filter=contactid eq '" + $("#contact-id").val() + "'"
);
if (data.value && data.value.length > 0) {
const primaryAccount = data.value[0];
if (primaryAccount) {
return {
accountid: primaryAccount._msdyn_accountnumber_value,
name: primaryAccount["_msdyn_accountnumber_value@OData.Community.Display.V1.FormattedValue"]
};
}
}
return null;
} catch (error) {
hideLoader();
showErrorToast("Failed to get primary account details.");
console.error("Failed to get primary account details", error);
return null;
}
}
async function getAccountMappings() {
try {
const data = await apiService.getItems(
"ricnt_contactaccountmappings?$select=ricnt_contactaccountmappingid&$expand=ricnt_Account($select=accountid,accountnumber,name),ricnt_Contact($select=contactid)&$filter=ricnt_Contact/contactid eq '" + $("#contact-id").val() + "'"
);
if (!data.value || data.value.length === 0) return [];
return data.value
.map(m => m.ricnt_Account) // extract the account object
.filter(a => a && a.accountid && a.accountnumber) // only valid accounts
.map(a => ({
accountid: a.accountid,
accountnumber: a.accountnumber,
name: a.name
}));
} catch (error) {
hideLoader();
showErrorToast("Failed to get account mappings.");
console.error("Failed to get account mappings", error);
return [];
}
}