19 changed files with 647 additions and 1 deletions
@ -0,0 +1,47 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Change Password Option To Users</h2> |
|||
<h3 class="oe_slogan">It gives an option to change their own password </h3> |
|||
<h4 class="oe_slogan">Author : Cybrosys Techno Solutions , www.cybrosys.com</h4> |
|||
</div> |
|||
</section> |
|||
|
|||
<section> |
|||
<div class="oe_row oe_spaced oe_dark"> |
|||
<h4 class="oe_slogan">User Changing Password</h4> |
|||
<div class="oe_span12"> |
|||
<p class='oe_mt32'> |
|||
☛ User can change password from his own account<br> |
|||
</p> |
|||
<div class="oe_row_img oe_centered"> |
|||
<img class="oe_picture oe_screenshot" src="new_change_password.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
@ -0,0 +1,11 @@ |
|||
Product Images in Sales & Reports v9 |
|||
==================================== |
|||
This module adds product images in sale order line and |
|||
sale order report. |
|||
|
|||
Features |
|||
======== |
|||
* Add your preferred image for the product. |
|||
* Edit the image of product from sale order line itself. |
|||
* Product Image is also viewable in Sale order Report. |
|||
|
@ -0,0 +1,24 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
import models |
|||
|
@ -0,0 +1,44 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'Product Images in Sales', |
|||
'version': '9.0.1.0.0', |
|||
'summary': 'Images In Sale Order Line And Reports', |
|||
'category': 'Sales', |
|||
'author': 'Cybrosys Techno Solutions', |
|||
'company': 'Cybrosys Techno Solutions', |
|||
'website': "http://www.cybrosys.com", |
|||
'depends': ['base', 'sale'], |
|||
'data': [ |
|||
'views/image_in_orderline.xml', |
|||
'views/image_report_template.xml', |
|||
'views/tree_image.xml', |
|||
'views/image_email_template.xml' |
|||
], |
|||
'qweb': ['static/src/xml/widget.xml', ], |
|||
'images': ['static/description/banner.jpg'], |
|||
'license': 'LGPL-3', |
|||
'installable': True, |
|||
'auto_install': False, |
|||
'application': False, |
|||
} |
@ -0,0 +1,25 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
import sol_image |
|||
|
@ -0,0 +1,106 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). |
|||
# Author: Cybrosys Technologies(<http://www.cybrosys.com>) |
|||
# you can modify it under the terms of the GNU LESSER |
|||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3. |
|||
# |
|||
# It is forbidden to publish, distribute, sublicense, or sell copies |
|||
# of the Software or modified copies of the Software. |
|||
# |
|||
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE |
|||
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
from openerp import fields, models, api |
|||
|
|||
|
|||
class OrderLineImage(models.Model): |
|||
_inherit = 'sale.order.line' |
|||
|
|||
image = fields.Binary(string="Image") |
|||
|
|||
@api.multi |
|||
@api.onchange('product_id') |
|||
def product_id_change(self): |
|||
if not self.product_id: |
|||
return {'domain': {'product_uom': []}} |
|||
|
|||
vals = {} |
|||
self.image = self.product_id.image_medium |
|||
domain = {'product_uom': [('category_id', '=', self.product_id.uom_id.category_id.id)]} |
|||
if not self.product_uom or (self.product_id.uom_id.id != self.product_uom.id): |
|||
vals['product_uom'] = self.product_id.uom_id |
|||
vals['product_uom_qty'] = 1.0 |
|||
|
|||
product = self.product_id.with_context( |
|||
lang=self.order_id.partner_id.lang, |
|||
partner=self.order_id.partner_id.id, |
|||
quantity=vals.get('product_uom_qty') or self.product_uom_qty, |
|||
date=self.order_id.date_order, |
|||
pricelist=self.order_id.pricelist_id.id, |
|||
uom=self.product_uom.id |
|||
) |
|||
|
|||
name = product.name_get()[0][1] |
|||
if product.description_sale: |
|||
name += '\n' + product.description_sale |
|||
vals['name'] = name |
|||
|
|||
self._compute_tax_id() |
|||
|
|||
if self.order_id.pricelist_id and self.order_id.partner_id: |
|||
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(product.price, product.taxes_id, |
|||
self.tax_id) |
|||
self.update(vals) |
|||
return {'domain': domain} |
|||
|
|||
|
|||
class ReportImage(models.Model): |
|||
_inherit = 'sale.order' |
|||
|
|||
@api.multi |
|||
def print_quotation(self): |
|||
self.filtered(lambda s: s.state == 'draft').write({'state': 'sent'}) |
|||
return self.env['report'].get_action(self, 'sale_product_image.report_saleorder') |
|||
|
|||
@api.multi |
|||
def action_quotation_send(self): |
|||
self.ensure_one() |
|||
ir_model_data = self.env['ir.model.data'] |
|||
try: |
|||
template_id = ir_model_data.get_object_reference('sale_product_image', 'email_template_edi_sales')[1] |
|||
except ValueError: |
|||
template_id = False |
|||
try: |
|||
compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1] |
|||
except ValueError: |
|||
compose_form_id = False |
|||
ctx = dict() |
|||
ctx.update({ |
|||
'default_model': 'sale.order', |
|||
'default_res_id': self.ids[0], |
|||
'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, |
|||
} |
After Width: | Height: | Size: 71 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 15 KiB |
@ -0,0 +1,68 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<h2 class="oe_slogan">Product Images in Sales & Reports</h2> |
|||
<h3 class="oe_slogan"></h3> |
|||
<h4><p>Features:</p></h4> |
|||
<ul> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Add Your Preferred Image for the Product.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Edit the Image of Product From Sale Order Line Itself.</li> |
|||
<li style="list-style:none !important;"><span style="color:green;"> →</span> Product Image is Also Viewable in Sale Order Report.</li> |
|||
</ul> |
|||
|
|||
</div> |
|||
</section> |
|||
|
|||
|
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Product Images in Order Lines </h2> |
|||
<h3 class="oe_slogan">Add or Edit</h3> |
|||
</div> |
|||
<div class="oe_span5"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="sol.png"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container "> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Product Image in Sale Order Report</h2> |
|||
</div> |
|||
<div class=""> |
|||
<div class="oe_screenshot" style="margin-top:20px;"> |
|||
<img src="pdf.png" class="center-block"> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> |
|||
<div class="oe_slogan" style="margin-top:10px !important;"> |
|||
<div> |
|||
<a class="btn btn-primary btn-lg mt8" |
|||
style="color: #FFFFFF !important;border-radius: 0;" href="http://www.cybrosys.com"><i |
|||
class="fa fa-envelope"></i> Email </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/contact/"><i |
|||
class="fa fa-phone"></i> Contact Us </a> <a |
|||
class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;border-radius: 0;" |
|||
href="http://www.cybrosys.com/odoo-customization-and-installation/"><i |
|||
class="fa fa-check-square"></i> Request Customization </a> |
|||
</div> |
|||
<br> |
|||
<img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> |
|||
<div> |
|||
<a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" style="color:white;background: #00a0d1;width:35px;"></i></a></td> |
|||
<a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i class="fa fa-2x fa-linkedin" style="color:white;background: #31a3d6;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" style="color:white;background: #3b5998;width:35px;padding-left: 8px;"></i></a></td> |
|||
<a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i class="fa fa-2x fa-google-plus" style="color:white;background: #c53c2c;width:35px;padding-left: 3px;"></i></a></td> |
|||
<a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" style="color:white;background: #ac0f18;width:35px;padding-left: 3px;"></i></a></td> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 60 KiB |
@ -0,0 +1,51 @@ |
|||
odoo.define('sale_product_image.tree_image', function (require) { |
|||
"use strict"; |
|||
|
|||
|
|||
var core = require('web.core'); |
|||
var session = require('web.session'); |
|||
var QWeb = core.qweb; |
|||
|
|||
|
|||
var ColumnBinaryImage = core.list_widget_registry.get('field').extend({ |
|||
/** |
|||
* Return a link to the binary data as a Image |
|||
*/ |
|||
_format: function (row_data, options) { |
|||
this.session = session; |
|||
|
|||
if (!row_data[this.id] || !row_data[this.id].value) { |
|||
return ''; |
|||
} |
|||
var value = row_data[this.id].value, src; |
|||
if (this.type === 'binary') { |
|||
if (value && value.substr(0, 10).indexOf(' ') === -1) { |
|||
// The media subtype (png) seems to be arbitrary
|
|||
src = "data:image/png;base64," + value; |
|||
} else { |
|||
//src = instance.session.url('/web/binary/image', {model: options.model, field: this.id, id: options.id});
|
|||
var imageArgs = { |
|||
model: options.model, |
|||
field: this.id, |
|||
id: options.id |
|||
} |
|||
if (this.resize) { |
|||
imageArgs.resize = this.resize; |
|||
} |
|||
src = session.url('/web/binary/image', imageArgs); |
|||
} |
|||
} else { |
|||
if (!/\//.test(row_data[this.id].value)) { |
|||
src = '/web/static/src/img/icons/' + row_data[this.id].value + '.png'; |
|||
} else { |
|||
src = row_data[this.id].value; |
|||
} |
|||
} |
|||
|
|||
return QWeb.render('ListView.row.imagen', {widget: this, src: src}); |
|||
} |
|||
}); |
|||
|
|||
core.list_widget_registry |
|||
.add('field.image', ColumnBinaryImage); |
|||
}); |
@ -0,0 +1,7 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<templates id="tree_image" xml:space="preserve"> |
|||
<img t-name="ListView.row.imagen" |
|||
t-att-height="widget.height || 32" |
|||
t-att-src="src" |
|||
class="oe_image_tree"/> |
|||
</templates> |
@ -0,0 +1,74 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
<data noupdate="1"> |
|||
<!--Email template --> |
|||
<record id="email_template_edi_sales" model="mail.template"> |
|||
<field name="name">Sales Order - Send by Email</field> |
|||
<field name="email_from">${(object.user_id.email and '%s <%s>' % (object.user_id.name, object.user_id.email) or '')|safe}</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="sale.model_sale_order"/> |
|||
<field name="auto_delete" eval="True"/> |
|||
<field name="report_template" ref="sale_product_image.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: 'Lucida Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "> |
|||
|
|||
<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> |
|||
|
|||
<p style="border-left: 1px solid #8e0000; margin-left: 30px;"> |
|||
<strong>REFERENCES</strong><br /> |
|||
Order number: <strong>${object.name}</strong><br /> |
|||
Order total: <strong>${object.amount_total} ${object.pricelist_id.currency_id.name}</strong><br /> |
|||
Order date: ${format_tz(object.date_order, tz=user.tz, context={'lang':object.partner_id.lang})} <br /> |
|||
% if object.origin: |
|||
Order reference: ${object.origin}<br /> |
|||
% endif |
|||
% if object.client_order_ref: |
|||
Your reference: ${object.client_order_ref}<br /> |
|||
% endif |
|||
% if object.user_id: |
|||
Your contact: <a href="mailto:${object.user_id.email or ''}?subject=Order%20${object.name}">${object.user_id.name}</a> |
|||
% endif |
|||
</p> |
|||
|
|||
% if object.paypal_url: |
|||
<br/> |
|||
<p>It is also possible to directly pay with Paypal:</p> |
|||
<a style="margin-left: 120px;" href="${object.paypal_url}"> |
|||
<img class="oe_edi_paypal_button" src="/sale/static/img/btn_paynowcc_lg.gif"/> |
|||
</a> |
|||
% endif |
|||
|
|||
<br/> |
|||
<p>If you have any question, do not hesitate to contact us.</p> |
|||
<p>Thank you for choosing ${object.company_id.name or 'us'}!</p> |
|||
<br/> |
|||
<br/> |
|||
<div style="width: 375px; margin: 0px; padding: 0px; background-color: #8E0000; 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: #F2F2F2;"> |
|||
<span style="color: #222; margin-bottom: 5px; display: block; "> |
|||
${object.company_id.partner_id.sudo().with_context(show_address=True, html_format=True).name_get()[0][1] | safe} |
|||
</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; "> |
|||
Phone: ${object.company_id.phone} |
|||
</div> |
|||
% endif |
|||
% if object.company_id.website: |
|||
<div> |
|||
Web : <a href="${object.company_id.website}">${object.company_id.website}</a> |
|||
</div> |
|||
%endif |
|||
<p></p> |
|||
</div> |
|||
</div> |
|||
]]></field> |
|||
</record> |
|||
</data></odoo> |
@ -0,0 +1,20 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
|
|||
<record model="ir.ui.view" id="image_2_sol_view"> |
|||
<field name="name">image.sol.view</field> |
|||
|
|||
<field name="model">sale.order</field> |
|||
<field name="inherit_id" ref="sale.view_order_form"/> |
|||
<field name="arch" type="xml"> |
|||
<xpath expr="//tree/field[@name='product_uom_qty']" position="after"> |
|||
|
|||
<field name="image" widget="image" class="oe_avatar" /> |
|||
</xpath> |
|||
</field> |
|||
</record> |
|||
|
|||
</data> |
|||
</openerp> |
@ -0,0 +1,159 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<openerp> |
|||
<data> |
|||
<report |
|||
id="report_sale_order" |
|||
string="Quotation / Order" |
|||
model="sale.order" |
|||
report_type="qweb-pdf" |
|||
file="sale_product_image.report_saleorder" |
|||
name="sale_product_image.report_saleorder" |
|||
/> |
|||
<template id="report_saleorder_document"> |
|||
<t t-call="report.external_layout"> |
|||
<t t-set="doc" t-value="doc.with_context({'lang':doc.partner_id.lang})" /> |
|||
<div class="page"> |
|||
<div class="oe_structure"/> |
|||
<div class="row"> |
|||
<div class="col-xs-6"> |
|||
<strong t-if="doc.partner_shipping_id == doc.partner_invoice_id">Invoicing and shipping address:</strong> |
|||
<strong t-if="doc.partner_shipping_id != doc.partner_invoice_id">Invoicing address:</strong> |
|||
<div t-field="doc.partner_invoice_id" |
|||
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true, "phone_icons": true}'/> |
|||
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p> |
|||
<div t-if="doc.partner_shipping_id != doc.partner_invoice_id" class="mt8"> |
|||
<strong>Shipping address:</strong> |
|||
<div t-field="doc.partner_shipping_id" |
|||
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true, "phone_icons": true}'/> |
|||
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p> |
|||
</div> |
|||
</div> |
|||
<div class="col-xs-5 col-xs-offset-1"> |
|||
<div t-field="doc.partner_id" |
|||
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": true}' /> |
|||
</div> |
|||
</div> |
|||
|
|||
<h2> |
|||
<span t-if="doc.state not in ['draft','sent']">Order # </span> |
|||
<span t-if="doc.state in ['draft','sent']">Quotation # </span> |
|||
<span t-field="doc.name"/> |
|||
</h2> |
|||
|
|||
<div class="row mt32 mb32" id="informations"> |
|||
<div t-if="doc.client_order_ref" class="col-xs-3"> |
|||
<strong>Your Reference:</strong> |
|||
<p t-field="doc.client_order_ref"/> |
|||
</div> |
|||
<div t-if="doc.date_order" class="col-xs-3"> |
|||
<strong t-if="doc.state not in ['draft','sent']">Date Ordered:</strong> |
|||
<strong t-if="doc.state in ['draft','sent']">Quotation Date:</strong> |
|||
<p t-field="doc.date_order"/> |
|||
</div> |
|||
<div t-if="doc.user_id.name" class="col-xs-3"> |
|||
<strong>Salesperson:</strong> |
|||
<p t-field="doc.user_id"/> |
|||
</div> |
|||
<div name="payment_term" t-if="doc.payment_term_id" class="col-xs-3"> |
|||
<strong>Payment Term:</strong> |
|||
<p t-field="doc.payment_term_id"/> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Is there a discount on at least one line? --> |
|||
<t t-set="display_discount" t-value="any([l.discount for l in doc.order_line])"/> |
|||
|
|||
<table class="table table-condensed"> |
|||
<thead> |
|||
<tr> |
|||
<th>Image</th> |
|||
<th>Description</th> |
|||
<th class="text-right">Quantity</th> |
|||
<th class="text-right">Unit Price</th> |
|||
<th t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line">Disc.(%)</th> |
|||
<th class="text-right">Taxes</th> |
|||
<th class="text-right">Price</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody class="sale_tbody"> |
|||
<t t-foreach="doc.order_line" t-as="l"> |
|||
<tr t-if="l.product_uom_qty"> |
|||
<td> |
|||
<img t-if="l.image" t-att-src="'data:image/png;base64,%s' % l.image" style="max-height: 40px;"/> |
|||
</td> |
|||
<td> |
|||
<span t-field="l.name"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="l.product_uom_qty"/> |
|||
<span groups="product.group_uom" t-field="l.product_uom"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="l.price_unit"/> |
|||
</td> |
|||
<td t-if="display_discount" class="text-right" groups="sale.group_discount_per_so_line"> |
|||
<span t-field="l.discount"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-esc="', '.join(map(lambda x: (x.description or x.name), l.tax_id))"/> |
|||
</td> |
|||
<td class="text-right"> |
|||
<span t-field="l.price_subtotal" |
|||
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
</t> |
|||
</tbody> |
|||
</table> |
|||
|
|||
<div class="row" name="total"> |
|||
<div class="col-xs-4 pull-right"> |
|||
<table class="table table-condensed"> |
|||
<tr class="border-black"> |
|||
<td><strong>Total Without Taxes</strong></td> |
|||
<td class="text-right"> |
|||
<span t-field="doc.amount_untaxed" |
|||
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
<tr> |
|||
<td>Taxes</td> |
|||
<td class="text-right"> |
|||
<span t-field="doc.amount_tax" |
|||
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
<tr class="border-black"> |
|||
<td><strong>Total</strong></td> |
|||
<td class="text-right"> |
|||
<span t-field="doc.amount_total" |
|||
t-field-options='{"widget": "monetary", "display_currency": "doc.pricelist_id.currency_id"}'/> |
|||
</td> |
|||
</tr> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
|
|||
<p t-field="doc.note" /> |
|||
<p t-if="doc.payment_term_id.note"> |
|||
<span t-field="doc.payment_term_id.note"/> |
|||
</p> |
|||
<p t-if="not doc.payment_term_id and doc.partner_id.property_payment_term_id"> |
|||
<span t-field="doc.partner_id.property_payment_term_id.note"/> |
|||
</p> |
|||
<p id="fiscal_position_remark" t-if="doc.fiscal_position_id and doc.fiscal_position_id.note"> |
|||
<strong>Fiscal Position Remark:</strong> |
|||
<span t-field="doc.fiscal_position_id.note"/> |
|||
</p> |
|||
<div class="oe_structure"/> |
|||
</div> |
|||
</t> |
|||
</template> |
|||
<template id="report_saleorder"> |
|||
<t t-call="report.html_container"> |
|||
<t t-foreach="docs" t-as="doc"> |
|||
<t t-call="sale_product_image.report_saleorder_document" t-lang="doc.partner_id.lang"/> |
|||
</t> |
|||
</t> |
|||
</template> |
|||
</data></openerp> |
@ -0,0 +1,10 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets_backend" name="tree icon assets" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/sale_product_image/static/src/js/tree_image.js"></script> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
Loading…
Reference in new issue