[ADD]: Quote roller module
authorajay javiya (OpenERP) <aja@tinyerp.com>
Mon, 2 Dec 2013 12:34:37 +0000 (18:04 +0530)
committerajay javiya (OpenERP) <aja@tinyerp.com>
Mon, 2 Dec 2013 12:34:37 +0000 (18:04 +0530)
bzr revid: aja@tinyerp.com-20131202123437-zn6u2ckxbid3jknb

13 files changed:
addons/email_template/wizard/mail_compose_message.py
addons/website_sale_quote/__init__.py [new file with mode: 0644]
addons/website_sale_quote/__openerp__.py [new file with mode: 0644]
addons/website_sale_quote/controllers/__init__.py [new file with mode: 0644]
addons/website_sale_quote/controllers/main.py [new file with mode: 0644]
addons/website_sale_quote/models/__init__.py [new file with mode: 0644]
addons/website_sale_quote/models/order.py [new file with mode: 0644]
addons/website_sale_quote/sale_quote_data.xml [new file with mode: 0644]
addons/website_sale_quote/sale_quote_view.xml [new file with mode: 0644]
addons/website_sale_quote/static/description/icon.png [new file with mode: 0644]
addons/website_sale_quote/static/src/css/sale_quote.css [new file with mode: 0644]
addons/website_sale_quote/static/src/js/sale_quote.js [new file with mode: 0644]
addons/website_sale_quote/views/website_sale_quote.xml [new file with mode: 0644]

index ac2f79b..38d08c9 100644 (file)
@@ -51,7 +51,7 @@ class mail_compose_message(osv.TransientModel):
             res.update(
                 self.onchange_template_id(
                     cr, uid, [], context['default_template_id'], res.get('composition_mode'),
-                    res.get('model'), res.get('res_id'), context=context
+                    res.get('model'), res.get('res_id', context.get('active_id')), context=context
                 )['value']
             )
         return res
@@ -114,7 +114,6 @@ class mail_compose_message(osv.TransientModel):
                 values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context))
         else:
             values = self.default_get(cr, uid, ['subject', 'body', 'email_from', 'email_to', 'email_cc', 'partner_to', 'reply_to', 'attachment_ids', 'mail_server_id'], context=context)
-
         if values.get('body_html'):
             values['body'] = values.pop('body_html')
         return {'value': values}
@@ -169,7 +168,6 @@ class mail_compose_message(osv.TransientModel):
         # filter template values
         fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc',  'reply_to', 'attachment_ids', 'attachments', 'mail_server_id']
         values = dict.fromkeys(res_ids, False)
-
         template_values = self.pool.get('email.template').generate_email_batch(cr, uid, template_id, res_ids, context=context)
         for res_id in res_ids:
             res_id_values = dict((field, template_values[res_id][field]) for field in fields if template_values[res_id].get(field))
diff --git a/addons/website_sale_quote/__init__.py b/addons/website_sale_quote/__init__.py
new file mode 100644 (file)
index 0000000..9f86759
--- /dev/null
@@ -0,0 +1,2 @@
+import controllers
+import models
diff --git a/addons/website_sale_quote/__openerp__.py b/addons/website_sale_quote/__openerp__.py
new file mode 100644 (file)
index 0000000..1db0f37
--- /dev/null
@@ -0,0 +1,22 @@
+{
+    'name': 'Quote Roller',
+    'category': 'Website',
+    'summary': 'Send Live Quotation',
+    'version': '1.0',
+    'description': """
+OpenERP Sale Quote Roller
+==================
+
+        """,
+    'author': 'OpenERP SA',
+    'depends': ['website_sale','website','product','portal_sale', 'mail'],
+    'data': [
+        'views/website_sale_quote.xml',
+        'sale_quote_view.xml',
+        'sale_quote_data.xml'
+    ],
+    'demo': [
+    ],
+    'qweb': ['static/src/xml/*.xml'],
+    'installable': True,
+}
diff --git a/addons/website_sale_quote/controllers/__init__.py b/addons/website_sale_quote/controllers/__init__.py
new file mode 100644 (file)
index 0000000..e11f9ba
--- /dev/null
@@ -0,0 +1,3 @@
+import main
+
+# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/website_sale_quote/controllers/main.py b/addons/website_sale_quote/controllers/main.py
new file mode 100644 (file)
index 0000000..8f68213
--- /dev/null
@@ -0,0 +1,57 @@
+import random
+import uuid
+import simplejson
+
+import werkzeug.exceptions
+
+from openerp import SUPERUSER_ID
+from openerp.osv import osv
+from openerp.addons.web import http
+from openerp.addons.web.http import request
+from openerp.addons.website.models import website
+
+class sale_quote(http.Controller):
+
+    def get_quote(self, token):
+        quote_pool = request.registry.get('sale.quote')
+        quote_id = quote_pool.search(request.cr, SUPERUSER_ID, [('access_token', '=', token)], context=request.context)
+        return quote_id
+        
+    @website.route(['/quote/<token>'], type='http', auth="public")
+    def view(self, token=None, **post):
+        values = {}
+        # http://hostname:8069/quote?id=
+        quote_pool = request.registry.get('sale.quote')
+        quotation = quote_pool.browse(request.cr, SUPERUSER_ID, self.get_quote(token))[0]
+        values.update({
+            'quotation' : quotation,
+        })
+        return request.website.render('website_sale_quote.quotation', values)
+
+    @website.route(['/quote/<token>/accept'], type='http', auth="public")
+    def accept(self, token=None , **post):
+        values = {}
+        quotation = request.registry.get('sale.quote').write(request.cr, SUPERUSER_ID, self.get_quote(token), {'state': 'accept'})
+        return request.redirect("/quote/%s" % token)
+
+    @website.route(['/quote/<token>/decline'], type='http', auth="public")
+    def decline(self, token=None , **post):
+        values = {}
+        quotation = request.registry.get('sale.quote').write(request.cr, SUPERUSER_ID, self.get_quote(token), {'state': 'cancel'})
+        return request.redirect("/quote/%s" % token)
+
+    @website.route(['/quote/<token>/post'], type='http', auth="public")
+    def post(self, token=None, **post):
+        values = {}
+        if post.get('new_message'):
+            request.session.body = post.get('new_message')
+        if 'body' in request.session and request.session.body:
+            request.registry.get('sale.quote').message_post(request.cr, SUPERUSER_ID, self.get_quote(token),
+                    body=request.session.body,
+                    type='comment',
+                    subtype='mt_comment',
+                )
+            request.session.body = False
+        return request.redirect("/quote/%s" % token)
+
+
diff --git a/addons/website_sale_quote/models/__init__.py b/addons/website_sale_quote/models/__init__.py
new file mode 100644 (file)
index 0000000..49178ed
--- /dev/null
@@ -0,0 +1 @@
+import order
diff --git a/addons/website_sale_quote/models/order.py b/addons/website_sale_quote/models/order.py
new file mode 100644 (file)
index 0000000..adca999
--- /dev/null
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2013-Today OpenERP SA (<http://www.openerp.com>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 of the
+#    License, or (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import osv, fields
+import hashlib
+import time
+
+class sale_quote(osv.Model):
+    _name = "sale.quote"
+    _inherit = ['mail.thread', 'ir.needaction_mixin']
+    _description = "Sales Quotations"
+    _columns = {
+#            'template_id': fields.many2one('ir.ui.view', 'Template'),
+            'order_id': fields.many2one('sale.order', 'Order', required=True),
+            'state': fields.selection([
+            ('draft', 'Draft Quotation'),
+            ('sent', 'Quotation Sent'),
+            ('accept', 'Accept'),
+            ('cancel', 'Cancelled'),
+            ('done', 'Done'),
+            ], 'Status'),
+            'to_email': fields.char('Customers Email'),
+            'access_token':fields.char('Quotation Token', size=256),
+    }
+
+    def new_quotation_token(self, cr, uid, record_id):
+        db_uuid = self.pool.get('ir.config_parameter').get_param(cr, uid, 'database.uuid')
+        quotation_token = hashlib.sha256('%s-%s-%s' % (time.time(), db_uuid, record_id)).hexdigest()
+        return self.write(cr, uid, [record_id],{'access_token': quotation_token} )
+
+    def create(self, cr, uid, vals, context=None):
+        if context is None:
+            context = {}
+        new_id = super(sale_quote, self).create(cr, uid, vals, context=context)
+        self.new_quotation_token(cr, uid, new_id)
+        return new_id
+
+
+class sale_order(osv.osv):
+    _inherit = 'sale.order'
+    _columns = {
+        'quote_url': fields.char('URL'),
+    }
+
+#    def action_quotation_send(self, cr, uid, ids, context=None):
+#        '''
+#        This function opens a window to compose an email, with the edi sale template message loaded by default
+#        '''
+#        data_pool = self.pool.get('ir.model.data')
+#        sale_quote = self.pool.get('sale.quote')
+#        try:
+#            compose_form_id = data_pool.get_object_reference(cr, uid, 'mail', 'email_compose_message_wizard_form')[1]
+#        except ValueError:
+#            compose_form_id = False
+#        model,template_id = data_pool.get_object_reference(cr, uid, 'website_sale_quote', "email_template_sale_quote")
+#        ctx = dict(context)
+#        for order in self.browse(cr, uid, ids, context):
+#            if not order.quote_id:
+#                new_id = sale_quote.create(cr, uid,{
+#                    'state' : 'draft',
+#                    'to_email': order.partner_id.email,
+#                })
+#                self.write(cr, uid, [order.id] ,{'quote_id': new_id}, context)
+#            ctx.update({
+#                'default_model': 'sale.order',
+#                'default_res_id': order.id,
+#                'default_use_template': bool(template_id),
+#                'default_template_id': template_id,
+#                'default_composition_mode': 'comment',
+#                'mark_so_as_sent': True
+#            })
+#        return {
+#            'type': 'ir.actions.act_window',
+#            'view_type': 'form',
+#            'view_mode': 'form',
+#            'res_model': 'mail.compose.message',
+#            'views': [(compose_form_id, 'form')],
+#            'view_id': compose_form_id,
+#            'target': 'new',
+#            'context': ctx,
+#        }
+
+    def action_quotation_send(self, cr, uid, ids, context=None):
+        quote = super(sale_order, self).action_quotation_send(cr, uid,ids, context)
+        sale_quote = self.pool.get('sale.quote')
+        for order in self.browse(cr, uid, ids, context):
+            q_id = sale_quote.search(cr, uid, [('order_id','=', order.id)], context=context)
+            if not q_id:
+                new_id = sale_quote.create(cr, uid,{
+                    'order_id' : order.id,
+                    'state' : 'draft',
+                    'to_email': order.partner_id.email,
+                })
+                self.write(cr, uid, order.id, {'quote_url': self.get_signup_url(cr, uid, [order.id], context)})
+        return quote
+
+    def get_signup_url(self, cr, uid, ids, context=None):
+        url = False
+        quote_id = self.pool.get('sale.quote').search(cr, uid, [('order_id','=', ids[0])], context=context)
+        for quote in self.pool.get('sale.quote').browse(cr, uid, quote_id, context=context):
+            base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='http://localhost:8069', context=context)
+            url = "%s/quote/%s" % (base_url, quote.access_token)
+        return url
diff --git a/addons/website_sale_quote/sale_quote_data.xml b/addons/website_sale_quote/sale_quote_data.xml
new file mode 100644 (file)
index 0000000..ff7c3cf
--- /dev/null
@@ -0,0 +1,29 @@
+<openerp>
+    <data>
+
+        <!--Email template -->
+        <record id="email_template_sale_quote" model="email.template">
+            <field name="name">Sales Quotation - Send by Email (Quote)</field>
+            <field name="email_from">${object.user_id.email or ''}</field>
+            <field name="subject">${object.company_id.name} ${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="website_sale_quote.model_sale_order"/>
+            <field name="auto_delete" eval="True"/>
+            <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: rgb(255, 255, 255); ">
+
+                    <p>Hello ${object.partner_id.name},</p>
+                
+                    <p>Here is your ${object.state in ('draft', 'sent') and 'quotation' or 'order confirmation'} from ${object.company_id.name}: </p>
+
+                    <% set signup_url = object.get_quote_url() %>
+                    <p>
+                        You can access this document and pay online via our Customer Portal:
+                    </p>
+                    <a style="display:block; width: 150px; height:20px; margin-left: 120px; color: #DDD; font-family: 'Lucida Grande', Helvetica, Arial, sans-serif; font-size: 13px; font-weight: bold; text-align: center; text-decoration: none !important; line-height: 1; padding: 5px 0px 0px 0px; background-color: #8E0000; border-radius: 5px 5px; background-repeat: repeat no-repeat;"
+                   href="${signup_url}">View ${object.state in ('draft', 'sent') and 'Quotation' or 'Order'}</a>
+                </div>
+            ]]></field>
+        </record>
+    </data>
+</openerp>
diff --git a/addons/website_sale_quote/sale_quote_view.xml b/addons/website_sale_quote/sale_quote_view.xml
new file mode 100644 (file)
index 0000000..b5120ac
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<openerp>
+    <data>
+        
+        <!--  Add payment options to sale.order and invoice forms -->
+        <record model="ir.ui.view" id="sale_order_form_quote">
+                <field name="name">sale.order.form.payment</field>
+                <field name="model">sale.order</field>
+                <field name="inherit_id" ref="sale.view_order_form"/>
+                <field name="arch" type="xml">
+                    <notebook version="7.0" position="before">
+                        <field name="quote_url"/>
+                    </notebook>
+                </field>
+        </record>
+    </data>
+</openerp>
diff --git a/addons/website_sale_quote/static/description/icon.png b/addons/website_sale_quote/static/description/icon.png
new file mode 100644 (file)
index 0000000..d7b9f4f
Binary files /dev/null and b/addons/website_sale_quote/static/description/icon.png differ
diff --git a/addons/website_sale_quote/static/src/css/sale_quote.css b/addons/website_sale_quote/static/src/css/sale_quote.css
new file mode 100644 (file)
index 0000000..9a222cd
--- /dev/null
@@ -0,0 +1,13 @@
+body { padding-top:30px;
+}
+.widget .panel-body { padding:0px; }
+.widget .list-group { margin-bottom: 0; }
+.widget .panel-title { display:inline }
+.widget .label-info { float: right; }
+.widget li.list-group-item {border-radius: 0;border: 0;border-top: 1px solid #ddd;}
+.widget li.list-group-item:hover { background-color: rgba(86,61,124,.1); }
+.widget .mic-info { color: #666666;font-size: 11px; }
+.widget .action { margin-top:5px; }
+.widget .comment-text { font-size: 12px; }
+.widget .btn-block { border-top-left-radius:0px;border-top-right-radius:0px; }
+.oe_section { padding-top:40px; }
\ No newline at end of file
diff --git a/addons/website_sale_quote/static/src/js/sale_quote.js b/addons/website_sale_quote/static/src/js/sale_quote.js
new file mode 100644 (file)
index 0000000..74cb49f
--- /dev/null
@@ -0,0 +1,32 @@
+openerp.base_calendar = function(instance) {
+var _t = instance.web._t;
+var QWeb = instance.web.qweb;
+instance.base_calendar = {}
+
+    instance.sale_quote.quotation = instance.web.Widget.extend({
+
+        init: function(parent, db, action, id, view, quotation) {
+            this._super();
+            this.db =  db;
+            this.action =  action;
+            this.id = id;
+            this.view = view;
+            this.quotation = quotation;
+        },
+        start: function() {
+            var self = this;
+            self.open_invitation_form(self.quotation);
+        },
+        open_quotation : function(quotation){
+            alert('aaa');
+            this.$el.html(QWeb.render('quotation_view', {'quotation': JSON.parse(quotation)}));
+        },
+    });
+
+    instance.sale_quote.view = function (db, action, id, view, quotation) {
+        instance.session.session_bind(instance.session.origin).done(function () {
+            new instance.sale_quote.quotation(null,db,action,id,view,quotation).appendTo($("body").addClass('openerp'));
+        });
+    }
+};
+//vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
diff --git a/addons/website_sale_quote/views/website_sale_quote.xml b/addons/website_sale_quote/views/website_sale_quote.xml
new file mode 100644 (file)
index 0000000..2280a91
--- /dev/null
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <template id="static_layout">&lt;!DOCTYPE html&gt;
+            <html t-att-lang="lang.replace('_', '-')"
+                      t-att-data-editable="'1' if editable else None"
+                      t-att-data-translatable="'1' if translatable else None"
+                      t-att-data-view-xmlid="xmlid if editable else None"
+                      t-att-data-main-object="repr(main_object) if editable else None"
+                      t-att-data-report-margin-top="40"
+                      t-att-data-report-innerheight="30">
+                    <head>
+
+                        <link rel='stylesheet' href='/report/static/src/css/report.css'/>
+
+                        <t t-if="main_object and 'website_meta_title' in main_object">
+                            <t t-set="title" t-value="main_object.website_meta_title"/>
+                        </t>
+                        <t t-if="not title and main_object and 'name' in main_object">
+                            <t t-set="additional_title" t-value="main_object.name"/>
+                        </t>
+                        <t t-if="not title">
+                            <t t-set="title"><t t-raw="res_company.name"/><t t-if="additional_title"> - <t t-raw="additional_title"/></t></t>
+                        </t>
+                        <title><t t-esc="title"/></title>
+                        <meta name="openerp.company" t-att-value="res_company.name"/>
+                        <meta name="description" t-att-value="main_object and 'website_meta_description' in main_object
+                            and main_object.website_meta_description or website_meta_description"/>
+                        <meta name="keywords" t-att-value="main_object and 'website_meta_keywords' in main_object
+                            and main_object.website_meta_keywords or website_meta_keywords"/>
+
+                        <!-- Load stylesheets before scripts to avoid blocking -->
+                        <link rel='stylesheet' href='/web/static/lib/fontawesome/css/font-awesome.css'/>
+                        <t t-if="editable">
+                            <link rel='stylesheet' href='/website/static/src/css/snippets.css'/>
+                            <link rel='stylesheet' href='/website/static/src/css/editor.css'/>
+                            <link rel='stylesheet' href='/website/static/lib/bootstrap-tour/bootstrap-tour.css'/>
+                        </t>
+                        <t t-call="website.theme"/>
+
+
+                        <script type="text/javascript" src="/web/static/lib/es5-shim/es5-shim.min.js"></script>
+                        <script type="text/javascript" src="/web/static/lib/underscore/underscore.js"></script>
+                        <script type="text/javascript" src="/web/static/lib/underscore.string/lib/underscore.string.js"></script>
+                        <script type="text/javascript" src="/web/static/lib/jquery/jquery.js"></script>
+                        <script type="text/javascript" src="/website/static/lib/bootstrap/js/bootstrap.js"></script>
+                        <script type="text/javascript">
+                            // Bootstrap and jQuery UI conflicts
+                            $.fn.bstooltip = $.fn.tooltip;
+                            $.fn.bsbutton = $.fn.button;
+                        </script>
+
+                        <script type="text/javascript" src="/web/static/lib/qweb/qweb2.js"></script>
+                        <script type="text/javascript" src="/web/static/src/js/openerpframework.js"></script>
+
+                        <script type="text/javascript" src="/website/static/src/js/website.js"></script>
+                        <script t-if="not translatable" type="text/javascript" src="/website/static/src/js/website.snippets.animation.js"></script>
+
+                        <t t-if="editable" id="editable_scripts_hook">
+                            <link rel="stylesheet" href="/select2/static/lib/select2/select2.css"/>
+                            <link rel="stylesheet" href="/website/static/lib/select2-bootstrap-css/select2-bootstrap.css"/>
+                            <link rel='stylesheet' href="/web/static/lib/jquery.ui/css/smoothness/jquery-ui-1.9.1.custom.css"/>
+
+                            <script type="text/javascript" src="/select2/static/lib/select2/select2.js"></script>
+                            <script type="text/javascript" src="/web/static/lib/ckeditor/ckeditor.js"></script>
+                            <script type="text/javascript" src="/website/static/lib/bootstrap-tour/bootstrap-tour.js"></script>
+                            <script t-if="not translatable" type="text/javascript" src="/website/static/lib/ace/ace.js"></script>
+                            <script type="text/javascript" src="/website/static/lib/vkbeautify/vkbeautify.0.99.00.beta.js"></script>
+                            <script type="text/javascript" src="/web/static/lib/jquery.ui/js/jquery-ui-1.9.1.custom.js"></script>
+                            <!-- mutation observers shim backed by mutation events (8 < IE < 11, Safari < 6, FF < 14, Chrome < 17) -->
+                            <script type="text/javascript" src="/website/static/lib//jquery.mjs.nestedSortable/jquery.mjs.nestedSortable.js"></script>
+                            <script type="text/javascript" src="/website/static/lib/MutationObservers/test/sidetable.js"></script>
+                            <script type="text/javascript" src='/website/static/lib/nearest/jquery.nearest.js'></script>
+                            <script type="text/javascript" src="/website/static/lib/MutationObservers/MutationObserver.js"></script>
+
+                            <script type="text/javascript" src="/website/static/src/js/website.editor.js"></script>
+                            <script type="text/javascript" src="/website/static/src/js/website.menu.js"></script>
+                            <script type="text/javascript" src="/website/static/src/js/website.mobile.js"></script>
+                            <script type="text/javascript" src="/website/static/src/js/website.seo.js"></script>
+                            <script type="text/javascript" src="/website/static/src/js/website.tour.js"></script>
+                            <script type="text/javascript" src="/website/static/src/js/website.tour.banner.js"></script>
+                            <script t-if="not translatable" type="text/javascript" src="/website/static/src/js/website.snippets.editor.js"></script>
+                            <script t-if="not translatable" type="text/javascript" src="/website/static/src/js/website.ace.js"></script>
+                            <script t-if="translatable" type="text/javascript" src="/website/static/src/js/website.translator.js"></script>
+                        </t>
+                    </head>
+                    <body>
+                        <div id="wrapwrap">
+                            <t t-raw="0" />
+                        </div>
+                    </body>
+            </html>
+        </template>
+         <template id="quotation" name="Your Quotation">
+            <t t-call="website_sale_quote.static_layout">
+            <div class="col-xs-12 col-md-8 tab-content">
+                <section id="main" class="tab-pane active oe_section">
+                    <div class="container panel panel-default">
+                        <div class="row panel-body">
+                            <div class="text-center">
+                                <h1>What does Quickstart cover ?</h1>
+                            </div>
+                            <div>
+                                <p class="lead"><small>1. The OpenERP Enterprise Contract (1 year coverage): unlimited bugfix, security alerts, migration</small></p>
+
+                                <p class="lead"><small>2. The “Get on Board” Hands-on Training (choice between our core modules)</small></p>
+
+                                <p class="lead"><small>3. On-site consulting (minimum 2 days)</small></p>
+
+                            </div>
+                            <div class="text-center">
+                                <h1>How does it work?</h1>
+                            </div>
+                            <div>
+                                <p class="lead"><small>1. OpenERP qualifies your main business needs</small></p>
+
+                                <p class="lead"><small>2. You get a tailored demo</small></p>
+
+                                <p class="lead"><small>3. We train you on your chosen module
+    </small></p>
+                                <p class="lead"><small>4. We deploy your chosen module with a dedicated functional consultant</small></p>
+                                <p class="lead"><small>5. We get you involved in the deployment of OpenERP in your company</small></p>
+
+                            </div>
+                            <p class="lead">
+                                <small>
+                                    The QuickStart offer simply enables any SME to start using OpenERP in just a few days. Since we launched this approach, we already deployed 50 customers in production. <a href="http://v6.openerp.com/node/1390">Check out some of the <strong>testimonials</strong>!</a>
+                                </small>
+                            </p>
+                        </div>
+                    </div>
+                </section>
+                <section id="quote" class="tab-pane oe_section">
+                    <div class="well">
+                        <div class="row">
+                            <div class="col-xs-6 col-sm-6 col-md-6">
+                                <address>
+                                    <strong t-field="quotation.order_id.partner_id.name"/>
+                                    <br/>
+                                    <t t-esc="quotation.order_id.partner_id.street"/>
+                                    <br/>
+                                    <t t-esc="quotation.order_id.partner_id.city"/>, <t t-esc="quotation.order_id.partner_id.state_id.name"/> <t t-esc="quotation.order_id.partner_id.zip"/>
+                                    <br/>
+                                    <abbr title="Phone">P:</abbr> <t t-esc="quotation.order_id.partner_id.phone"/>
+                                </address>
+                            </div>
+                            <div class="col-xs-6 col-sm-6 col-md-6 text-right">
+                                <p>
+                                    <em>Date: <t t-esc="quotation.order_id.date_order"/></em>
+                                </p>
+                                <p>
+                                    <em>Quotation #: <t t-esc="quotation.order_id.name"/></em>
+                                </p>
+                            </div>
+                        </div>
+                        <div class="row">
+                            <div class="text-center">
+                                <h1>Quotation</h1>
+                            </div>
+                            <table class="table table-hover">
+                                <thead>
+                                    <tr>
+                                        <th>Product</th>
+                                        <th>Description</th>
+                                        <th>#</th>
+                                        <th class="text-center">Unit Price</th>
+                                        <th class="text-center">Subtotal</th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    <t t-foreach="quotation.order_id.order_line" t-as="line">
+                                        <tr>
+                                            <td class="col-md-9"><em><t t-esc="line.product_id.name"/></em></td>
+                                            <td class="col-md-9"><em><t t-esc="line.name"/></em></td>
+                                            <td class="col-md-1" style="text-align: center"><t t-esc="line.product_uom_qty"/></td>
+                                            <td class="col-md-1 text-center"><t t-esc="line.price_unit"/></td>
+                                            <td class="col-md-1 text-center"><t t-esc="line.price_subtotal"/></td>
+                                        </tr>
+                                    </t>
+                                    <tr>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td class="text-right">
+                                            <p>
+                                                <strong>Untaxed Amount: </strong>
+                                            </p>
+                                            <p>
+                                                <strong>Tax: </strong>
+                                            </p></td>
+                                            <td class="text-center">
+                                            <p>
+                                                <strong t-field="quotation.order_id.amount_untaxed"
+                                                t-field-options='{
+                                                   "widget": "monetary",
+                                                   "display_currency": "website.pricelist_id.currency_id"
+                                               }'></strong>
+                                            </p>
+                                            <p>
+<!--                                                <strong><t t-esc="quotation.amount_taxed"/></strong>-->
+                                            </p>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                        <td></td>
+                                        <td></td>
+                                        <td></td>
+                                        <td class="text-right"><strong>Total: </strong></td>
+                                        <td class="text-center text-success">
+                                            <strong
+                                                t-field="quotation.order_id.amount_total"
+                                                t-field-options='{"widget": "monetary",
+                                               "display_currency":"website.pricelist_id.currency_id"
+                                           }'></strong>
+                                        </td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                            <div class="text-center">
+                               <a type="submit" t-if="quotation.state != 'accept'" t-href="/quote/#{ quotation.access_token }/accept" class="btn btn-labeled btn-success"><span class="btn-label"><i class="glyphicon glyphicon-ok"></i></span>Accept</a>
+                                <a type="submit" t-if="quotation.state != 'cancel'" t-href="/quote/#{ quotation.access_token }/decline" class="btn btn-labeled btn-danger"><span class="btn-label"><i class="glyphicon glyphicon-remove"></i></span>Decline</a>
+                            </div>
+                        </div>
+                    </div>
+                </section>
+                <section id="accouting" class="tab-pane oe_section">
+                    <div class="container">
+                        <div class="text-center">
+                            <h1>What am i looking for ?</h1>
+                        </div>
+                        <div class="media">
+                            <a class="pull-right" href="#">
+                                <img class="media-object" src="/crm/static/description/icon.png" alt="..."/>
+                            </a>
+                            <div class="media-body">
+                                <h4 class="media-heading">Customer Relationship Management</h4>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Manage my leads</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Optimize my Sales Cycle</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Create customize dashboard</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Improve my Sales reporting</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Communicate with customers and colleagues</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Controll and manage my sales forcastes</i></small></p>
+                            </div>
+                        </div>
+                        <div class="media">
+                            <a class="pull-left" href="#">
+                                <img class="media-object" src="/hr_timesheet_sheet/static/description/icon.png" alt="..."/>
+                            </a>
+                            <div class="media-body pull-right">
+                                <h4 class="media-heading">Service Management</h4>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Manage my customer contracts</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Optimize and analyze my time management</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Manage , analysis and trace my issue</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Create customize dashboard</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Perform project management</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Trace my invoices</i></small></p>
+                                <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Manage my helpdesk</i></small></p>
+                            </div>
+                        </div>
+                      </div>
+                </section>
+                <section id="sales" class="tab-pane oe_section">
+                    <div class="container">
+                        <div class="text-center">
+                            <h1>What's in it for me ?</h1>
+                        </div>
+                        <div>
+                            <h4>The OpenERP Enterprise contract(1 year) convering</h4>
+                            <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Unlimited Bugfix service</i></small></p>
+                            <p class="lead"><small><i class="glyphicon glyphicon-pencil">"One Click" Update</i></small></p>
+                            <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Functional Support</i></small></p>
+                            <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Migration</i></small></p>
+
+                            <p class="lead"><small><i class="glyphicon glyphicon-pencil"> Online Hosting</i></small></p>
+                        </div>
+                    </div>
+                </section>
+                <div class="panel panel-default widget">
+                    <div class="panel-heading">
+                        <span class="glyphicon glyphicon-comment"></span>
+                        <h3 class="panel-title">Recent Comments</h3>
+                    </div>
+                    <div class="panel-body">
+                        <ul class="list-group">
+                            <t t-foreach="quotation.message_ids" t-as="message">
+                                <li class="list-group-item">
+                                    <div class="row">
+                                        <div class="col-xs-2 col-md-1">
+                                            <img t-att-src="'data:image/png;base64,' + message.author_id.image_small" class="img-circle img-responsive" alt="" /></div>
+                                        <div class="col-xs-10 col-md-11">
+                                            <div>
+                                                <a href="http://www.jquery2dotnet.com/2013/10/google-style-login-page-desing-usign.html"/>
+                                                    <t t-raw="message.body"/>
+                                                <div class="mic-info">
+                                                    By: <a href="#"><t t-esc="message.author_id.name"/></a> on <t t-esc="message.date"/>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </li>
+                            </t>
+                        </ul>
+                    </div>
+                </div>
+                <form id="post" accept-charset="UTF-8" method="POST" t-att-action="'/quote/%%s/post#post' %% quotation.access_token">
+                    <textarea rows="3" id="new_message" name="new_message" placeholder="Your Comment....." class="form-control span7"> </textarea>
+                    <button type="submit" t-att-id="quotation.access_token" class="btn btn-info">Post your Comment</button>
+                </form>
+            </div>
+            <div class="col-xs-6 col-md-4 sidebar oe_section" id="sidebar">
+                <ul class="nav nav-pills nav-stacked" data-spy="affix">
+                    <li class="active"><a href="#main" data-toggle="tab"><i class="icon-chevron-right"></i> Introduction</a></li>
+                    <li ><a href="#crm" data-toggle="tab"><i class="icon-chevron-right"></i> CRM and Marketing</a></li>
+                    <li><a href="#sales" data-toggle="tab"><i class="icon-chevron-right"></i> Sales and Warehouse</a></li>
+                    <li ><a href="#crm" data-toggle="tab"><i class="icon-chevron-right"></i> Manufacturing</a></li>
+                    <li><a href="#accouting" data-toggle="tab"><i class="icon-chevron-right"></i> Accounting</a></li>
+                    <li><a href="#quote" data-toggle="tab"><i class="icon-chevron-right"></i> Quotation</a></li>
+                </ul>
+            </div></t>
+        </template>
+    </data>
+</openerp>