Files
odoo_source/addons/document/static/src/js/document.js
T
Lucas Perais 6c9e45576e [FIX] document: display create_date of attachment timezone aware (#20242)
Before this commit, when putting the mouse over an attachment in the attachment drop menu list, the date time displayed was UTC only.
After this commit, we convert that value to the correct timezone datetime.

OPW 776704
2017-10-18 14:25:22 +02:00

190 lines
6.3 KiB
JavaScript

odoo.define('document.document', function (require) {
"use strict";
var core = require('web.core');
var Dialog = require('web.Dialog');
var framework = require('web.framework');
var Sidebar = require('web.Sidebar');
var field_utils = require('web.field_utils');
var _t = core._t;
Sidebar.include({
/**
* @override
*/
init : function (parent, options) {
this._super.apply(this, arguments);
if (options.viewType === "form") {
this.sections.splice(1, 0, { 'name' : 'files', 'label' : _t('Attachment(s)'), });
this.items.files = [];
}
this.fileuploadId = _.uniqueId('oe_fileupload');
$(window).on(this.fileuploadId, this._onFileUploaded.bind(this));
},
/**
* Get the attachment linked to the record when the toolbar started
*
* @override
*/
start: function () {
var _super = this._super.bind(this);
this._updateAttachments().then(_super);
},
/**
* @override
*/
destroy: function () {
$(window).off(this.fileuploadId);
this._super.apply(this, arguments);
},
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* @override
*/
updateEnv: function (env) {
this.env = env;
this._updateAttachments().then(this._redraw.bind(this));
},
//--------------------------------------------------------------------------
// Private
//--------------------------------------------------------------------------
/**
* Process the attachments then rerender the toolbar
*
* @private
* @param {Object} attachments
*/
_processAttachments: function (attachments) {
//to display number in name if more then one attachment which has same name.
var self = this;
_.chain(attachments)
.groupBy(function (attachment) { return attachment.name; })
.each(function (attachment) {
if (attachment.length > 1) {
_.map(attachment, function (attachment, i) {
attachment.name = _.str.sprintf(_t("%s (%s)"), attachment.name, i+1);
});
}
});
_.each(attachments,function (a) {
a.label = a.name;
if (a.type === "binary") {
a.url = '/web/content/' + a.id + '?download=true';
}
a.create_date = field_utils.parse.datetime(a.create_date, 'create_date', {isUTC: true});
a.create_date_string = field_utils.format.datetime(a.create_date, 'create_date', self.env.context.params);
a.write_date = field_utils.parse.datetime(a.write_date, 'write_date', {isUTC: true});
a.write_date_string = field_utils.format.datetime(a.write_date, 'write_date', self.env.context.params);
});
this.items.files = attachments;
},
/**
* @private
* @override
*/
_redraw: function () {
this._super.apply(this, arguments);
this.$('.o_sidebar_add_attachment .o_form_binary_form')
.change(this._onAddAttachment.bind(this));
this.$('.o_sidebar_delete_attachment')
.click(this._onDeleteAttachment.bind(this));
},
/**
* Update the attachments to be displayed in the attachment section
* of the toolbar
*
* @private
*/
_updateAttachments: function () {
var activeId = this.env.activeIds[0];
if (!activeId) {
this.items.files = [];
return $.when();
} else {
var domain = [
['res_model', '=', this.env.model],
['res_id', '=', activeId],
['type', 'in', ['binary', 'url']]
];
var fields = ['name', 'url', 'type',
'create_uid', 'create_date', 'write_uid', 'write_date'];
return this._rpc({
model: 'ir.attachment',
method: 'search_read',
context: this.env.context,
domain: domain,
fields: fields,
}).then(this._processAttachments.bind(this));
}
},
//--------------------------------------------------------------------------
// Handlers
//--------------------------------------------------------------------------
/**
* Method triggered when user click on 'add attachment' and select a file
*
* @private
* @param {Event} event
*/
_onAddAttachment: function (event) {
var $event = $(event.target);
if ($event.val() !== '') {
var $binaryForm = this.$('form.o_form_binary_form');
$binaryForm.submit();
$binaryForm.find('input[type=file]').prop('disabled', true);
$binaryForm.find('button').prop('disabled', true).find('img, span').toggle();
this.$('.o_sidebar_add_attachment a').text(_t('Uploading...'));
framework.blockUI();
}
},
/**
* Method triggered when user delete an attachment
*
* @private
* @param {Event} event
*/
_onDeleteAttachment: function (event) {
event.preventDefault();
var self = this;
var $event = $(event.currentTarget);
var options = {
confirm_callback: function () {
self._rpc({
model: 'ir.attachment',
method: 'unlink',
args: [parseInt($event.attr('data-id'), 10)],
})
.then(self._updateAttachments.bind(self))
.then(self._redraw.bind(self));
}
};
Dialog.confirm(this, _t("Do you really want to delete this attachment ?"), options);
},
/**
* Handler called when the upload is done
*
* @private
*/
_onFileUploaded: function () {
var attachments = Array.prototype.slice.call(arguments, 1);
var uploadErrors = _.filter(attachments, function (attachment) {
return attachment.error;
});
if (uploadErrors.length) {
this.do_warn(_t('Uploading Error'), uploadErrors[0].error);
}
this._updateAttachments().then(this._redraw.bind(this));
framework.unblockUI();
}
});
});