Browse Source

commit inicial

robert2206 8 years ago
commit
29e8cb9ac2

+ 1 - 0
__init__.py

@@ -0,0 +1 @@
+# -*- coding: utf-8 -*-

BIN
__init__.pyc


+ 12 - 0
__openerp__.py

@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+{
+    'name': "krazy_report",
+    'author': "Your Company",
+    'website': "http://www.yourcompany.com",
+    'category': 'Report',
+    'version': '0.1',
+    'depends': ['base', 'report'],
+    'data': ['krazy_report.xml'],
+    'qweb': ['static/src/xml/*.xml'],
+    'application': True
+}

+ 43 - 0
krazy_report.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<openerp>
+    <data>
+        <template id="assets_backend" name="krazy_report_assets" inherit_id="web.assets_backend">
+            <xpath expr="." position="inside">
+                <link rel="stylesheet" href="/krazy_report/static/src/css/master.css"/>
+                <script type="text/javascript" src="/krazy_report/static/src/js/vendor/jspdf.min.js"/>
+                <script type="text/javascript" src="/krazy_report/static/src/js/vendor/plugins/autotable.js"/>
+                <script type="text/javascript" src="/krazy_report/static/src/js/vendor/plugins/autoprint.js"/>
+                <script type="text/javascript" src="/krazy_report/static/src/js/krazy_report.js"/>
+            </xpath>
+        </template>
+
+        <menuitem id="main_krazy_report_menu" name="Informes" />
+        <menuitem id="krazy_report_menu" name="Informes" parent="main_krazy_report_menu" />
+
+        <record id="action_krazy_reportpage" model="ir.actions.client">
+            <field name="name">Report</field>
+            <field name="tag">krazy_report.report</field>
+        </record>
+
+        <record id="action_krazy_report_page_new_window" model="ir.actions.client">
+            <field name="name">Report</field>
+            <field name="tag">krazy_report.report_new_window</field>
+        </record>
+
+        <record id="action_krazy_report_page_modal" model="ir.actions.client">
+            <field name="name">Report</field>
+            <field name="tag">krazy_report.report_modal</field>
+        </record>
+
+        <record id="action_krazy_report_page_qweb" model="ir.actions.client">
+            <field name="name">Report</field>
+            <field name="tag">krazy_report.report_qweb</field>
+        </record>
+
+        <menuitem id="report_page_krazy_report_menu" name="Reporte Embebido" parent="krazy_report_menu" sequence="1" action="action_krazy_reportpage"/>
+        <menuitem id="report_page_krazy_report_menu_new_window" name="Reporte Externo" parent="krazy_report_menu" sequence="2" action="action_krazy_report_page_new_window"/>
+        <menuitem id="report_page_krazy_report_menu_modal" name="Reporte Modal" parent="krazy_report_menu" sequence="3" action="action_krazy_report_page_modal"/>
+        <menuitem id="report_page_krazy_report_menu_qweb" name="Reporte QWeb" parent="krazy_report_menu" sequence="4" action="action_krazy_report_page_qweb"/>
+    </data>
+</openerp>

BIN
static/description/icon.png


+ 8 - 0
static/src/css/master.css

@@ -0,0 +1,8 @@
+.pdf_wrapper {
+    width: 100%;
+    height: 100%;
+}
+
+.modal-dialog, .modal-content, .modal-body {
+    height: 90%
+}

+ 138 - 0
static/src/js/krazy_report.js

@@ -0,0 +1,138 @@
+openerp.krazy_report = function (instance, local) {
+    var QWeb = instance.web.qweb;
+
+    console.log(instance);
+    console.log(local);
+
+    local.ReportWidget = instance.Widget.extend({
+        template: 'ReportWrapperTemplate',
+        columns: ['Id', 'Name', 'E-mail'],
+        start: function () {
+            var pdfDoc = new window.jsPDF();
+            var model = new instance.web.Model('res.partner');
+            var self = this;
+
+            model.query().all().then(function (results) {
+                pdfDoc.autoTable(self.columns, _.map(results, function (item) {
+                    return _.values(_.pick(item, 'id', 'name', 'email'));
+                }), {
+                    theme: 'grid', // 'striped', 'grid' or 'plain',
+                    headerStyles: {
+                        fontStyle: 'bold',
+                        fillColor: '#000'
+                    },
+                    margin: {
+                        top: 30
+                    },
+                    addPageContent: function (data) {
+                        pdfDoc.text('Reporte de clientes', 15, 20);
+                    }
+                }
+            );
+
+                self.$el.find('.pdf_wrapper').attr('src', pdfDoc.output('datauristring'));
+            });
+        }
+    });
+
+    local.ReportWidgetNewWindow = instance.Widget.extend({
+        template: 'ReportWrapperTemplate',
+        columns: ['Id', 'Name', 'E-mail', 'Foto'],
+        start: function () {
+            var pdfDoc = new window.jsPDF();
+            var model = new instance.web.Model('res.partner');
+            var self = this;
+
+            model.query().all().then(function (results) {
+                pdfDoc.autoTable(self.columns, _.map(results, function (item) {
+                    return _.values(_.pick(item, 'id', 'name', 'email'));
+                }), {
+                    theme: 'grid', // 'striped', 'grid' or 'plain',
+                    headerStyles: {
+                        fontStyle: 'bold',
+                        fillColor: '#000'
+                    },
+                    margin: {
+                        top: 30
+                    },
+                    addPageContent: function (data) {
+                        pdfDoc.text('Reporte de clientes', 15, 20);
+                    }
+                }
+            );
+
+                pdfDoc.output('dataurlnewwindow');
+            });
+        }
+    });
+
+    local.ReportWidgetModal = instance.Widget.extend({
+        template: 'ReportWrapperModalTemplate',
+        columns: ['Id', 'Name', 'E-mail'],
+        start: function () {
+            var pdfDoc = new window.jsPDF();
+            var model = new instance.web.Model('res.partner');
+            var self = this;
+
+            model.query().all().then(function (results) {
+                pdfDoc.autoTable(self.columns, _.map(results, function (item) {
+                    return _.values(_.pick(item, 'id', 'name', 'email'));
+                }), {
+                    theme: 'grid', // 'striped', 'grid' or 'plain',
+                    headerStyles: {
+                        fontStyle: 'bold',
+                        fillColor: '#000'
+                    },
+                    margin: {
+                        top: 30
+                    },
+                    addPageContent: function (data) {
+                        pdfDoc.text('Reporte de clientes', 15, 20);
+                    }
+                }
+            );
+
+                self.$el.find('.pdf_wrapper').attr('src', pdfDoc.output('datauristring'));
+                self.$el.modal();
+            });
+        }
+    });
+
+    local.ReportWidgetQWeb = instance.Widget.extend({
+        template: 'ReportWrapperTemplate',
+        columns: ['Id', 'Name', 'E-mail'],
+        start: function () {
+            var pdfDoc = new window.jsPDF();
+            var model = new instance.web.Model('res.partner');
+            var self = this;
+
+            model.query().all().then(function (results) {
+                var docRendered = QWeb.render('ReportQWebTemplate', { data: results });
+                var phantomDiv = document.createElement('div');
+                phantomDiv.innerHTML = docRendered;
+
+                var jsonExtracted = pdfDoc.autoTableHtmlToJson(phantomDiv.firstElementChild);
+                pdfDoc.autoTable(jsonExtracted.columns, jsonExtracted.data, {
+                    theme: 'grid', // 'striped', 'grid' or 'plain',
+                    headerStyles: {
+                        fontStyle: 'bold',
+                        fillColor: '#000'
+                    },
+                    margin: {
+                        top: 30
+                    },
+                    addPageContent: function (data) {
+                        pdfDoc.text('Reporte de clientes', 15, 20);
+                    }
+                });
+
+                self.$el.find('.pdf_wrapper').attr('src', pdfDoc.output('datauristring'));
+            });
+        }
+    });
+
+    instance.web.client_actions.add('krazy_report.report', 'instance.krazy_report.ReportWidget');
+    instance.web.client_actions.add('krazy_report.report_new_window', 'instance.krazy_report.ReportWidgetNewWindow');
+    instance.web.client_actions.add('krazy_report.report_modal', 'instance.krazy_report.ReportWidgetModal');
+    instance.web.client_actions.add('krazy_report.report_qweb', 'instance.krazy_report.ReportWidgetQWeb');
+}

File diff suppressed because it is too large
+ 0 - 0
static/src/js/vendor/jspdf.min.js


+ 38 - 0
static/src/js/vendor/plugins/autoprint.js

@@ -0,0 +1,38 @@
+/**
+ * jsPDF Autoprint Plugin
+ *
+ * Licensed under the MIT License.
+ * http://opensource.org/licenses/mit-license
+ */
+
+ /**
+ * Makes the PDF automatically print. This works in Chrome, Firefox, Acrobat
+ * Reader.
+ *
+ * @returns {jsPDF}
+ * @name autoPrint
+ * @example
+ * var doc = new jsPDF()
+ * doc.text(10, 10, 'This is a test')
+ * doc.autoPrint()
+ * doc.save('autoprint.pdf')
+ */
+
+(function (jsPDFAPI) {
+	'use strict';
+
+	jsPDFAPI.autoPrint = function () {
+		'use strict'
+		var refAutoPrintTag;
+
+		this.internal.events.subscribe('postPutResources', function () {
+			refAutoPrintTag = this.internal.newObject()
+				this.internal.write("<< /S/Named /Type/Action /N/Print >>", "endobj");
+		});
+
+		this.internal.events.subscribe("putCatalog", function () {
+			this.internal.write("/OpenAction " + refAutoPrintTag + " 0" + " R");
+		});
+		return this;
+	};
+})(jsPDF.API);

File diff suppressed because it is too large
+ 8 - 0
static/src/js/vendor/plugins/autotable.js


+ 30 - 0
static/src/xml/report_qweb.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ReportQWebTemplate">
+        <table>
+            <thead>
+                <tr>
+                    <th>Id</th>
+                    <th>Nombre</th>
+                    <th>E-mail</th>
+                </tr>
+            </thead>
+            <tbody>
+                <t t-foreach="data" t-as="customer">
+                    <tr>
+                        <td>
+                            <t t-esc="customer.id"></t>
+                        </td>
+                        <td>
+                            <t t-esc="customer.name"></t>
+                        </td>
+                        <td>
+                            <t t-esc="customer.email"></t>
+                        </td>
+                    </tr>
+                </t>
+            </tbody>
+        </table>
+    </t>
+</template>

+ 10 - 0
static/src/xml/report_wrapper.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ReportWrapperTemplate">
+        <div class="oe_view_manager oe_view_manager_current">
+            <iframe class="pdf_wrapper">
+            </iframe>
+        </div>
+    </t>
+</template>

+ 20 - 0
static/src/xml/report_wrapper_modal.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<template xml:space="preserve">
+    <t t-name="ReportWrapperModalTemplate">
+        <div class="modal in" tabindex="-1" role="dialog" aria-hidden="false" style="display: block;" data-backdrop="static"> -->
+            <div class="modal-dialog modal-lg">
+                <div class="modal-content openerp">
+                    <div class="modal-header">
+                        <button aria-hidden="true" class="close" data-dismiss="modal" type="button">×</button>
+                        <h3 class="modal-title">Reporte Modal</h3>
+                    </div>
+                    <div class="modal-body">
+                        <iframe class="pdf_wrapper"></iframe>
+                    </div>
+                    <div class="modal-footer"></div>
+                </div>
+            </div>
+        </div>
+    </t>
+</template>

Some files were not shown because too many files changed in this diff