Часовой пояс для контрагента

Доброго времени суток!
Требует помощь с пониманием как работает TimezoneContainer у контакта, для того чтобы по аналогии сделать её для контрагента. Кто с таким сталкивался, прошу помощи.

Нравится

2 комментария

уууух. пришло время костылей

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": []
			}
		}
	]};
});

Ну и ещё надо навесить немного стилей (пр. убрать часы под контейнер с обогащение данных). Но мне лень)

Варфоломеев Данила, благодарю)
Дальше разберусь что да как.

Показать все комментарии