Доброго времени суток!
Требует помощь с пониманием как работает TimezoneContainer у контакта, для того чтобы по аналогии сделать её для контрагента. Кто с таким сталкивался, прошу помощи.
Нравится
уууух. пришло время костылей
[javascript]
define("AccountPageV2", ["TimezoneGenerator", "TimezoneMixin"], function() {
return {
entitySchemaName: "Account",
mixins: {
TimezoneMixin: "Terrasoft.TimezoneMixin"
},
methods: {
onEntityInitialized: function() {
this.callParent(arguments);
this.mixins.TimezoneMixin.init.call(this);
},
onDetailChanged: function(detail) {
this.callParent(arguments);
if (detail.schemaName === "AccountAddressDetailV2") {
this.updateTimezone();
}
},
updateTimezone: function() {
this.mixins.TimezoneMixin.init.call(this);
},
setContactTimeConfig: function(accId, callback, scope) { //метод из TimeZoneMixin, его надо расковырять
var func = function(contactTimeConfig) {
var isValid = this.isConfigValid(contactTimeConfig);
if (isValid) {
this.set("ContactTimeConfig", contactTimeConfig);
if (callback && this.Ext.isFunction(callback)) {
callback.call(scope);
}
} else {
this.log(Resources.localizableStrings.ContactTimeConfigInvalidFormatException,
Terrasoft.LogMessageType.WARNING);
}
};
this.getAccountTimeZone(func, accId);
},
getAccountTimeZone: function(callback, accId) {
var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "AccountAddress"});
esq.addColumn("City.TimeZone.Name", "TZName");
esq.addColumn("City.TimeZone.Offset", "Offset");
esq.addColumn("City.Name", "CityName");
esq.filters.addItem(esq.createColumnFilterWithParameter(3, "Account", accId));
esq.getEntityCollection(function (result) {
var info = result.collection.collection.items[0].values; //По-идее нужно лезть в кучу миксинов/утилит/хелперов с сервисами, но можно и так вытащить инфу по городу. Тут я беру 1 попавшийся из AccountAddress. Можно дополнить фильтрами
var offset = info.Offset === "GMT" ? 0 : parseInt(info.Offset.split("GMT")[1].split(":")[0]);
var time = new Date(new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate(), new Date().getUTCHours(), new Date().getUTCMinutes(), new Date().getUTCSeconds());
time.setUTCHours(time.getUTCHours() + offset);
var contactTimeConfig = {
equals: true,
location: info.CityName,
minutesOffset: offset*60,
time: time,
timeZone: info.TZName
};
this.callback.call(this.scope, contactTimeConfig);
}.bind({callback: callback, scope: this}));
}
},
diff: [
{
"operation": "insert",
"name": "TimeZoneContainer",
"parentName": "AccountPhotoContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.CONTAINER,
"generator": "TimezoneGenerator.generateTimeZone",
"wrapClass": ["timezone-container"],
"visible": true,
"timeZoneCaption": {"bindTo": "TimeZoneCaption"},
"timeZoneCity": {"bindTo": "TimeZoneCity"},
"tips": []
}
}
]};
});
[/javascript]
Ну и ещё надо навесить немного стилей (пр. убрать часы под контейнер с обогащение данных). Но мне лень)
Варфоломеев Данила, благодарю)
Дальше разберусь что да как.