You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
6.1 KiB
180 lines
6.1 KiB
/** @odoo-module **/
|
|
import { patch } from "@web/core/utils/patch";
|
|
import { _t } from "@web/core/l10n/translation";
|
|
import { useRef } from "@odoo/owl";
|
|
import { AttachmentList } from "@mail/core/common/attachment_list";
|
|
import { isEventHandled, markEventHandled } from "@web/core/utils/misc";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
|
|
|
|
patch(AttachmentList.prototype, {
|
|
/**
|
|
* @override
|
|
*/
|
|
setup() {
|
|
super.setup();
|
|
this.orm = useService("orm");
|
|
this.action = useService("action");
|
|
},
|
|
/**
|
|
Open window to edit image record
|
|
**/
|
|
async onClickEditImgRecord(ev, attachment){
|
|
ev.stopPropagation();
|
|
ev.preventDefault();
|
|
markEventHandled(ev, 'AttachmentImage.onClickEditImgRecord');
|
|
await this.env.services.action.doAction({
|
|
name: _t("Attachment"),
|
|
type: 'ir.actions.act_window',
|
|
view_mode: 'form',
|
|
views: [[false, 'form']],
|
|
target: 'new',
|
|
res_id: attachment.id,
|
|
res_model: 'ir.attachment',
|
|
context: { create: false },
|
|
}, {
|
|
onClose: async () => {
|
|
await location.reload();
|
|
},
|
|
});
|
|
},
|
|
|
|
onClickImage(ev) {
|
|
if (isEventHandled(ev, 'onClickEditImgRecord')) {
|
|
return;
|
|
}
|
|
if (isEventHandled(ev, 'onClickImageEdit')) {
|
|
return;
|
|
}
|
|
this._super.apply(this, arguments);
|
|
},
|
|
|
|
/**
|
|
Open a window to edit image
|
|
**/
|
|
async onClickImageEdit(ev, attachment){
|
|
var self = this;
|
|
markEventHandled(ev, 'AttachmentImage.onClickImageEdit');
|
|
var imageEditor = new tui.ImageEditor('.tui-image-editor-container', {
|
|
includeUI: {
|
|
loadImage: {
|
|
path: "/web/image/ir.attachment/"+attachment.id+"/datas",
|
|
name: 'SampleImage'
|
|
},
|
|
imageSize: {
|
|
oldWidth: "0",
|
|
oldHeight: "0",
|
|
newWidth: "300",
|
|
newHeight: "90"
|
|
},
|
|
initMenu: 'filter',
|
|
menuBarPosition: 'bottom'
|
|
},
|
|
cssMaxWidth: 500,
|
|
cssMaxHeight: 590,
|
|
usageStatistics: false
|
|
});
|
|
$('#imageEditor').css("display","block");
|
|
$('.tui-image-editor-header-buttons .tui-image-editor-download-btn').replaceWith(`<button class="tui-image-editor-save-btn">Save</button>`)
|
|
$('.tui-image-editor-header-buttons').append(`<div class="tui-image-editor-close-btn"
|
|
style="background-color: #fff;border: 1px solid #ddd;color: #222;
|
|
"font-family: sans-serif;font-size:= 12px">Close</div>`)
|
|
$('.tui-image-editor-header-buttons .tui-image-editor-close-btn').on('click', this.CloseImageEditor);
|
|
$('.tui-image-editor-header-buttons .tui-image-editor-save-btn').on('click', () => {
|
|
const myImage = imageEditor.toDataURL();
|
|
|
|
var attachment_id = attachment.id
|
|
self.orm.call("ir.attachment", "save_edited_image", [attachment_id,myImage]).then(function (data){
|
|
location.reload();
|
|
});
|
|
});
|
|
},
|
|
|
|
CloseImageEditor: function(){
|
|
var edit = jQuery.noConflict();
|
|
edit('#imageEditor').css("display","none");
|
|
},
|
|
|
|
/**
|
|
* Records can be edited by altering the file name and adding tags.
|
|
*/
|
|
async onClickEditRecord(ev, attachment){
|
|
ev.stopPropagation();
|
|
ev.preventDefault();
|
|
await this.env.services.action.doAction({
|
|
name: _t("Attachment"),
|
|
type: 'ir.actions.act_window',
|
|
view_mode: 'form',
|
|
views: [[false, 'form']],
|
|
target: 'new',
|
|
res_id: attachment.id,
|
|
res_model: 'ir.attachment',
|
|
context: { create: false },
|
|
}, {
|
|
onClose: async () => {
|
|
await location.reload();
|
|
},
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Offline Preview of file type 'docx', 'xlsx' and 'pdf'
|
|
*/
|
|
async onClickPreviewOffline(ev, attachment){
|
|
ev.stopPropagation();
|
|
ev.preventDefault();
|
|
var self = this;
|
|
var type = $(ev.currentTarget).data("type")
|
|
var modal = $('#xlsx_preview')[0]
|
|
modal.querySelector('#FileHead').textContent = ev.target.name
|
|
if (type === 'xls' || type === 'xlsx' || type === 'docx') {
|
|
modal.style.display = "block";
|
|
var preview = await this.orm.call
|
|
("ir.attachment", "decode_content", [parseInt(ev.target.id),type]).then(function (data) {
|
|
if (type === 'xls' || type === 'xlsx'){
|
|
$('.MyDocs').empty();
|
|
$('.XlsxTable').append(data)
|
|
var frame = $(".dataframe").attr('id', 'MyTable');
|
|
}
|
|
else if(type === 'docx'){
|
|
$('.MyDocs').empty();
|
|
for (let para = 0; para < data.length; para++) {
|
|
$('.MyDocs').append(data[para])
|
|
};
|
|
}
|
|
});
|
|
}
|
|
else{
|
|
self.fileViewer.open(attachment, self.props.attachments)
|
|
}
|
|
},
|
|
|
|
/**
|
|
Close preview window
|
|
**/
|
|
stopPreviewButton(ev){
|
|
ev.stopPropagation();
|
|
ev.preventDefault();
|
|
var modal = $('#xlsx_preview')[0]
|
|
modal.style.display = "none";
|
|
},
|
|
|
|
/**
|
|
* For generating Qr Code contain download link of attachment.
|
|
*/
|
|
async _onClickQrCode(ev){
|
|
ev.stopPropagation();
|
|
ev.preventDefault();
|
|
var self = this;
|
|
await this.orm.call
|
|
("ir.attachment", "generate_qr_code", [parseInt(ev.target.id)]).then(function (data){
|
|
var act = self.env.services.action.doAction({
|
|
type: 'ir.actions.report',
|
|
report_type: 'qweb-pdf',
|
|
report_name: 'chatter_attachments_manager.attachment_qr_report_template',
|
|
report_file: 'chatter_attachments_manager.attachment_qr_report_template',
|
|
data: data,
|
|
});
|
|
});
|
|
},
|
|
});
|
|
|