Skip to content
Snippets Groups Projects
process.js 1.84 KiB
import("Attribute_lib");
import("KeywordRegistry_basic");
import("system.entities");
import("Util_lib");
import("Sql_lib");
import("system.vars");


function CommunicationBlacklist () 
{
    this.filter = CommunicationBlacklist.getMailRecipientBlacklistFilter();
    this.blacklistContactIds = new Set();
}

/**
 * @return {CommunicationBlacklist}
 */
CommunicationBlacklist.getMailRecipientBlacklistFilter = function ()
{
    var filters = newSelect("FILTER")
        .from("EMAIL_FILTER_HANDLING")
        .where("EMAIL_FILTER_HANDLING.FILTER_TYPE", $KeywordRegistry.emailFilterType$blacklist())
        .table();
    
    var filterMappingFn = function ([blacklistFilter])
    {
        blacklistFilter = JSON.parse(blacklistFilter);
        if (!blacklistFilter.filter || blacklistFilter.entity != "BulkMailRecipient_entity" || Utils.isNullOrEmpty(blacklistFilter.filter.childs))
            return null;
        
        return blacklistFilter.filter;
    };
    
    return {
        type: "group",
        operator: "AND",
        childs: filters.map(filterMappingFn).filter(Utils.isObject)
    };
}

CommunicationBlacklist.prototype.getFilter = function ()
{
    return this.filter;
}

CommunicationBlacklist.prototype.loadBlacklistRecipients = function (pBulkMailId)
{
    var blacklistLoadConfig = entities.createConfigForLoadingRows()
        .fields(["CONTACT_ID"])
        .entity("BulkMailRecipient_entity")
        .provider("RecipientsToBeMailed")
        .addParameter("BulkMailId_param", pBulkMailId)
        .filter(JSON.stringify(this.filter));
    var blacklist = entities.getRows(blacklistLoadConfig);
    blacklist.forEach(function (recipient)
    {
        this.blacklistContactIds.add(recipient["CONTACT_ID"]);
    }, this);
}

CommunicationBlacklist.prototype.hasContactId = function (pContactId)
{
    return this.blacklistContactIds.has(pContactId);
}