deisy 6 years ago
commit
aad3f7dc3b

+ 4 - 0
__init__.py

@@ -0,0 +1,4 @@
+# -*- coding:utf-8 -*-
+
+import controllers
+import models

BIN
__init__.pyc


+ 19 - 0
__openerp__.py

@@ -0,0 +1,19 @@
+# -*- coding:utf-8 -*-
+
+{
+'name':'Email Template Design',
+'author':'Deisy Samudio',
+'description':'*Design for eiru email budget template \n *Add email button on res_partner',
+'data':[
+    'views/email_template_view.xml',
+    'views/res_partner_view.xml',
+    ],
+'depends':[
+    'base',
+    'mail',
+    'sale'],
+'application':True,
+"images": [
+		"static/description/icon.png",
+	],
+}

+ 5 - 0
controllers/__init__.py

@@ -0,0 +1,5 @@
+# -*- coding:utf-8 -*-
+
+import main
+
+# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:

BIN
controllers/__init__.pyc


+ 66 - 0
controllers/main.py

@@ -0,0 +1,66 @@
+# -*- coding:utf-8 -*-
+import base64
+import psycopg2
+import functools
+import openerp
+from openerp import SUPERUSER_ID
+from openerp import http
+from openerp.http import request
+from openerp.addons.web.controllers.main import content_disposition
+from openerp.addons.mail.controllers.main import MailController
+from openerp.addons.web.controllers.main import Binary
+import mimetypes
+import logging
+from openerp.http import request, serialize_exception as _serialize_exception
+_logger = logging.getLogger(__name__)
+
+def serialize_exception(f):
+    @functools.wraps(f)
+    def wrap(*args, **kwargs):
+        try:
+            return f(*args, **kwargs)
+        except Exception, e:
+            _logger.exception("An exception occured during an http request")
+            se = _serialize_exception(e)
+            error = {
+                'code': 200,
+                'message': "Odoo Server Error",
+                'data': se
+            }
+            return werkzeug.exceptions.InternalServerError(simplejson.dumps(error))
+    return wrap
+
+class MyMailController(MailController):
+    _cp_path = '/mail'
+
+    @http.route('/mail/download_attachment', type='http', auth='user')
+    def download_attachment(self, model, id, method, attachment_id, **kw):
+        result = super(MyMailController, self).download_attachment(model, id, method, attachment_id, **kw)
+        result.headers['Content-Disposition'] = result.headers['Content-Disposition'].replace('attachment', 'inline')
+        return result
+
+class MyBinary(Binary):
+    @http.route('/web/binary/saveas', type='http', auth="public")
+    def saveas(self, model, field, id=None, filename_field=None, **kw):
+        Model = request.registry[model]
+        cr, uid, context = request.cr, request.uid, request.context
+        fields = [field]
+        if filename_field:
+            fields.append(filename_field)
+        if id:
+            res = Model.read(cr, uid, [int(id)], fields, context)[0]
+        else:
+            res = Model.default_get(cr, uid, fields, context)
+        filecontent = base64.b64decode(res.get(field) or '')
+
+        if not filecontent:
+            return request.not_found()
+        else:
+            content_type = ""
+            filename = '%s_%s' % (model.replace('.', '_'), id)
+            if filename_field:
+                filename = res.get(filename_field, '') or filename
+                content_type = mimetypes.guess_type(filename)
+            return request.make_response(filecontent,
+                headers=[('Content-Type',  content_type[0] or 'application/octet-stream'),
+                 ('Content-Disposition', content_disposition(filename).replace('attachment', 'inline'))])

BIN
controllers/main.pyc


+ 4 - 0
models/__init__.py

@@ -0,0 +1,4 @@
+# -*- coding:utf-8 -*-
+
+import res_partner
+import email_template

BIN
models/__init__.pyc


+ 30 - 0
models/email_template.py

@@ -0,0 +1,30 @@
+# -*- coding:utf-8 -*-
+
+from openerp import fields, models, api
+from openerp import tools, SUPERUSER_ID
+from openerp.tools.translate import _
+
+class MailNotification(models.Model):
+    _inherit = "mail.notification"
+
+    def get_signature_footer(self, cr, uid, user_id, res_model=None, res_id=None, context=None, user_signature=True):
+        """ Format a standard footer for notification emails (such as pushed messages
+            notification or invite emails).
+            Format:
+                <p>--<br />
+                    Administrator
+                </p>
+                <div>
+                    <small>Sent from <a ...>Your Company</a> using <a ...>OpenERP</a>.</small>
+                </div>
+        """
+        footer = ""
+
+        return footer
+
+class MailMail(models.Model):
+    _inherit = 'mail.mail'
+
+    def _get_partner_access_link(self, cr, uid, mail, partner=None, context=None):
+        link= ""
+        return link

BIN
models/email_template.pyc


+ 22 - 0
models/res_partner.py

@@ -0,0 +1,22 @@
+# -*- coding:utf-8 -*-
+
+from openerp import fields, models, api
+
+class ResPartner(models.Model):
+    _inherit="res.partner"
+
+    email_count= fields.Integer(compute='_email_count')
+
+    # mass_mailing_count= fields.Integer(compute='_mass_mailing_count')
+
+    @api.one
+    def _email_count(self):
+        res =self.env['mail.message'].search_count([('type','!=','notification'),'|','|',('partner_ids', '=', self.id),('notified_partner_ids', '=', self.id), ('author_id', '=', self.id)])
+        self.email_count= res
+        return self.email_count
+
+
+class MailMessage(models.Model):
+    _inherit="mail.message"
+
+    type = fields.Selection(selection=[('email','Correo Entrante'),('comment','Correo Saliente'),('notification','Notificación del Sistema')])

BIN
models/res_partner.pyc


BIN
static/description/icon.png


+ 75 - 0
views/email_template_view.xml

@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <!--Email template -->
+      <data noupdate="1">
+        <record id="email_template_edi_sale" model="email.template">
+            <field name="name">Enviar Presupuesto</field>
+            <field name="email_from">${(object.user_id.email or '')|safe}</field>
+            <field name="subject">${object.company_id.name|safe} ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })</field>
+            <field name="partner_to">${object.partner_invoice_id.id}</field>
+            <field name="model_id" ref="sale.model_sale_order"/>
+            <field name="auto_delete" eval="True"/>
+            <field name="report_template" ref="sale.report_sale_order"/>
+            <field name="report_name">${(object.name or '').replace('/','_')}_${object.state == 'draft' and 'draft' or ''}</field>
+            <field name="lang">${object.partner_id.lang}</field>
+                  <field name="body_html"><![CDATA[
+                    <div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
+
+    <p>Hola ${object.partner_id.name},</p>
+
+    <p>Tiene disponible un nuevo presupuesto: </p>
+
+    <p style="border-left: 1px solid #8e0000; margin-left: 30px;">
+       &nbsp;&nbsp;<strong>REFERENCIAS</strong><br />
+       &nbsp;&nbsp;Número de Pedido: <strong>${object.name}</strong><br />
+       &nbsp;&nbsp;Monto del Pedido: <strong>${object.amount_total} ${object.currency_id.name}</strong><br />
+       &nbsp;&nbsp;Fecha del Pedido: ${object.date_order}<br />
+       % if object.origin:
+       &nbsp;&nbsp;Referencia del Pedido: ${object.origin}<br />
+       % endif
+       % if object.user_id:
+       &nbsp;&nbsp;Contacto: <a href="mailto:${object.user_id.email or ''}?subject=Invoice%20${object.number}">${object.user_id.name}</a>
+       % endif
+    </p>
+
+    <br/>
+    <p>Si tiene alguna duda, no dude en contactarnos.</p>
+    <p>Gracias por elegir a  ${object.company_id.name or 'us'}!</p>
+    <br/>
+    <br/>
+    <div style="width: 375px; margin: 0px; padding: 0px; background-color: #2E9AFE; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; background-repeat: repeat no-repeat;">
+        <h3 style="margin: 0px; padding: 2px 14px; font-size: 12px; color: #DDD;">
+            <strong style="text-transform:uppercase;">${object.company_id.name}</strong></h3>
+    </div>
+    <div style="width: 347px; margin: 0px; padding: 5px 14px; line-height: 16px; background-color: #EFF5FB;">
+        <span style="color: #222; margin-bottom: 5px; display: block; ">
+        % if object.company_id.street:
+            ${object.company_id.street}<br/>
+        % endif
+        % if object.company_id.street2:
+            ${object.company_id.street2}<br/>
+        % endif
+        % if object.company_id.city or object.company_id.zip:
+            ${object.company_id.zip} ${object.company_id.city}<br/>
+        % endif
+        % if object.company_id.country_id:
+            ${object.company_id.state_id and ('%s, ' % object.company_id.state_id.name) or ''} ${object.company_id.country_id.name or ''}<br/>
+        % endif
+        </span>
+        % if object.company_id.phone:
+            <div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
+                Teléfono:&nbsp; ${object.company_id.phone}
+            </div>
+        % endif
+        % if object.company_id.website:
+            <div>
+                Sitio Web :&nbsp;<a href="${object.company_id.website}">${object.company_id.website}</a>
+            </div>
+        %endif
+        <p></p>
+    </div>
+</div>
+            ]]></field>
+        </record>
+  </data>
+</openerp>

+ 61 - 0
views/res_partner_view.xml

@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+  <data>
+    <record id="act_email_count" model="ir.actions.act_window">
+           <field name="name">Emails</field>
+           <field name="res_model">mail.message</field>
+           <field name="view_type">form</field>
+           <field name="view_mode">tree,form</field>
+           <field name="domain">[('type','!=','notification'), '|','|',('partner_ids','=',active_id), ('notified_partner_ids', '=', active_id), ('author_id','=',active_id)]</field>
+           <field name="context">{}</field>
+    </record>
+
+    <record id="email_filter" model="ir.ui.view">
+     <field name="name">Email Filter</field>
+     <field name="model">mail.message</field>
+     <field name="arch" type="xml">
+       <search string="Search Email">
+         <filter string="Entrante" name="incoming_email" domain="[('type', '=', 'email')]"/>
+         <filter string="Saliente" name="outgoing_email" domain="[('type', '=', 'comment')]"/>
+         <group expand="0" string="Group By">
+           <filter name="group_by_type" string="Tipo de Email" context="{'group_by':'type'}"/>
+         </group>
+       </search>
+     </field>
+   </record>
+
+
+    <record id="mail_message_tree_view" model="ir.ui.view">
+      <field name="name">mail.message.tree.view</field>
+      <field name="model">mail.message</field>
+      <field name="inherit_id" ref="mail.view_message_tree"/>
+      <field name="arch" type="xml">
+        <field name="model" position="attributes">
+          <attribute name="invisible">True</attribute>
+        </field>
+        <field name="res_id" position="attributes">
+          <attribute name="invisible">True</attribute>
+        </field>
+        <field name="author_id" position="after">
+          <field name="type" string="Tipo"/>
+        </field>
+      </field>
+    </record>
+
+    <record id="add_button_email_form" model="ir.ui.view">
+      <field name="name">add.button.email.form</field>
+      <field name="model">res.partner</field>
+      <field name="inherit_id" ref="base.view_partner_form"/>
+      <field name="arch" type="xml">
+        <xpath expr="//div[@name='buttons']" position="inside">
+          <button class="oe_inline oe_stat_button" type="action"
+                  name="%(act_email_count)d"
+                  icon="fa-envelope">
+            <field string="Emails" name="email_count" widget="statinfo"/>
+          </button>
+
+        </xpath>
+      </field>
+    </record>
+  </data>
+</openerp>