ns-export
Version:
Export Record Type metadata to JSON
116 lines (105 loc) • 4.48 kB
JavaScript
'use strict';
var store = require('../store');
module.exports = function($html, metaObj, init) {
var $RecordIds = init.$RecordIds,
$Metadatas = init.$Metadatas;
this.getFieldMetadata = function(metaFieldObj, dataFields) {
var fieldId = metaFieldObj.id;
metaFieldObj.type = $html.find('fieldtype').text();
metaFieldObj.mandatory = $html.find('ismandatory').text() === 'T';
if ($html.find('isinactive').text() === 'T') {
metaFieldObj.inactive = true;
}
if ($html.find('isformula').text() === 'T') {
metaFieldObj.isFormula = true;
metaFieldObj.default = $html.find('defaultvalue').text();
}
// ##########################
// Translations
// ##########################
var translations = $html.find('machine[name=translations] line');
translations.each(function () {
var $translate = $(this);
if (!$translate.find('label').length) return;
var label = $translate.find('label').text(),
locale = $translate.find('locale').text(),
help = $translate.find('help').text();
metaFieldObj.translations[locale] = {
label: label,
help: help
};
});
var englishTrans = metaFieldObj.translations.en;
['label', 'help'].forEach(function(field) {
if (!englishTrans[field]) {
englishTrans[field] = $html.find(field+':first').text();
}
});
// ##########################
// validate Field Types
// ##########################
if (metaFieldObj.type === 'SELECT') {
var recIdRef = $html.find('fldcurselrectype');
if (recIdRef && recIdRef.length) {
metaFieldObj.recordType = $RecordIds[recIdRef.text()];
if (!metaFieldObj.recordType) {
metaFieldObj.recordType = parseInt(recIdRef.text());
console.log('----> NOT FOUND', '"' + recIdRef.text() + '" in ', metaObj.id, fieldId);
return 'invalid-field';
} else if (dataFields) {
dataFields.push(recIdRef.text());
}
} else {
console.log('----->>> NO SELECT', fieldId, metaFieldObj.type);
return 'invalid-field';
}
// ##########################
// Resolve Parents
// ##########################
if (metaFieldObj.recordType && $html.find('isparent').text() === 'T') {
var pType = metaFieldObj.recordType,
// clone this column
pField = JSON.parse(JSON.stringify(metaFieldObj));
pField.recordType = $RecordIds[metaObj.id];
pField.parentRef = true;
pField.noTranslation = "look: "+ pField.recordType;
delete pField.translations;
if (!$Metadatas[pType]) {
if (!$Metadatas['$$' + pType]) {
$Metadatas['$$' + pType] = {
code: pType,
fields: []
};
}
$Metadatas['$$' + pType].fields.push(pField);
} else {
if (!$Metadatas[pType].fields) {
$Metadatas[pType].fields = [];
}
$Metadatas[pType].fields.push(pField);
// re-save
store.saveMetadata($Metadatas[pType]);
}
metaFieldObj.parent = true;
}
} else if (~['DOCUMENT', 'IMAGE'].indexOf(metaFieldObj.type)) {
metaFieldObj.recordType = 'file'
}
var source = $html.find('sourcefrom');
if (source && source.length) {
metaFieldObj.source = {
column: source.text().toLowerCase(),
join: $html.find('sourcelist').text().toLowerCase(),
recordType: $RecordIds[$html.find('sourcelistrecordtype').text()]
};
}
// ##########################
// Verify SubTab
// ##########################
var subTab = $html.find('subtab');
if (subTab.length) {
metaFieldObj.tab = subTab.text();
}
return metaFieldObj;
};
};