Skip to content
Snippets Groups Projects
Commit 2da3aebd authored by S.Listl's avatar S.Listl
Browse files

Indexes added, attribute usage inheritance

parent 142dd3fb
No related branches found
No related tags found
No related merge requests found
import("Attribute_lib");
AttributeUsageUtil.removeDuplicates();
\ No newline at end of file
......@@ -3,10 +3,16 @@ import("system.result");
import("system.db");
import("system.vars");
import("Sql_lib");
import("Attribute_lib");
var usages = db.array(db.COLUMN, SqlCondition.begin()
.andPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.AB_ATTRIBUTEID"))
.buildSql("select OBJECT_TYPE from AB_ATTRIBUTEUSAGE"));
var usageStr = translate.text("Usage");
var retStr = "\u00A0"; // \u00A0 -> space character that doesn't get trimmed
if (vars.get("$field.ATTRIBUTE_TYPE").trim() != $AttributeTypes.COMBOVALUE)
{
var usages = db.array(db.COLUMN, SqlCondition.begin()
.andPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.AB_ATTRIBUTEID"))
.buildSql("select OBJECT_TYPE from AB_ATTRIBUTEUSAGE"));
if (usages.length)
retStr = translate.text("Usage") + ": " + usages.join(", ");
}
result.string(usages.length ? usageStr + ": " + usages.join(", ") : "\u00A0"); // \u00A0 -> space character that doesn't get trimmed
\ No newline at end of file
result.string(retStr);
\ No newline at end of file
......@@ -10,4 +10,4 @@ var itemcount = db.cell(SqlCondition.begin()
if(itemcount == "0")
result.string(neon.COMPONENTSTATE_DISABLED);
else
result.string(neon.COMPONENTSTATE_AUTO);
\ No newline at end of file
result.string(neon.COMPONENTSTATE_EDITABLE);
\ No newline at end of file
......@@ -229,17 +229,15 @@
<entityParameter>
<name>FilteredAttributeIds_param</name>
<valueProcess>%aditoprj%/entity/SalesprojectCompetition_entity/entityfields/attributes/children/filteredattributeids_param/valueProcess.js</valueProcess>
<expose v="false" />
</entityParameter>
<entityParameter>
<name>ObjectRowId_param</name>
<valueProcess>%aditoprj%/entity/SalesprojectCompetition_entity/entityfields/attributes/children/objectrowid_param/valueProcess.js</valueProcess>
<expose v="false" />
<triggerRecalculation v="true" />
</entityParameter>
<entityParameter>
<name>ObjectType_param</name>
<valueProcess>%aditoprj%/entity/SalesprojectCompetition_entity/entityfields/attributes/children/objecttype_param/valueProcess.js</valueProcess>
<expose v="false" />
</entityParameter>
<entityParameter>
<name>DisplaySimpleName_param</name>
......
import("system.vars");
import("system.result");
result.string("Organisation");
if (vars.get("$field.CONTACT_ID"))
result.string("Organisation");
else
result.string("true");
\ No newline at end of file
import("system.logging");
import("system.util");
import("system.datetime");
import("system.translate");
import("system.neon");
......@@ -486,3 +488,145 @@ AttributeTypeUtil.getTypeColumnIndex = function (pAttributeType)
AttributeTypeUtil._initTypeColumnData();
return this._typeColumnMap[pAttributeType.trim()];
}
/*********************************************************************************************************************/
/**
* @class
*/
function AttributeUsageUtil () {}
AttributeUsageUtil.insertChildrenUsages = function (pAttributeId, pObjectType)
{
var table = "AB_ATTRIBUTEUSAGE";
var columns = ["AB_ATTRIBUTEUSAGEID", "AB_ATTRIBUTE_ID", "OBJECT_TYPE"];
var types = db.getColumnTypes(table, columns);
var sqlSelect = "select AB_ATTRIBUTEID, "
+ " exists (select AB_ATTRIBUTEUSAGEID from AB_ATTRIBUTEUSAGE where AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID and OBJECT_TYPE = '"
+ pObjectType + "') from AB_ATTRIBUTE";
var inserts = [];
_addInserts(pAttributeId, pObjectType);
db.inserts(inserts);
function _addInserts (pAttributeId, pObjectType)
{
var condition = SqlCondition.begin()
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeId);
var attributes = db.table(condition.buildSql(sqlSelect));
attributes.forEach(function (row)
{
if (row[1] != "true")
{
let values = [util.getNewUUID(), row[0], pObjectType];
inserts.push([table, columns, types, values]);
}
_addInserts(row[0], pObjectType);
});
}
}
AttributeUsageUtil.updateChildrenUsages = function (pAttributeId, pOldObjectType, pNewObjectType)
{
if (!pNewObjectType)
return;
var table = "AB_ATTRIBUTEUSAGE";
var sqlSelect = "select AB_ATTRIBUTEID, AB_ATTRIBUTEUSAGEID, "
+ " exists (select AB_ATTRIBUTEUSAGEID from AB_ATTRIBUTEUSAGE where AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID and OBJECT_TYPE = '"
+ pNewObjectType + "')"
+ " from AB_ATTRIBUTE left join AB_ATTRIBUTEUSAGE on AB_ATTRIBUTEID = AB_ATTRIBUTE_ID and OBJECT_TYPE = '" + pOldObjectType + "'";
var updateIds = [];
//it is possible that the new objectType is already in a subordinate attribute
//and an update could cause a duplicate entry so one has to be deleted
var deleteIds = [];
_addUpdateIds(pAttributeId, pOldObjectType);
if (updateIds.length)
db.updateData(table, ["OBJECT_TYPE"], null, [pNewObjectType], SqlCondition.begin()
.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID in ('" + updateIds.join("','") + "')")
.build("1=2")
);
if (deleteIds.length)
db.deleteData(table, SqlCondition.begin()
.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID in ('" + deleteIds.join("','") + "')")
.build("1=2"));
function _addUpdateIds (pAttributeId)
{
var condition = SqlCondition.begin()
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeId);
var attributes = db.table(condition.buildSql(sqlSelect));
attributes.forEach(function (row)
{
if (row[1] && row[2] == "true")
deleteIds.push(row[1]);
else if (row[1])
updateIds.push(row[1]);
_addUpdateIds(row[0]);
});
}
}
AttributeUsageUtil.deleteChildrenUsages = function (pAttributeId, pObjectType)
{
var table = "AB_ATTRIBUTEUSAGE";
var sqlSelect = "select AB_ATTRIBUTEID, AB_ATTRIBUTEUSAGEID "
+ " from AB_ATTRIBUTE left join AB_ATTRIBUTEUSAGE on AB_ATTRIBUTEID = AB_ATTRIBUTE_ID and OBJECT_TYPE = '" + pObjectType + "'";
var deleteIds = [];
_addDeleteIds(pAttributeId, pObjectType);
if (deleteIds.length)
db.deleteData(table, SqlCondition.begin()
.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID in ('" + deleteIds.join("','") + "')")
.build("1=2"));
function _addDeleteIds (pAttributeId)
{
var condition = SqlCondition.begin()
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_TYPE", $AttributeTypes.COMBOVALUE, "# != ?")
.andPrepare("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pAttributeId);
var attributes = db.table(condition.buildSql(sqlSelect));
attributes.forEach(function (row)
{
if (row[1])
deleteIds.push(row[1]);
_addDeleteIds(row[0]);
});
}
}
AttributeUsageUtil.removeDuplicates = function (pAttributeId)
{
var condition = SqlCondition.begin()
.and("exists (select AB_ATTRIBUTEUSAGEID from AB_ATTRIBUTEUSAGE AU where AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AU.AB_ATTRIBUTE_ID "
+ "and AB_ATTRIBUTEUSAGE.OBJECT_TYPE = AU.OBJECT_TYPE and AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID != AU.AB_ATTRIBUTEUSAGEID)");
if (pAttributeId)
condition.andPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", pAttributeId);
var duplicates = db.table(condition.buildSql("select AB_ATTRIBUTEUSAGEID, AB_ATTRIBUTE_ID, OBJECT_TYPE from AB_ATTRIBUTEUSAGE"));
var usageObj = {};
var deleteCond = SqlCondition.begin();
duplicates.forEach(function (row)
{
if (!(row[1] in this))
this[row[1]] = {};
if (row[2] in this[row[1]])
deleteCond.orPrepare("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID", row[0]);
this[row[1]][row[2]] = true;
}, usageObj);
if (deleteCond.isSet())
db.deleteData("AB_ATTRIBUTEUSAGE", deleteCond.build("1=2"));
}
\ No newline at end of file
......@@ -148,6 +148,8 @@ OfferUtils.openOfferReport = function (pOfferID)
);
var itemData = db.table(offerItemSql);
if (itemData.length == 0)
return;
// TODO: AddrObject implementieren
//var addrobj = new AddrObject(contactId);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment