[MERGE] Merge with main branch

bzr revid: mra@mra-laptop-20100714072332-7ycx327rn1jogv68
bzr revid: mra@mra-laptop-20100714092142-9kdl5qtzs3cuc2o1
bzr revid: mra@mra-laptop-20100714110809-p0yvxwry1ra1v6ek
bzr revid: mra@mra-laptop-20100714130841-hoaenqsigi2bx9ce
bzr revid: mra@mra-laptop-20100715033243-5swxnpy11l3m02b2
This commit is contained in:
Mustufa Rangwala
2010-07-15 09:02:43 +05:30
67 changed files with 2760 additions and 436 deletions
+6 -1
View File
@@ -1746,7 +1746,12 @@ class account_tax(osv.osv):
tin = self.compute_inv(cr, uid, tin, price_unit, quantity, address_id=address_id, product=product, partner=partner)
for r in tin:
totalex -= r['amount']
tex = self._compute(cr, uid, tex, totalex/quantity, quantity, address_id=address_id, product=product, partner=partner)
totlex_qty=0.0
try:
totlex_qty=totalex/quantity
except:
pass
tex = self._compute(cr, uid, tex, totlex_qty, quantity, address_id=address_id, product=product, partner=partner)
for r in tex:
totalin += r['amount']
return {
+2 -2
View File
@@ -147,7 +147,7 @@
<field name="number" readonly="1"/>
<field name="type" invisible="1"/>
<field name="currency_id" domain="[('company_id','=', company_id)]" on_change="onchange_currency_id(currency_id, company_id)" width="50"/>
<button name="%(action_account_change_currency)d" type="action" icon="gtk-apply" string="Change"/>
<button name="%(action_account_change_currency)d" type="action" icon="terp-stock_effects-object-colorize" string="Change"/>
<newline/>
<field name="partner_id" domain="[('supplier','=', 1)]" on_change="onchange_partner_id(type,partner_id,date_invoice,payment_term, partner_bank,company_id)" context="{'default_customer': 0}"/>
<field domain="[('partner_id','=',partner_id)]" name="address_invoice_id"/>
@@ -202,7 +202,7 @@
<field name="state"/>
<field name="residual"/>
<group col="3" colspan="4">
<button name="invoice_open" states="draft,proforma2" string="Validate" icon="terp-camera_test"/>
<button name="invoice_open" states="draft,proforma2" string="Approve" icon="terp-camera_test"/>
<button name="%(action_account_invoice_pay)d" type='action' string='Pay Invoice' states='open' icon="gtk-ok"/>
<button name="invoice_cancel" states="draft,proforma2,sale,open" string="Cancel" icon="terp-gtk-stop"/>
<button name="action_cancel_draft" states="cancel" string="Set to Draft" type="object" icon="terp-stock_effects-object-colorize"/>
+10 -2
View File
@@ -42,7 +42,7 @@ write({'state':'open'})</field>
</record>
<record model="workflow.activity" id="act_open_test">
<field name="wkf_id" ref="wkf"/>
<field name="name">open</field>
<field name="name">re-open</field>
<field name="action">write({'state':'open'})</field>
<field name="kind">function</field>
</record>
@@ -124,7 +124,15 @@ write({'state':'cancel'})</field>
<field name="act_to" ref="act_cancel"/>
<field name="signal">invoice_cancel</field>
</record>
<record id="open_test_to_paid" model="workflow.transition">
<field name="act_from" ref="act_open_test"/>
<field name="act_to" ref="act_paid"/>
<field name="trigger_model">account.move.line</field>
<field name="trigger_expr_id">move_line_id_payment_get()</field>
<field name="condition">test_paid()</field>
</record>
<record id="draft_to_pro2" model="workflow.transition">
<field name="act_from" ref="account.act_draft"/>
<field name="act_to" ref="act_proforma2"/>
+2 -2
View File
@@ -1059,7 +1059,7 @@
<field name="to_check" groups="base.group_extended"/>
<field name="amount"/>
<field name="state"/>
<button name="button_validate" states="draft" string="Validate" type="object" icon="terp-camera_test"/>
<button name="button_validate" states="draft" string="Approve" type="object" icon="terp-camera_test"/>
</tree>
</field>
</record>
@@ -1127,7 +1127,7 @@
<field name="narration" colspan="4" nolabel="1"/>
<field name="state" select="1"/>
<group col="2" colspan="2">
<button name="button_validate" states="draft" string="Validate" type="object" icon="terp-camera_test"/>
<button name="button_validate" states="draft" string="Approve" type="object" icon="terp-camera_test"/>
<button name="button_cancel" states="posted" string="Cancel" type="object" icon="terp-gtk-stop"/>
</group>
</page>
+42 -25
View File
@@ -82,21 +82,21 @@
</record>
<record model="account.account" id="assets_view">
<field name="name">Assets - (test)</field>
<field name="code">X10</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_asset"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
<field name="name">Assets - (test)</field>
<field name="code">X10</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_asset"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
</record>
<record model="account.account" id="liabilities_view">
<field name="name">Liabilities - (test)</field>
<field name="code">X11</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_liability"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
<field name="name">Liabilities - (test)</field>
<field name="code">X11</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_liability"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
</record>
<record id="fas" model="account.account">
@@ -208,23 +208,32 @@
</record>
<record model="account.account" id="income_view">
<field name="name">Income - (test)</field>
<field name="code">X20</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_income"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
<field name="name">Income - (test)</field>
<field name="code">X20</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_income"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
</record>
<record model="account.account" id="income_fx_income">
<field name="name">Foreign Exchange Gain - (test)</field>
<field name="code">X201</field>
<field name="type">other</field>
<field name="user_type" ref="account_type_income"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="income_view"/>
</record>
<record model="account.account" id="expense_view">
<field name="name">Expense - (test)</field>
<field name="code">X21</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_expense"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
<field name="name">Expense - (test)</field>
<field name="code">X21</field>
<field name="type">view</field>
<field name="user_type" ref="account_type_expense"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
</record>
<record id="rev" model="account.account">
<field name="code">X200</field>
<field name="name">Revenue - (test)</field>
@@ -273,6 +282,14 @@
<field name="user_type" ref="account_type_expense"/>
</record>
<record model="account.account" id="income_fx_expense">
<field name="name">Foreign Exchange Loss - (test)</field>
<field name="code">X2111</field>
<field name="type">other</field>
<field name="user_type" ref="account_type_expense"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="ovr"/>
</record>
<!-- Properties -->
<record forcecreate="True" id="property_account_receivable" model="ir.property">
+9 -6
View File
@@ -892,6 +892,7 @@ class account_invoice(osv.osv):
self.write(cr, uid, [inv.id], {'move_id': move_id,'period_id':period_id, 'move_name':new_move_name})
self.pool.get('account.move').post(cr, uid, [move_id])
self._log_event(cr, uid, ids)
return True
def line_get_convert(self, cr, uid, x, part, date, context=None):
@@ -916,12 +917,12 @@ class account_invoice(osv.osv):
}
def action_number(self, cr, uid, ids, *args):
cr.execute('SELECT id, type, number, move_id, reference ' \
'FROM account_invoice ' \
'WHERE id IN %s',
(tuple(ids),))
obj_inv = self.browse(cr, uid, ids)[0]
for (id, invtype, number, move_id, reference) in cr.fetchall():
for obj_inv in self.browse(cr, uid, ids):
id = obj_inv.id
invtype = obj_inv.type
number = obj_inv.number
move_id = obj_inv.move_id and obj_inv.move_id.id or False
reference = obj_inv.reference
if not number:
if obj_inv.journal_id.invoice_sequence_id:
sid = obj_inv.journal_id.invoice_sequence_id.id
@@ -946,6 +947,8 @@ class account_invoice(osv.osv):
'WHERE account_move_line.move_id = %s ' \
'AND account_analytic_line.move_id = account_move_line.id',
(ref, move_id))
message = _('Invoice ') + " '" + number + "' "+ _("is confirm")
self.log(cr, uid, id, message)
return True
def action_cancel(self, cr, uid, ids, *args):
@@ -16,7 +16,7 @@
<field name="period_id"/>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
<button icon="terp-camera_test" string="Validate" name="validate_move" type="object"/>
<button icon="terp-camera_test" string="Approve" name="validate_move" type="object"/>
</group>
</form>
</field>
@@ -47,7 +47,7 @@
<form string="Validate Moves">
<separator string="Validate Ledger Postings" colspan="4"/>
<button special="cancel" string="Cancel" icon="gtk-cancel"/>
<button name="validate_move_lines" string="Validate" type="object" icon="gtk-go-forward" default_focus="1"/>
<button name="validate_move_lines" string="Approve" type="object" icon="gtk-go-forward" default_focus="1"/>
</form>
</field>
</record>
@@ -148,7 +148,7 @@
<field name="state" select="1"/>
<group col="4" colspan="2">
<button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-apply" />
<button string="Validate" name="validate" states="confirm" type="workflow" icon="gtk-ok"/>
<button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-ok"/>
<button string="Done" name="done" states="validate" type="workflow" icon="gtk-jump-to" />
<button string="Cancel" name="cancel" states="confirm,validate" type="workflow" icon="gtk-cancel"/>
<!--<button string="Set to Draft" name="action_set_to_draft" states="cancel" type="object"/>-->
@@ -181,7 +181,7 @@
<search string="Budget">
<group col="20" colspan="4">
<filter string="Draft" icon="terp-document-new" domain="[('state','=','draft')]" help="Draft Budgets" default="1"/>
<filter string="To Validate" icon="terp-gtk-go-back-rtl" domain="[('state','=','validate')]" help="To Validate Budgets" />
<filter string="To Approve" icon="terp-gtk-go-back-rtl" domain="[('state','=','validate')]" help="To Approve Budgets" />
<separator orientation="vertical"/>
<field name="name" select="1"/>
<field name="code" select="1" />
@@ -207,7 +207,7 @@
</record>
<record id="action_payment_order_open" model="ir.actions.act_window">
<field name="name">Payment Orders to Validate</field>
<field name="name">Payment Orders to Approve</field>
<field name="res_model">payment.order</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
+10 -6
View File
@@ -116,10 +116,10 @@ class account_voucher(osv.osv):
('journal_pur_voucher','Journal Purchase'),
('journal_voucher','Journal Voucher'),
],'Entry Type', select=True , size=128, readonly=True, states={'draft':[('readonly',False)]}),
'date':fields.date('Date', readonly=True, states={'draft':[('readonly',False)]}),
'date':fields.date('Date', readonly=True, states={'draft':[('readonly',False)]}, help="Effective date for accounting entries"),
'journal_id':fields.many2one('account.journal', 'Journal', required=True, readonly=True, states={'draft':[('readonly',False)]}),
'account_id':fields.many2one('account.account', 'Account', required=True, readonly=True, states={'draft':[('readonly',False)]}, domain=[('type','<>','view')]),
'payment_ids':fields.one2many('account.voucher.line','voucher_id','Voucher Lines', readonly=False, states={'proforma':[('readonly',True)]}),
'payment_ids':fields.one2many('account.voucher.line','voucher_id','Voucher Lines', readonly=False, states={'draft':[('readonly',True)]}),
'period_id': fields.many2one('account.period', 'Period', required=True, readonly=True, states={'posted':[('readonly',True)]}),
'narration':fields.text('Narration', readonly=True, states={'draft':[('readonly',False)]}, required=False),
'currency_id': fields.many2one('res.currency', 'Currency', required=True, readonly=True, states={'draft':[('readonly',False)]}),
@@ -137,9 +137,8 @@ class account_voucher(osv.osv):
\n* The \'Posted\' state is used when user create voucher,a voucher number is generated and voucher entries are created in account \
\n* The \'Cancelled\' state is used when user cancel voucher.'),
'amount':fields.float('Amount', readonly=True),
'reference': fields.char('Voucher Reference', size=64),
'reference_type': fields.selection(_get_reference_type, 'Reference Type',
required=True),
'reference': fields.char('Reference', size=64, readonly=True, states={'draft':[('readonly',False)]}, help="Bank cheque number or payorder number"),
'reference_type': fields.selection(_get_reference_type, 'Reference Type', required=True),
'number': fields.related('move_id', 'name', type="char", readonly=True, string='Number'),
'move_id':fields.many2one('account.move', 'Account Entry'),
'move_ids':fields.many2many('account.move.line', 'voucher_id', 'account_id', 'rel_account_move', 'Real Entry'),
@@ -280,7 +279,8 @@ class account_voucher(osv.osv):
'journal_id': journal.id,
'type' : inv.type,
'narration' : inv.narration and inv.narration or inv.name,
'date':inv.date
'date':inv.date,
'ref':inv.reference
}
if inv.period_id:
@@ -366,6 +366,10 @@ class account_voucher(osv.osv):
'move_id': move_id,
'move_ids':[(6, 0,line_ids)]
}
message = _('Voucher ') + " '" + inv.name + "' "+ _("is confirm")
self.log(cr, uid, inv.id, message)
self.write(cr, uid, [inv.id], rec)
return True
+14 -7
View File
@@ -35,7 +35,7 @@
</group>
<notebook colspan="4">
<page string="Journal Entries">
<field name="payment_ids" colspan="4" nolabel="1" height="250">
<field name="payment_ids" colspan="4" nolabel="1" height="200">
<tree string="Voucher Lines" editable="top">
<field name="partner_id" on_change="onchange_partner(partner_id,type,parent.type, parent.currency_id)"/>
<field name="account_id"/>
@@ -46,14 +46,21 @@
<field name="ref"/>
</tree>
</field>
<separator string="Narration" colspan="4"/>
<field name="narration" colspan="4" nolabel="1" height="50"/>
<group col="2" colspan="3">
<separator string="Narration" colspan="2"/>
<field name="narration" colspan="2" nolabel="1"/>
</group>
<group col="2" colspan="1">
<separator string="Other Informtion" colspan="2"/>
<field name="reference" select="1"/>
<field name="date" select="1"/>
<field name="currency_id" select="1"/>
</group>
</page>
<page string="Other Info">
<page string="Accounting Entries">
<field name="company_id" select="1" widget="selection" groups="base.group_multi_company"/>
<field name="currency_id" select="1" />
<field name="period_id"/>
<field name="date" select="1"/>
<separator string="General Entries" colspan="4"/>
<field name="move_ids" colspan="4" nolabel="1" readonly="1"/>
</page>
@@ -62,7 +69,7 @@
<field name="state"/>
<button name="open_voucher" string="Pro-forma" states="draft" icon="terp-check"/>
<button name="proforma_voucher" string="Create" states="proforma" icon="terp-document-new"/>
<button name="recheck_voucher" string="Validate" states="recheck" icon="terp-check"/>
<button name="recheck_voucher" string="Approve" states="recheck" icon="terp-check"/>
<button name="audit_complete" string="Audit Pass" states="posted" icon="terp-check"/>
<button name="cancel_voucher" string="Cancel" states="proforma,recheck,posted" icon="gtk-cancel"/>
<button name="cancel_to_draft" states="cancel" string="Set to Draft" icon="terp-stock_effects-object-colorize"/>
@@ -63,7 +63,8 @@ class account_voucher(osv.osv):
'journal_id': journal.id,
'type' : inv.type,
'narration' : inv.narration and inv.narration or inv.name,
'date':inv.date
'date':inv.date,
'ref':inv.reference
}
if inv.period_id:
@@ -101,6 +102,7 @@ class account_voucher(osv.osv):
line_ids = []
line_ids += [move_line_pool.create(cr, uid, move_line)]
rec_ids = []
for line in inv.payment_ids:
amount=0.0
move_line = {
@@ -146,16 +148,23 @@ class account_voucher(osv.osv):
line_ids += [move_line_id]
if line.invoice_id:
rec_ids = [move_line_id]
rec_ids += [move_line_id]
for move_line in line.invoice_id.move_id.line_id:
if line.account_id.id == move_line.account_id.id:
rec_ids += [move_line.id]
move_line_pool.reconcile_partial(cr, uid, rec_ids)
#move_line_pool.reconcile_partial(cr, uid, rec_ids)
if rec_ids:
move_line_pool.reconcile_partial(cr, uid, rec_ids)
rec = {
'move_id': move_id,
'move_ids':[(6, 0,line_ids)]
}
message = _('Voucher ') + " '" + inv.name + "' "+ _("is confirm")
self.log(cr, uid, inv.id, message)
self.write(cr, uid, [inv.id], rec)
return True
+1 -1
View File
@@ -29,7 +29,7 @@ class profile_association_config_install_modules_wizard(osv.osv_memory):
_columns = {
'hr_expense':fields.boolean('Expenses Tracking', help="Tracks the personal expenses process, from the employee expense encoding, to the reimbursement of the employee up to the reinvoicing to the final customer."),
'project':fields.boolean('Project Management'),
'event_project':fields.boolean('Organization and management of events', help="This module allows you to create retro planning for managing your events."),
'event_project':fields.boolean('Organization and management of Events', help="This module allows you to create retro planning for managing your events."),
'project_gtd':fields.boolean('Getting Things Done',
help="GTD is a methodology to efficiently organise yourself and your tasks. This module fully integrates GTD principle with OpenERP's project management."),
'wiki': fields.boolean('Wiki',
@@ -18,6 +18,9 @@
position="attributes">
<attribute name="string">Install more modules. A few modules are proposed according to the Association Profile you selected. You will be able to install them based on our requirements.</attribute>
</xpath>
<xpath expr="//button[@string='Install Modules']" position="attributes">
<attribute name="string">Configure</attribute>
</xpath>
<separator string="title" position="replace"/>
<group colspan="8">
<separator string="Project Management" colspan="4"/>
+1 -1
View File
@@ -45,7 +45,7 @@
'update_xml': [
'security/ir.model.access.csv',
'base_contact_view.xml',
'base_contact_installer_view.xml',
# 'base_contact_installer_view.xml',
'process/base_contact_process.xml'
],
'demo_xml': ['base_contact_demo.xml'],
+2 -2
View File
@@ -72,8 +72,8 @@
<tree string="Functions and Addresses">
<field name="sequence_contact" string="Seq."/>
<field name="function"/>
<field name="name"/>
<field name="address_id"/>
<field name="name" on_change="onchange_partner(name)"/>
<field name="address_id" attrs="{'required': [('name', '!=', False)]}" on_change="onchange_address(address_id)"/>
<field name="phone"/>
<field name="fax"/>
<field name="extension"/>
+2 -2
View File
@@ -25,11 +25,11 @@
'version': '0.1',
'category': 'Generic Modules/Base',
'description': """
This module is used along with openerp OpenOffice plugin.
This module is used along with OpenERP OpenOffice plugin.
You have to first install the plugin which is available at
http://www.openerp.com
This module adds wizards to import/export .SXW report that
This module adds wizards to Import/Export .sxw report that
you can modify in OpenOffice.Once you have modified it you can
upload the report using the same wizard.
""",
@@ -7,6 +7,7 @@
<field eval="[(6,0,[ref('base.user_root')])]" name="users"/>
<field eval="&quot;&quot;&quot;OpenOfficeReportDesigner&quot;&quot;&quot;" name="name"/>
</record>
<record id="ir_model_access_openofficereportdesigner0" model="ir.model.access">
<field name="model_id" ref="base.model_ir_actions_report_xml"/>
<field eval="1" name="perm_read"/>
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
#
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
@@ -15,11 +15,11 @@
# 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/>.
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields,osv
from osv import osv
from wizard.tiny_sxw2rml import sxw2rml
from StringIO import StringIO
from report import interface
@@ -27,49 +27,53 @@ import base64
import pooler
import tools
class report_xml(osv.osv):
_inherit = 'ir.actions.report.xml'
def sxwtorml(self,cr, uid, file_sxw,file_type):
def sxwtorml(self, cr, uid, file_sxw, file_type):
'''
The use of this function is to get rml file from sxw file.
'''
sxwval = StringIO(base64.decodestring(file_sxw))
if file_type=='sxw':
fp = tools.file_open('normalized_oo2rml.xsl',
fp = tools.file_open('normalized_oo2rml.xsl',
subdir='addons/base_report_designer/wizard/tiny_sxw2rml')
if file_type=='odt':
fp = tools.file_open('normalized_odt2rml.xsl',
fp = tools.file_open('normalized_odt2rml.xsl',
subdir='addons/base_report_designer/wizard/tiny_sxw2rml')
return {'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read()))}
def upload_report(self, cr, uid, report_id, file_sxw,file_type, context):
def upload_report(self, cr, uid, report_id, file_sxw, file_type, context):
'''
Untested function
'''
pool = pooler.get_pool(cr.dbname)
sxwval = StringIO(base64.decodestring(file_sxw))
if file_type=='sxw':
fp = tools.file_open('normalized_oo2rml.xsl',
fp = tools.file_open('normalized_oo2rml.xsl',
subdir='addons/base_report_designer/wizard/tiny_sxw2rml')
if file_type=='odt':
fp = tools.file_open('normalized_odt2rml.xsl',
fp = tools.file_open('normalized_odt2rml.xsl',
subdir='addons/base_report_designer/wizard/tiny_sxw2rml')
report = pool.get('ir.actions.report.xml').write(cr, uid, [report_id], {
'report_sxw_content': base64.decodestring(file_sxw),
'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())),
'report_sxw_content': base64.decodestring(file_sxw),
'report_rml_content': str(sxw2rml(sxwval, xsl=fp.read())),
})
db = pooler.get_db_only(cr.dbname)
interface.register_all(db)
return True
def report_get(self, cr, uid, report_id, context={}):
report = self.browse(cr, uid, report_id, context)
return {
'file_type' : report.report_type,
'report_sxw_content': report.report_sxw_content and base64.encodestring(report.report_sxw_content) or False,
'file_type' : report.report_type,
'report_sxw_content': report.report_sxw_content and base64.encodestring(report.report_sxw_content) or False,
'report_rml_content': report.report_rml_content and base64.encodestring(report.report_rml_content) or False
}
report_xml()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
@@ -1,31 +1,22 @@
<?xml version="1.0"?>
<openerp>
<data>
<data>
<wizard
string="Modify an existing report"
model="ir.actions.report.xml"
name="base_report_designer.modify"
id="wizard_report_designer_modify"/>
<wizard string="Modify an existing report"
model="ir.actions.report.xml" name="base_report_designer.modify"
id="wizard_report_designer_modify" />
<menuitem icon="terp-graph" id="base.reporting_menu" name="Reporting" sequence="30"/>
<menuitem
id="base.next_id_50"
name="Configuration"
parent="base.reporting_menu"
groups="base.group_system"
sequence="3"/>
<menuitem
parent="base.next_id_50"
name="Report Designer"
action="wizard_report_designer_modify"
type="wizard"
id="menu_wizard_report_designer_modify"
sequence="70"/>
<menuitem icon="terp-graph" id="base.reporting_menu"
name="Reporting" sequence="30" />
<menuitem id="base.next_id_50" name="Configuration"
parent="base.reporting_menu" groups="base.group_system" sequence="3" />
<menuitem parent="base.next_id_50" name="Report Designer"
action="wizard_report_designer_modify" type="wizard"
id="menu_wizard_report_designer_modify" sequence="70" />
</data>
</data>
</openerp>
+18 -2
View File
@@ -152,8 +152,10 @@ and users"),
\nIf the case is in progress the state is set to \'Open\'.\
\nWhen the case is over, the state is set to \'Done\'.\
\nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)]),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)]),
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True),('model','=',_name)], readonly=True),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False),('model','=',_name)], readonly=True),
'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', help="Partner this case has been forwarded/assigned to.", select=True),
'date_assign': fields.date('Assignation Date', help="Last date this case was forwarded/assigned to a partner"),
}
_defaults = {
@@ -167,6 +169,20 @@ and users"),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
}
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
"""This function returns value of partner email based on Partner Address
@param self: The object pointer
@param cr: the current row, from the database cursor,
@param uid: the current user’s ID for security checks,
@param ids: List of case IDs
@param add: Id of Partner's address
@email: Partner's email ID
"""
if not add:
return {'value': {'email_from': False, 'country_id': False}}
address = self.pool.get('res.partner.address').browse(cr, uid, add)
return {'value': {'email_from': address.email, 'phone': address.phone, 'country_id': address.country_id.id}}
def case_open(self, cr, uid, ids, *args):
"""Overrides cancel for crm_case for setting Open Date
@param self: The object pointer
+2 -3
View File
@@ -91,7 +91,7 @@
<field name="mobile"/>
<newline/>
<separator string="Links" colspan="4" col="3"/>
<field name="partner_id"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)"/>
<button
name="%(action_crm_lead2partner)d"
icon="gtk-index" type="action"
@@ -193,11 +193,10 @@
name="%(crm.action_crm_send_mail)d"
context="{'mail':'new', 'model': 'crm.lead'}"
icon="gtk-go-forward" type="action" />
<button colspan="2" string="Forward to Partner"
<button colspan="2" string="Forward"
name="%(crm_lead_forward_to_partner_act)d"
icon="gtk-go-forward" type="action" />
</page>
</notebook>
</form>
</field>
+1 -1
View File
@@ -46,7 +46,7 @@ class crm_opportunity(osv.osv):
domain="[('partner_id','=',partner_id)]"),
# Opportunity fields
'probability': fields.float('Probability (%)'),
'probability': fields.float('Probability (%)',group_operator="avg"),
'planned_revenue': fields.float('Expected Revenue'),
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
+15
View File
@@ -190,6 +190,21 @@
</form>
</field>
</page>
<page string="Assignation" groups="base.group_extended">
<group name="partner_assign_group" col="5" colspan="4">
<separator string="Partner Assignation" colspan="5"/>
<field name="partner_assigned_id"/>
<field name="date_assign"/>
<group colspan="1" col="1">
<button string="Forward"
attrs="{'invisible':[('partner_assigned_id','=',False)]}"
name="%(crm_lead_forward_to_partner_act)d"
icon="gtk-go-forward" type="action"
context="{'default_name': 'partner', 'default_partner_id': partner_assigned_id}"
/>
</group>
</group>
</page>
</notebook>
</form>
</field>
+2
View File
@@ -76,6 +76,7 @@ class crm_lead_report(osv.osv):
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
'country_id':fields.many2one('res.country', 'Country', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
@@ -141,6 +142,7 @@ class crm_lead_report(osv.osv):
c.section_id,
c.categ_id,
c.partner_id,
c.country_id,
c.planned_revenue,
1 as nbr,
0 as avg_answers,
+3 -1
View File
@@ -104,6 +104,7 @@
<filter string="User" name="user" icon="terp-personal"
domain="[]" context="{'group_by':'user_id'}" />
<filter string="Partner" icon="terp-personal" context="{'group_by':'partner_id'}" />
<filter string="Country" icon="terp-go-home" context="{'group_by':'country_id'}" />
<separator orientation="vertical" />
<filter string="Section" icon="terp-personal+"
domain="[]"
@@ -133,7 +134,7 @@
<group expand="0" string="Extended options..." groups="base.group_extended">
<field name="partner_id"/>
<separator orientation="vertical"/>
<field name="stage_id" widget="selection" domain="[('section_id','=',section_id), ('object_id.model', '=', 'crm.lead')]" />
<field name="stage_id" widget="selection" domain="[('object_id.model', '=', 'crm.lead')]" />
<field name="categ_id" widget="selection" domain="[('object_id.model', '=', 'crm.lead')]"/>
<separator orientation="vertical"/>
<field name="company_id" widget="selection" groups="base.group_multi_company"/>
@@ -159,6 +160,7 @@
<field name="section_id" invisible="1" groups="base.group_extended"/>
<field name="user_id" invisible="1"/>
<field name="partner_id" invisible="1"/>
<field name="country_id" invisible="1"/>
<field name="day" invisible="1"/>
<field name="state" invisible="1"/>
<field name="stage_id" invisible="1"/>
+5 -3
View File
@@ -26,11 +26,13 @@ class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
'Leads and Opportunities'),
'Leads and Opportunities'),
'meeting_ids': fields.one2many('crm.meeting', 'partner_id',\
'Meetings'),
'Meetings'),
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
'Phonecalls'),
'Phonecalls'),
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
'Assigned Opportunities'),
}
res_partner()
+33
View File
@@ -44,6 +44,39 @@
icon="gtk-cancel" />
</tree>
</field>
<field name="opportunity_assigned_ids" colspan="4" nolabel="1">
<tree string="Assigned Opportunities" colors="blue:state=='pending';grey:state=='cancel')">
<field name="create_date"/>
<field name="name"/>
<field name="type"/>
<field name="stage_id"/>
<button name="stage_previous" string="Previous"
states="open,pending" type="object" icon="gtk-go-back" />
<button name="stage_next" string="Next"
states="open,pending" type="object"
icon="gtk-go-forward" />
<field name="section_id"
invisible="context.get('invisible_section', True)" />
<field name="user_id" />
<field name="state" />
<button name="case_open" string="Open"
states="draft,pending" type="object"
icon="gtk-go-forward" />
<button name="case_close" string="Close"
states="open,draft,pending" type="object"
icon="gtk-close" />
<button string="Convert to Opportunity"
name="convert_opportunity"
states="draft,open,pending" icon="gtk-index"
type="object" />
<button name="case_escalate" string="Escalate"
states="open,draft,pending" type="object"
icon="gtk-go-up" />
<button name="case_cancel" string="Cancel"
states="draft,open,pending" type="object"
icon="gtk-cancel" />
</tree>
</field>
<field name="meeting_ids" colspan="4" nolabel="1" >
<tree string="Meetings" colors="gray:state in ('draft', 'cancel','done','pending')">
<field name="user_id" string="Responsible"/>
@@ -22,6 +22,7 @@
import base64
import itertools
import time
from osv import osv, fields
import tools
@@ -218,6 +219,10 @@ class crm_lead_forward_to_partner(osv.osv_memory):
if result:
case_pool.history(cr, uid, [case], _('Forward'), history=True, email=this.email_to, subject=this.subject, details=body, email_from=email_from, attach=attach)
to_write = {'date_assign': time.strftime('%Y-%m-%d')}
if (this.name == 'partner' and this.partner_id):
to_write['partner_assigned_id'] = this.partner_id.id
case_pool.write(cr, uid, case.id, to_write)
else:
raise osv.except_osv(_('Error!'), _('Unable to send mail. Please check SMTP is configured properly.'))
@@ -30,7 +30,7 @@
<form string="Create a Partner">
<field name="action"/>
<group attrs="{'invisible':[('action','!=','exist')]}">
<field name="partner_id"/>
<field name="partner_id" attrs="{'required':[('action','=','exist')]}" />
</group>
<separator string="" colspan="4" />
<group col="4" colspan="4">
+24 -30
View File
@@ -26,25 +26,18 @@ import base64
import tools
from crm import crm
class crm_send_new_email(osv.osv_memory):
""" Sends new email for the case"""
_name = "crm.send.mail"
crm_send_new_email()
class crm_send_new_email_attachment(osv.osv_memory):
_name = 'crm.send.mail.attachment'
_columns = {
'binary' : fields.binary('Attachment', required=True),
'name' : fields.char('Name', size=128, required=True),
'wizard_id' : fields.many2one('crm.send.mail', 'Wizard', required=True),
}
crm_send_new_email_attachment()
class crm_send_new_email2(osv.osv_memory):
class crm_send_new_email(osv.osv_memory):
""" Sends new email for the case"""
_name = "crm.send.mail"
_description = "Send new email"
@@ -52,12 +45,12 @@ class crm_send_new_email2(osv.osv_memory):
_columns = {
'email_to' : fields.char('To', size=512, required=True),
'email_from' : fields.char('From', size=128, required=True),
'reply_to' : fields.char('Reply To', size=128, required=True, help="Reply-to of the Sales team defined on this case"),
'email_cc' : fields.char('CC', size=512, help="Carbon Copy: list of recipients that will receive"\
" a copy of this mail, and future communication related to this case"),
'subject': fields.char('Subject', size=512, required=True),
'text': fields.text('Message', required=True),
'state': fields.selection(crm.AVAILABLE_STATES, string='Set New State To', required=True),
'attachment_ids' : fields.one2many('crm.send.mail.attachment', 'wizard_id'),
}
@@ -120,29 +113,28 @@ class crm_send_new_email2(osv.osv_memory):
body,
email_cc=email_cc,
attach=attach,
reply_to=case.section_id and case.section_id.reply_to,
reply_to=obj.reply_to,
openobject_id=str(case.id),
x_headers=x_headers
)
if not flag:
raise osv.except_osv(_('Error!'), _('Unable to send mail. Please check SMTP is configured properly.'))
if flag:
case_pool.history(cr, uid, [case], _('Send'), history=True, \
email=obj.email_to, details=body, \
subject=obj.subject, email_from=email_from, \
email_cc=email_cc, message_id=message_id, \
references=ref_id or message_id, attach=attach)
if obj.state == 'unchanged':
pass
elif obj.state == 'done':
case_pool.case_close(cr, uid, [case.id])
elif obj.state == 'draft':
case_pool.case_reset(cr, uid, [case.id])
elif obj.state in ['cancel', 'open', 'pending']:
act = 'case_' + obj.state
getattr(case_pool, act)(cr, uid, [case.id])
cr.commit()
case_pool.history(cr, uid, [case], _('Send'), history=True, \
email=obj.email_to, details=body, \
subject=obj.subject, email_from=email_from, \
email_cc=email_cc, message_id=message_id, \
references=ref_id or message_id, attach=attach)
if obj.state == 'unchanged':
pass
elif obj.state == 'done':
case_pool.case_close(cr, uid, [case.id])
elif obj.state == 'draft':
case_pool.case_reset(cr, uid, [case.id])
elif obj.state in ['cancel', 'open', 'pending']:
act = 'case_' + obj.state
getattr(case_pool, act)(cr, uid, [case.id])
return {}
@@ -156,7 +148,7 @@ class crm_send_new_email2(osv.osv_memory):
if not context.get('model'):
raise osv.except_osv(_('Error'), _('Can not send mail!'))
res = super(crm_send_new_email2, self).default_get(cr, uid, fields, context=context)
res = super(crm_send_new_email, self).default_get(cr, uid, fields, context=context)
if context.get('mail') == 'reply':
res.update(self.get_reply_defaults(cr, uid, fields, context=context))
@@ -171,9 +163,11 @@ class crm_send_new_email2(osv.osv_memory):
for case in mod_obj.browse(cr, uid, res_id):
if 'email_to' in fields:
res.update({'email_to': tools.ustr(case.email_from)})
res.update({'email_to': case.email_from and tools.ustr(case.email_from) or ''})
if 'email_from' in fields:
res.update({'email_from': tools.ustr(user_mail_from)})
res.update({'email_from': user_mail_from and tools.ustr(user_mail_from) or ''})
if 'reply_to' in fields:
res.update({'reply_to': case.section_id.reply_to})
if 'subject' in fields:
res.update({'subject': tools.ustr(context.get('subject', case.name) or '')})
if 'email_cc' in fields:
@@ -249,5 +243,5 @@ class crm_send_new_email2(osv.osv_memory):
raise osv.except_osv(_('Error'), _('Can not send mail!'))
return True
crm_send_new_email2()
crm_send_new_email()
@@ -12,6 +12,7 @@
<form string="Send New Mail" col="4">
<group colspan="4" col="2">
<field name="email_from"/>
<field name="reply_to"/>
<field name="email_to" />
<field name="email_cc"/>
<field name="subject"/>
@@ -211,7 +211,7 @@
<field name="act_window_id" ref="action_report_crm_claim"/>
</record>
<menuitem name="Claims" id="menu_report_crm_claim_tree"
<menuitem name="Claims Analysis" id="menu_report_crm_claim_tree"
groups="base.group_extended"
action="action_report_crm_claim" parent="base.next_id_64" sequence="6"/>
@@ -198,7 +198,7 @@
<field name="act_window_id" ref="action_report_crm_fundraising"/>
</record>
<menuitem name="Fundraising"
<menuitem name="Fundraising Analysis"
action="action_report_crm_fundraising"
groups="base.group_extended"
id="menu_report_crm_fundraising_tree" parent="base.next_id_64" sequence="20"/>
@@ -179,7 +179,7 @@
<field name="act_window_id" ref="action_report_crm_helpdesk"/>
</record>
<menuitem name="Helpdesk" action="action_report_crm_helpdesk"
<menuitem name="Helpdesk Analysis" action="action_report_crm_helpdesk"
groups="base.group_extended"
id="menu_report_crm_helpdesks_tree" parent="base.next_id_64" sequence="7"/>
+4 -2
View File
@@ -62,6 +62,7 @@ import email_template_engines
import tools
import report
import pooler
import logging
def get_value(cursor, user, recid, message=None, template=None, context=None):
"""
@@ -99,6 +100,7 @@ def get_value(cursor, user, recid, message=None, template=None, context=None):
reply = templ.render(Context(env))
return reply or False
except Exception:
logging.exception("can't render %r", message)
return u""
else:
return message
@@ -543,7 +545,7 @@ class email_template(osv.osv):
if lang:
ctx = context.copy()
ctx.update({'lang':lang})
template = self.browse(cursor, user, template_id, context=ctx)
template = self.browse(cursor, user, template.id, context=ctx)
mailbox_values = {
'email_from': tools.ustr(from_account['name']) + \
"<" + tools.ustr(from_account['email_id']) + ">",
@@ -641,7 +643,7 @@ class email_template(osv.osv):
context=context
)
if template.report_template:
self._generate_attach_reports(
self.generate_attach_reports(
cursor,
user,
template,
+1 -1
View File
@@ -128,7 +128,7 @@
<group>
<filter icon="terp-document-new" domain="[('state','=','draft')]" string="Draft" help="Draft Expense"/>
<separator orientation="vertical"/>
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','confirm')]" string="To Validate"
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','confirm')]" string="To Approve"
help="Confirmed Expense"/>
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','accepted')]" string="To Pay"
help="Expenses to Invoice"/>
+6 -6
View File
@@ -10,7 +10,7 @@
<search string="Search Leave">
<group col='8' colspan='4'>
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','draft')]" string="To Confirm"/>
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','confirm')]" string="To Validate"/>
<filter icon="terp-gtk-go-back-rtl" domain="[('state','=','confirm')]" string="To Approve"/>
<filter icon="terp-camera_test" domain="[('state','=','validate')]" string="Validated"
default="context.get('report', False)"/>
<separator orientation="vertical"/>
@@ -69,8 +69,8 @@
<field name="state" colspan="2"/>
<group colspan="2">
<button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes"/>
<button string="Validate" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Approve" name="second_validate" states="validate1" type="workflow" icon="gtk-apply"/>
<button string="To Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Approved" name="second_validate" states="validate1" type="workflow" icon="gtk-apply"/>
<button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" icon="gtk-no"/>
<button string="Cancel" name="cancel" states="validate,refuse" type="workflow" icon="gtk-cancel"/>
<button string="Set to Draft" name="set_to_draft" states="cancel" type="object" icon="gtk-convert"/>
@@ -113,8 +113,8 @@
<field name="state" colspan="2"/>
<group colspan="2">
<button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes"/>
<button string="Validate" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Approve" name="second_validate" states="validate1" type="workflow" icon="gtk-apply"/>
<button string="To Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Approved" name="second_validate" states="validate1" type="workflow" icon="gtk-apply"/>
<button string="Refuse" name="refuse" states="confirm,validate1" type="workflow" icon="gtk-no"/>
<button string="Cancel" name="cancel" states="validate,refuse" type="workflow" icon="gtk-cancel"/>
<button string="Set to Draft" name="set_to_draft" states="cancel" type="object" icon="gtk-convert"/>
@@ -168,7 +168,7 @@
<field name="state" colspan="2"/>
<group colspan="2">
<button string="Confirm" name="confirm" states="draft" type="workflow" icon="gtk-yes"/>
<button string="Validate" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Approve" name="validate" states="confirm" type="workflow" icon="gtk-apply"/>
<button string="Refuse" name="refuse" states="confirm" type="workflow" icon="gtk-no"/>
<button string="Cancel" name="cancel" states="validate,refuse,validate1" type="workflow" icon="gtk-cancel"/>
<button string="Set to Draft" name="set_to_draft" states="cancel" type="object" icon="gtk-convert"/>
+1 -1
View File
@@ -505,7 +505,7 @@
<button string="Compute Sheet" icon="terp-stock_format-scientific" name="compute_sheet" states="new"/>
<button string="Recompute Sheet" icon="terp-stock_format-scientific" name="compute_sheet" type="object" states="draft"/>
<button string="Verify Sheet" icon="terp-camera_test" name="verify_sheet" states="draft"/>
<button string="Validate Sheet" icon="terp-camera_test" name="final_verify_sheet" states="hr_check"/>
<button string="Approve Sheet" icon="terp-camera_test" name="final_verify_sheet" states="hr_check"/>
<button string="Pay Salary" icon="terp-dolar_ok!" name="process_sheet" states="confirm"/>
<button string="Cancel" icon="terp-dialog-close" name="cancel_sheet" states="draft,hr_check,confirm"/>
<button string="Set to Draft" icon="terp-stock_effects-object-colorize" name="set_to_draft" states="cancel"/>
@@ -195,7 +195,7 @@
<search string="Search Timesheet">
<group col="10" colspan="4">
<filter icon="terp-document-new" string="In Draft" domain="[('state','in',('draft', 'new'))]" help="Unvalidated Timesheets"/>
<filter icon="terp-gtk-go-back-rtl" string="To Validate" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
<filter icon="terp-gtk-go-back-rtl" string="To Approve" domain="[('state','=','confirm')]" help="Confirmed Timesheets"/>
<separator orientation="vertical"/>
<field name="user_id" select="1"/>
<field name="date_from"/>
+42 -25
View File
@@ -22,21 +22,21 @@
</record>
<record model="account.account.template" id="assets_view">
<field name="name">Assets</field>
<field name="code">10</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_asset_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
<field name="name">Assets</field>
<field name="code">10</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_asset_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
</record>
<record model="account.account.template" id="liabilities_view">
<field name="name">Liabilities</field>
<field name="code">11</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_liability_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
<field name="name">Liabilities</field>
<field name="code">11</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_liability_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="bal"/>
</record>
<record id="fas" model="account.account.template">
@@ -156,21 +156,30 @@
</record>
<record model="account.account.template" id="income_view">
<field name="name">Income</field>
<field name="code">20</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_income_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
<field name="name">Income</field>
<field name="code">20</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_income_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
</record>
<record model="account.account.template" id="income_fx_income">
<field name="name">Foreign Exchange Gain</field>
<field name="code">X201</field>
<field name="type">other</field>
<field name="user_type" ref="acct_type_income_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="income_view"/>
</record>
<record model="account.account.template" id="expense_view">
<field name="name">Expense</field>
<field name="code">21</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_expense_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
<field name="name">Expense</field>
<field name="code">21</field>
<field name="type">view</field>
<field name="user_type" ref="acct_type_expense_view"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="gpf"/>
</record>
<record id="rev" model="account.account.template">
@@ -225,10 +234,18 @@
<field name="user_type" ref="account_type_expense"/>
</record>
<record model="account.account.template" id="income_fx_expense">
<field name="name">Foreign Exchange Loss - (test)</field>
<field name="code">X2111</field>
<field name="type">other</field>
<field name="user_type" ref="account_type_expense"/>
<field name="reconcile" eval="False"/>
<field name="parent_id" ref="ovr"/>
</record>
<!-- <record id="account.property_account_expense_categ" model="ir.property">
<field eval="'account.account,'+str(a_expense)" name="value"/>
</record> -->
</data>
</openerp>
+14 -14
View File
@@ -41,8 +41,8 @@ class mailgate_thread(osv.osv):
_description = 'Mailgateway Thread'
_columns = {
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True)]),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False)]),
'message_ids': fields.one2many('mailgate.message', 'res_id', 'Messages', domain=[('history', '=', True)], readonly=True),
'log_ids': fields.one2many('mailgate.message', 'res_id', 'Logs', domain=[('history', '=', False)], readonly=True),
}
def message_new(self, cr, uid, msg, context):
@@ -149,23 +149,23 @@ class mailgate_message(osv.osv):
_description = 'Mailgateway Message'
_order = 'id desc'
_columns = {
'name':fields.text('Subject'),
'model': fields.char('Object Name', size=128, select=1),
'res_id': fields.integer('Resource ID', select=1),
'name':fields.text('Subject', readonly=True),
'model': fields.char('Object Name', size=128, select=1, readonly=True),
'res_id': fields.integer('Resource ID', select=1, readonly=True),
'ref_id': fields.char('Reference Id', size=256, readonly=True, help="Message Id in Email Server.", select=True),
'date': fields.datetime('Date'),
'history': fields.boolean('Is History?'),
'date': fields.datetime('Date', readonly=True),
'history': fields.boolean('Is History?', readonly=True),
'user_id': fields.many2one('res.users', 'User Responsible', readonly=True),
'message': fields.text('Description'),
'email_from': fields.char('From', size=128, help="Email From"),
'email_to': fields.char('To', help="Email Recipients", size=256),
'email_cc': fields.char('Cc', help="Carbon Copy Email Recipients", size=256),
'email_bcc': fields.char('Bcc', help='Blind Carbon Copy Email Recipients', size=256),
'message': fields.text('Description', readonly=True),
'email_from': fields.char('From', size=128, help="Email From", readonly=True),
'email_to': fields.char('To', help="Email Recipients", size=256, readonly=True),
'email_cc': fields.char('Cc', help="Carbon Copy Email Recipients", size=256, readonly=True),
'email_bcc': fields.char('Bcc', help='Blind Carbon Copy Email Recipients', size=256, readonly=True),
'message_id': fields.char('Message Id', size=1024, readonly=True, help="Message Id on Email.", select=True),
'references': fields.text('References', readonly=True, help="References emails."),
'description': fields.text('Description'),
'description': fields.text('Description', readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner', required=False),
'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'),
'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments', readonly=True),
}
def init(self, cr):
+43 -57
View File
@@ -152,29 +152,44 @@ you required for the campaign"),
def signal(self, cr, uid, model, res_id, signal, context=None):
record = self.pool.get(model).browse(cr, uid, res_id, context)
return self._signal(cr, uid, record, signal, context)
def _signal(self, cr, uid, record, signal, context=None):
if not signal:
raise ValueError('signal cannot be False')
Workitems = self.pool.get('marketing.campaign.workitem')
domain = [('object_id.model', '=', model),
domain = [('object_id.model', '=', record._table._name),
('state', '=', 'running')]
campaign_ids = self.search(cr, uid, domain, context=context)
for campaign in self.browse(cr, uid, campaign_ids, context):
for activity in campaign.activity_ids:
if activity.signal != signal:
continue
wi_domain = [('activity_id', '=', activity.id),
('res_id', '=', res_id),
('state', '=', 'todo'),
('date', '=', False),
]
data = dict(activity_id=activity.id,
res_id=record.id,
state='todo')
wi_domain = [(k, '=', v) for k, v in data.items()]
wi_ids = Workitems.search(cr, uid, wi_domain, context=context)
if not wi_ids:
partner = self._get_partner_for(campaign, record)
if partner:
data['partner_id'] = partner.id
wi_id = Workitems.create(cr, uid, data, context=context)
wi_ids = [wi_id]
Workitems.process(cr, uid, wi_ids, context=context)
return True
def _signal(self, cr, uid, record, signal, context=None):
return self.signal(cr, uid, record._table._name,
record.id, signal, context)
def _get_partner_for(self, campaign, record):
partner_field = campaign.partner_field_id.name
if partner_field:
return getattr(record, partner_field)
elif campaign.model_id.model == 'res.partner':
return record
return None
marketing_campaign()
@@ -247,7 +262,6 @@ class marketing_campaign_segment(osv.osv):
uid, [('start', '=', True), ('campaign_id', '=', segment.campaign_id.id)], context=context)
model_obj = self.pool.get(segment.object_id.model)
partner_field = segment.campaign_id.partner_field_id.name
criteria = []
if segment.sync_last_date:
criteria += [(segment.sync_mode, '>', segment.sync_last_date)]
@@ -269,11 +283,7 @@ class marketing_campaign_segment(osv.osv):
'res_id': o_ids.id
}
partner = None
if partner_field:
partner = getattr(o_ids, partner_field)
elif model_obj._name == 'res.partner':
partner = o_ids
partner = self.pool.get('marketing.campaign')._get_partner_for(segment.campaign_id, o_ids)
if partner:
wi_vals['partner_id'] = partner.id
@@ -295,9 +305,7 @@ class marketing_campaign_activity(osv.osv):
('email', 'E-mail'),
('paper', 'Paper'),
('action', 'Action'),
# TODO implement the subcampaigns. The segment_id on woritems must be
# optional (thus campaign_id must be a real many2one, and a constraint
# must be set).
# TODO implement the subcampaigns.
# TODO implement the subcampaign out. disallow out transitions from
# subcampaign activities ?
#('subcampaign', 'Sub-Campaign'),
@@ -333,8 +341,9 @@ class marketing_campaign_activity(osv.osv):
'variable_cost': fields.float('Variable Cost'),
'revenue': fields.float('Revenue'),
'signal': fields.char('Signal', size=128,
help='An activity with a signal can be called \
programmatically'),
help='An activity with a signal can be called programmatically. Attention, the workitem is always created when the signal is send'),
'keep_if_condition_not_met': fields.boolean('Keep if condition not met',
help="By activating this option, the workitems that aren't processed because the condition is not met are marked as cancelled instead of being deleted.")
}
_defaults = {
@@ -342,20 +351,6 @@ class marketing_campaign_activity(osv.osv):
'condition': lambda *a: 'True',
}
def _check_signal(self, cr, uid, ids, context=None):
return all(activity.signal
for activity in self.browse(cr, uid, ids, context)
for transition in activity.from_ids
if transition.trigger == 'signal')
_constraints = [
(_check_signal,
"An incoming transition is triggered by a signal but this transition \
doesn't have one",
['signal', 'from_ids']
),
]
def search(self, cr, uid, args, offset=0, limit=None, order=None,
context=None, count=False):
if context == None:
@@ -431,7 +426,7 @@ class marketing_campaign_transition(osv.osv):
formatters = {
'auto': _('Automatic transition'),
'time': _('After %(interval_nbr)d %(interval_type)s'),
'signal': _('On signal'),
'cosmetic': _('Cosmetic'),
}
for tr in self.browse(cr, uid, ids, context=context,
fields_process=translate_selections):
@@ -462,9 +457,10 @@ class marketing_campaign_transition(osv.osv):
'trigger': fields.selection([('auto', 'Automatic'),
('time', 'Time'),
('signal','Signal')],
('cosmetic', 'Cosmetic'), # fake plastic transition
],
'Trigger', required=True,
help="How is trigger the destination workitem"),
help="How is triggered the destination workitem"),
}
_defaults = {
@@ -477,20 +473,6 @@ class marketing_campaign_transition(osv.osv):
('interval_positive', 'CHECK(interval_nbr >= 0)', 'The interval must be positive or zero')
]
def _check_signal(self, cr, uid, ids, context=None):
return all(tr.activity_to_id.signal
for tr in self.browse(cr, uid, ids, context)
if tr.trigger == 'signal')
_constraints = [
(_check_signal,
"The transition is triggered by a signal but destination activity \
doesn't have one",
['trigger', 'activity_to_ids']
),
]
marketing_campaign_transition()
class marketing_campaign_workitem(osv.osv):
@@ -510,13 +492,12 @@ class marketing_campaign_workitem(osv.osv):
return res
_columns = {
'segment_id': fields.many2one('marketing.campaign.segment', 'Segment',
required=True),
'segment_id': fields.many2one('marketing.campaign.segment', 'Segment'),
'activity_id': fields.many2one('marketing.campaign.activity','Activity',
required=True),
'campaign_id': fields.related('segment_id', 'campaign_id',
'campaign_id': fields.related('activity_id', 'campaign_id',
type='many2one', relation='marketing.campaign', string='Campaign', readonly=True),
'object_id': fields.related('segment_id', 'campaign_id', 'object_id',
'object_id': fields.related('activity_id', 'campaign_id', 'object_id',
type='many2one', relation='ir.model', string='Object', select=1),
'res_id': fields.integer('Resource ID', select=1, readonly=1),
'res_name': fields.function(_res_name_get, method=True, string='Resource Name', type="char", size=64),
@@ -564,7 +545,10 @@ class marketing_campaign_workitem(osv.osv):
campaign_mode = workitem.campaign_id.mode
if condition:
if not eval(condition, eval_context):
workitem.write({'state': 'cancelled'}, context=context)
if activity.keep_if_condition_not_met:
workitem.write({'state': 'cancelled'}, context=context)
else:
workitem.unlink(context=context)
return
result = True
if campaign_mode in ('manual', 'active'):
@@ -580,6 +564,8 @@ class marketing_campaign_workitem(osv.osv):
if result:
# process _chain
for transition in activity.to_ids:
if transition.trigger == 'cosmetic':
continue
launch_date = False
if transition.trigger == 'auto':
launch_date = datetime.now()
@@ -605,7 +591,7 @@ class marketing_campaign_workitem(osv.osv):
#
# test test_realtime manual normal (active)
# time Y N N N
# signal N N N N
# cosmetic N N N N
# auto Y Y Y Y
#
@@ -228,7 +228,12 @@
<separator string="Action" colspan="4"/>
<group colspan='4' col='4'>
<field name="condition" colspan='4'/>
<group colspan="4" col="6">
<field name="condition" colspan='5'/>
<group col='2'>
<field name="keep_if_condition_not_met" />
</group>
</group>
<field name="type" width='100'/>
<group colspan='2' col='1'>
<group attrs="{'invisible':[('type','!=','email')]}" >
+74 -110
View File
@@ -135,14 +135,6 @@
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/>
</blockTableStyle>
<blockTableStyle id="Table7">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table10">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
@@ -186,25 +178,18 @@
<paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_space" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<images/>
<story>
<section>
<para style="terp_default_8">[[ repeatIn(objects,'o') ]] </para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_header">Production Order N° : [[ o.name ]]</para>
<para style="terp_default_space">
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="193.0,106.0,96.0,132.0" style="Table3">
<blockTable colWidths="193.0,83.0,122.0,129.0" style="Table3">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Product </para>
@@ -220,7 +205,7 @@
</td>
</tr>
</blockTable>
<blockTable colWidths="193.0,106.0,96.0,132.0" style="Table5">
<blockTable colWidths="193.0,83.0,122.0,129.0" style="Table5">
<tr>
<td>
<para style="terp_default_Centre_8">[[ o.product_id.code ]] [[ o.product_id.name ]]</para>
@@ -236,16 +221,16 @@
</td>
</tr>
</blockTable>
<para style="terp_default_space">
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="118.0,147.0,132.0,131.0" repeatRows="1" style="Table1">
<blockTable colWidths="193.0,83.0,122.0,129.0" repeatRows="1" style="Table1">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Printing date</para>
<para style="terp_tblheader_General_Centre">Planned Date</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Planned Date </para>
<para style="terp_tblheader_General_Centre">Printing date</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Partner Ref</para>
@@ -256,37 +241,37 @@
</tr>
</blockTable>
<section>
<blockTable colWidths="118.0,147.0,132.0,131.0" style="Table2">
<blockTable colWidths="193.0,83.0,122.0,129.0" style="Table2">
<tr>
<td>
<para style="terp_default_Centre_8">[[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ formatLang(o.date_planned, date_time = True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ 'sale_ref' in o._columns.keys() and o.sale_ref or removeParentNode('para') ]]</para>
<para style="terp_default_Centre_8">[[ formatLang(time.strftime('%Y-%m-%d'),date = True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ 'sale_name' in o._columns.keys() and o.sale_name or removeParentNode('para') ]]</para>
<para style="terp_default_Centre_8">[[ ('sale_ref' in o._columns.keys() and o.sale_ref) or '' ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ ('sale_name' in o._columns.keys() and o.sale_name) or '' ]]</para>
</td>
</tr>
</blockTable>
</section>
<para style="terp_default_space">
<font color="white"> </font>
</para>
<para style="terp_default_Bold_8">Work Orders</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="81.0,155.0,125.0,84.0,83.0" style="Table6">
<para style="terp_default_Bold_8">Work Orders <font face="Helvetica" size="10.0">[[ o.workcenter_lines ==[] and removeParentNode('para')]]</font></para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="74.0,203.0,121.0,66.0,64.0" style="Table6">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Sequence</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Name </para>
<para style="terp_tblheader_Details_Centre">Name <font face="Helvetica" size="10.0">[[ o.workcenter_lines ==[] and removeParentNode('blockTable')]]</font></para>
</td>
<td>
<para style="terp_tblheader_General_Centre">WorkCenter</para>
@@ -301,7 +286,7 @@
</blockTable>
<section>
<para style="terp_default_8">[[ repeatIn(o.workcenter_lines,'line2') ]]</para>
<blockTable colWidths="81.0,155.0,125.0,84.0,83.0" style="Table4">
<blockTable colWidths="74.0,203.0,121.0,66.0,64.0" style="Table4">
<tr>
<td>
<para style="terp_default_Centre_8">[[ line2.sequence ]]</para>
@@ -324,17 +309,14 @@
<font color="white"> </font>
</para>
</section>
<para style="terp_default_space">
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_Bold_9">Bill Of Material </para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<section>
<para style="terp_default_Bold_9">Products to Consume</para>
<blockTable colWidths="235.0,82.0,107.0,104.0" style="Table8">
<para> <font color="white"> [[ o.move_lines ==[] and removeParentNode('section')]]</font></para>
<blockTable colWidths="250.0,66.0,107.0,104.0" style="Table8">
<tr>
<td>
<para style="terp_tblheader_Details">Product </para>
@@ -350,76 +332,58 @@
</td>
</tr>
</blockTable>
</section>
<section>
<blockTable colWidths="235.0,47.0,34.0,108.0,104.0" style="Table9">
<para style="terp_default_8">[[ repeatIn(o.move_lines,'line') ]]</para>
<tr>
<td>
<para style="terp_default_9">[[ line.product_id.code ]] [[ line.product_id.name ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang( line.product_qty) ]] </para>
</td>
<td>
<para style="terp_default_9">[[line.product_uom.name]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line.location_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line.location_dest_id.name ]]</para>
</td>
</tr>
</blockTable>
</section>
<para style="terp_default_space">
<font color="white"> </font>
</para>
<section>
<para style="terp_default_Bold_9">Consumed Products</para>
<blockTable colWidths="235.0,82.0,107.0,104.0" style="Table7">
<para> <font color="white"> [[ o.move_lines2 ==[] and removeParentNode('section')]]</font></para>
<tr>
<td>
<para style="terp_tblheader_Details">Product </para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Quantity</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Source Location</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Destination Location</para>
</td>
</tr>
</blockTable>
</section>
<para style="terp_default_Bold_9">Products to Consume [[ o.move_lines ==[] and removeParentNode('section')]]</para>
<section>
<blockTable colWidths="235.0,47.0,34.0,108.0,104.0" style="Table10">
<para style="terp_default_8">[[ repeatIn(o.move_lines2,'line2') ]]</para>
<tr>
<td>
<para style="terp_default_9">[[ line2.product_id.code ]] [[ line2.product_id.name ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang( line2.product_qty) ]] </para>
</td>
<td>
<para style="terp_default_9">[[line2.product_uom.name]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line2.location_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line2.location_dest_id.name ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">[[ repeatIn(o.move_lines,'line') ]]</para>
<blockTable colWidths="250.0,42.0,23.0,109.0,104.0" style="Table9">
<tr>
<td>
<para style="terp_default_9">[[ line.product_id.code ]] [[ line.product_id.name ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang( line.product_qty) ]] </para>
</td>
<td>
<para style="terp_default_9">[[line.product_uom.name]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line.location_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line.location_dest_id.name ]]</para>
</td>
</tr>
</blockTable>
</section>
</section>
<section>
<para style="terp_default_Bold_9">Consumed Products [[ o.move_lines2 ==[] and removeParentNode('section')]]</para>
<section>
<para style="terp_default_8">[[ repeatIn(o.move_lines2,'line2') ]]</para>
<blockTable colWidths="251.0,41.0,23.0,109.0,104.0" style="Table10">
<tr>
<td>
<para style="terp_default_9">[[ line2.product_id.code ]] [[ line2.product_id.name ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang( line2.product_qty) ]] </para>
</td>
<td>
<para style="terp_default_9">[[line2.product_uom.name]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line2.location_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ line2.location_dest_id.name ]]</para>
</td>
</tr>
</blockTable>
</section>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</section>
</section>
</story>
</document>
</document>
@@ -15,7 +15,7 @@
<group col="2" colspan="4">
<button icon='gtk-close' special="cancel"
string="Close" />
<button name="change_prod_qty" string="Validate"
<button name="change_prod_qty" string="Approve"
colspan="1" type="object" icon="gtk-ok" />
</group>
</form>
+5 -3
View File
@@ -26,12 +26,14 @@
'category': 'Generic Modules/Production',
'description': """
This is the module used by OpenERP SA to redirect customers to his partners,
based on geolocalisation.
based on geolocalization.
""",
'author': 'OpenERP SA',
'depends': ['crm'],
'update_xml': ['res_partner_view.xml'],
'demo_xml': [],
'data': [
'res_partner_view.xml',
'crm_lead_view.xml',
],
'installable': True,
'active': False,
'certificate': False,
@@ -39,14 +39,14 @@ def geo_find(addr):
except Exception, e:
raise osv.except_osv(_('Network error'),
_('Could not contact geolocation servers, please make sure you have a working internet connection (%s)') % e)
class res_partner(osv.osv):
_inherit = "res.partner"
_columns = {
'partner_latitude': fields.float('Geo Latitude'),
'partner_longitude': fields.float('Geo Longitude'),
'date_assign': fields.date('Assignation Date'),
'date_localization': fields.date('Geo Localization Date'),
'partner_weight': fields.integer('Weight',
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
}
@@ -64,7 +64,7 @@ class res_partner(osv.osv):
self.write(cr, uid, [partner.id], {
'partner_latitude': result[0],
'partner_longitude': result[1],
'date_assign': time.strftime('%Y-%m-%d')
'date_localization': time.strftime('%Y-%m-%d')
}, context=context)
return True
res_partner()
@@ -74,33 +74,7 @@ class crm_lead(osv.osv):
_columns = {
'partner_latitude': fields.float('Geo Latitude'),
'partner_longitude': fields.float('Geo Longitude'),
'partner_assigned_id': fields.many2one('res.partner','Assigned Partner'),
'date_assign': fields.date('Assignation Date')
}
def forward_to_partner(self, cr, uid, ids, context=None):
fobj = self.pool.get('crm.lead.forward.to.partner')
for lead in self.browse(cr, uid, ids, context=context):
context = {'active_id': lead.id, 'active_ids': [lead.id], 'active_model': 'crm.lead'}
if lead.partner_assigned_id:
email = False
if lead.partner_assigned_id.address:
email = lead.partner_assigned_id.address[0].email
if not email:
raise osv.except_osv(_('Error !'), _('No email on the partner assigned to this opportunity'))
values = fobj.default_get(cr, uid, ['name', 'email_from'], context=context)
if not values.get('email_from'):
raise osv.except_osv(_('Error !'), _('Please set an email address in your user preferences'))
values.update({
'history': 'whole',
'email_to': email,
'message': fobj._get_case_history(cr, uid, 'whole', lead.id, context) or False,
})
forward = fobj.create(cr, uid, values, context)
fobj.action_forward(cr, uid, [forward], context)
else:
raise osv.except_osv(_('Error !'), _('No partner assigned to this opportunity'))
return True
def assign_partner(self, cr, uid, ids, context=None):
ok = False
+2 -30
View File
@@ -1,33 +1,6 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="view_crm_opportunity_geo_assign_form" model="ir.ui.view">
<field name="name">crm.lead.geo_assign.inherit</field>
<field name="model">crm.lead</field>
<field name="type">form</field>
<field name="inherit_id" ref="crm.crm_case_form_view_oppor"/>
<field name="arch" type="xml">
<xpath expr="//notebook[last()]" position="inside">
<page string="Geo Assignation">
<field name="partner_assigned_id"/>
<newline/>
<field name="partner_latitude"/>
<field name="partner_longitude"/>
<field name="date_assign"/>
<label string="" colspan="1"/>
<group colspan="1" col="2">
<button string="Geo Assign" name="assign_partner" type="object" colspan="1"
icon="gtk-apply"/>
<button string="Forward"
name="forward_to_partner" attrs="{'invisible':[('partner_assigned_id','=',False)]}"
icon="gtk-apply"
type="object"/>
</group>
</page>
</xpath>
</field>
</record>
<record id="view_crm_partner_geo_form" model="ir.ui.view">
<field name="name">res.partner.geo.inherit</field>
<field name="model">res.partner</field>
@@ -35,7 +8,7 @@
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook[last()]" position="inside">
<page string="Geo Location">
<page string="Geo Localization">
<field name="partner_weight"/>
<label string="" colspan="1"/>
<button
@@ -46,11 +19,10 @@
<newline/>
<field name="partner_latitude"/>
<field name="partner_longitude"/>
<field name="date_assign"/>
<field name="date_localization"/>
</page>
</xpath>
</field>
</record>
</data>
</openerp>
@@ -20,7 +20,10 @@
<xpath expr="//label[@string='description']"
position="attributes">
<attribute name="string"
>Here are a few useful applications which, while they don't directly contribute to your business, can improve on it or improve your OpenERP experience</attribute>
>Here are a few useful applications which, while they do not directly contribute to your business, can help you to improve your organization.</attribute>
</xpath>
<xpath expr="//button[@string='Install Modules']" position="attributes">
<attribute name="string">Configure</attribute>
</xpath>
<group colspan="8">
<field name="lunch"/>
@@ -26,7 +26,7 @@
<newline/>
<group colspan="4" col="6">
<button icon="gtk-cancel" special="cancel" string="_Cancel"/>
<button icon="gtk-ok" name="validate" string="Validate" type="object"/>
<button icon="gtk-ok" name="validate" string="Approve" type="object"/>
</group>
</form>
</field>
@@ -93,8 +93,8 @@ class project_phase(osv.osv):
_columns = {
'name': fields.char("Name", size=64, required=True),
'date_start': fields.datetime('Start Date', help="Starting Date of the phase"),
'date_end': fields.datetime('End Date', help="Ending Date of the phase"),
'date_start': fields.date('Start Date', help="Starting Date of the phase"),
'date_end': fields.date('End Date', help="Ending Date of the phase"),
'constraint_date_start': fields.datetime('Start Date', help='force the phase to start after this date'),
'constraint_date_end': fields.datetime('End Date', help='force the phase to finish before this date'),
'project_id': fields.many2one('project.project', 'Project', required=True),
@@ -114,7 +114,7 @@ class project_phase(osv.osv):
'responsible_id': lambda obj,cr,uid,context: uid,
'state': 'draft',
'sequence': 10,
'product_uom': lambda self,cr,uid,c: self.pool.get('product.uom').search(cr, uid, [('name', '=', 'day')], context=c)[0]
'product_uom': lambda self,cr,uid,c: self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Day'))], context=c)[0]
}
_order = "name"
_constraints = [
+25
View File
@@ -0,0 +1,25 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
import sale_layout
import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+48
View File
@@ -0,0 +1,48 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
{
"name" : "Sale Order Layout Improvement",
"version" : "1.0",
"depends" : ["base", "sale"],
"author" : "Tiny",
"description": """
This module provides some features to improve the layout of the Sale Order.
It gives you the possibility to
* order all the lines of an sale order
* add titles, comment lines, sub total lines
* draw horizontal lines and put page breaks
""",
"website" : "http://www.openerp.com",
"category" : "Generic Modules/Sales & Purchases",
"init_xml" : [],
"demo_xml" : [],
"update_xml" : [
# "security/ir.model.access.csv",
"sale_layout_view.xml",
"sale_layout_report.xml",
],
"active": False,
"installable": True
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+291
View File
@@ -0,0 +1,291 @@
# translation of fr_FR.po to Français
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * sale_layout
#
# Numerigraphe <informatique@numerigraphe.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: fr_FR\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-11-26 08:45+0000\n"
"PO-Revision-Date: 2010-01-19 05:23+0000\n"
"Last-Translator: Numérigraphe <Unknown>\n"
"Language-Team: Français\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2010-05-21 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Sub Total"
msgstr "Sous-total"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Title"
msgstr "Titre"
#. module: sale_layout
#: model:ir.module.module,shortdesc:sale_layout.module_meta_information
msgid "sale_layout"
msgstr "sale_layout"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc. (%)"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Note"
msgstr "Remarque"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Unit Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Order N°"
msgstr ""
#. module: sale_layout
#: field:sale.order,abstract_line_ids:0
msgid "Order Lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc.(%)"
msgstr ""
#. module: sale_layout
#: field:sale.order.line,layout_type:0
msgid "Layout Type"
msgstr "Mise en page"
#. module: sale_layout
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Seq."
msgstr "Séq."
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Product"
msgstr "Produit"
#. module: sale_layout
#: model:ir.module.module,description:sale_layout.module_meta_information
msgid ""
"\n"
" This module provides some features to improve the layout of the Sale "
"Order.\n"
"\n"
" It gives you the possibility to\n"
" * order all the lines of an sale order\n"
" * add titles, comment lines, sub total lines\n"
" * draw horizontal lines and put page breaks \n"
"\n"
" "
msgstr ""
"\n"
" Ce module ajoute des options pour améliorer la mise en page des "
"commandes de vente.\n"
"\n"
" Il vous permet :\n"
" * de réordonner toutes les lignes d'une commande\n"
" * d'ajouter des titres, des lignes de remarques, des sous-totaux\n"
" * de tracer des lignes horizontales et de faire des sauts de page "
"\n"
"\n"
" "
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Description"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Manual Description"
msgstr "Description manuelle"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Our Salesman"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Automatic Declaration"
msgstr "Déclaration automatique"
#. module: sale_layout
#: view:sale.order:0
msgid "Invoice Lines"
msgstr "Lignes de facture"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quantity"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quotation N°"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "VAT"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Make Invoice"
msgstr "Créer facture"
#. module: sale_layout
#: view:sale.order:0
msgid "Properties"
msgstr "Propriétés"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Invoice address :"
msgstr ""
#. module: sale_layout
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valide pour l'architecture de la vue"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Page Break"
msgstr "Saut de page"
#. module: sale_layout
#: view:sale.order:0
msgid "Notes"
msgstr "Notes"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Date Ordered"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Shipping address :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Net Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Tel. :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Payment Terms"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "History"
msgstr "Historique"
#. module: sale_layout
#: view:sale.order:0
msgid "Sale Order Lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Separator Line"
msgstr "Ligne de séparation"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Your Reference"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Sales order lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: view:sale.order:0
msgid "Qty"
msgstr "Qté"
#. module: sale_layout
#: view:sale.order:0
msgid "States"
msgstr "États"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "TVA :"
msgstr ""
#. module: sale_layout
#: model:ir.actions.report.xml,name:sale_layout.sale_order_1
msgid "Order with Layout"
msgstr "Commande avec mise en page"
#. module: sale_layout
#: view:sale.order:0
msgid "Extra Info"
msgstr "Info supplémentaires"
#. module: sale_layout
#: view:sale.order:0
msgid "UoM"
msgstr "UDM"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Fax :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Order Line"
msgstr "Commande client"
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Stock Moves"
msgstr "Mouvements de stocks"
+276
View File
@@ -0,0 +1,276 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * sale_layout
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-11-26 08:45:52+0000\n"
"PO-Revision-Date: 2009-11-26 08:45:52+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Sub Total"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Title"
msgstr ""
#. module: sale_layout
#: model:ir.module.module,shortdesc:sale_layout.module_meta_information
msgid "sale_layout"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc. (%)"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Note"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Unit Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Order N°"
msgstr ""
#. module: sale_layout
#: field:sale.order,abstract_line_ids:0
msgid "Order Lines"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc.(%)"
msgstr ""
#. module: sale_layout
#: field:sale.order.line,layout_type:0
msgid "Layout Type"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Seq."
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Product"
msgstr ""
#. module: sale_layout
#: model:ir.module.module,description:sale_layout.module_meta_information
msgid "\n"
" This module provides some features to improve the layout of the Sale Order.\n"
"\n"
" It gives you the possibility to\n"
" * order all the lines of an sale order\n"
" * add titles, comment lines, sub total lines\n"
" * draw horizontal lines and put page breaks \n"
"\n"
" "
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Description"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Manual Description"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Our Salesman"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Automatic Declaration"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Invoice Lines"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quantity"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quotation N°"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "VAT"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Make Invoice"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Properties"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Invoice address :"
msgstr ""
#. module: sale_layout
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Page Break"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Notes"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Date Ordered"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Shipping address :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Net Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Tel. :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Payment Terms"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "History"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Sale Order Lines"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Separator Line"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Your Reference"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Sales order lines"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Qty"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "States"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "TVA :"
msgstr ""
#. module: sale_layout
#: model:ir.actions.report.xml,name:sale_layout.sale_order_1
msgid "Order with Layout"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Extra Info"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "UoM"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Fax :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Order Line"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Stock Moves"
msgstr ""
+179
View File
@@ -0,0 +1,179 @@
# translation of fr_FR.po to Français
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * sale_layout
#
# Numerigraphe <informatique@numerigraphe.com>, 2009.
msgid ""
msgstr ""
"Project-Id-Version: fr_FR\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-03-25 10:13:19+0000\n"
"PO-Revision-Date: 2009-03-25 11:25+0100\n"
"Last-Translator: Numerigraphe <informatique@numerigraphe.com>\n"
"Language-Team: Français\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
"X-Generator: KBabel 1.11.4\n"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Sub Total"
msgstr "Sous-total"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Title"
msgstr "Titre"
#. module: sale_layout
#: view:sale.order:0
msgid "Sale Order Lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: field:sale.order,abstract_line_ids:0
msgid "Order Lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: model:ir.module.module,description:sale_layout.module_name_translation
msgid ""
"\n"
" This module provides some features to improve the layout of the Sale Order.\n"
"\n"
" It gives you the possibility to\n"
" * order all the lines of an sale order\n"
" * add titles, comment lines, sub total lines\n"
" * draw horizontal lines and put page breaks \n"
"\n"
" "
msgstr ""
"\n"
" Ce module ajoute des options pour améliorer la mise en page des commandes de vente.\n"
"\n"
" Il vous permet :\n"
" * de réordonner toutes les lignes d'une commande\n"
" * d'ajouter des titres, des lignes de remarques, des sous-totaux\n"
" * de tracer des lignes horizontales et de faire des sauts de page \n"
"\n"
" "
#. module: sale_layout
#: field:sale.order.line,layout_type:0
msgid "Layout Type"
msgstr "Mise en page"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Product"
msgstr "Produit"
#. module: sale_layout
#: view:sale.order:0
msgid "Manual Description"
msgstr "Description manuelle"
#. module: sale_layout
#: view:sale.order:0
msgid "Automatic Declaration"
msgstr "Déclaration automatique"
#. module: sale_layout
#: view:sale.order:0
msgid "Invoice Lines"
msgstr "Lignes de facture"
#. module: sale_layout
#: view:sale.order:0
msgid "Make Invoice"
msgstr "Créer facture"
#. module: sale_layout
#: view:sale.order:0
msgid "Properties"
msgstr "Propriétés"
#. module: sale_layout
#: view:sale.order:0
msgid "UoM"
msgstr "UDM"
#. module: sale_layout
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr "XML non valide pour l'architecture de la vue"
#. module: sale_layout
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Seq."
msgstr "Séq."
#. module: sale_layout
#: view:sale.order:0
msgid "Notes"
msgstr "Notes"
#. module: sale_layout
#: view:sale.order:0
msgid "History"
msgstr "Historique"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Note"
msgstr "Remarque"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Separator Line"
msgstr "Ligne de séparation"
#. module: sale_layout
#: view:sale.order:0
msgid "Sales order lines"
msgstr "Lignes de commande"
#. module: sale_layout
#: view:sale.order:0
msgid "Qty"
msgstr "Qté"
#. module: sale_layout
#: view:sale.order:0
msgid "States"
msgstr "États"
#. module: sale_layout
#: model:ir.actions.report.xml,name:sale_layout.sale_order_1
msgid "Order with Layout"
msgstr "Commande avec mise en page"
#. module: sale_layout
#: view:sale.order:0
msgid "Extra Info"
msgstr "Info supplémentaires"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Page Break"
msgstr "Saut de page"
#. module: sale_layout
#: view:sale.order:0
msgid "Order Line"
msgstr "Commande client"
#. module: sale_layout
#: model:ir.module.module,shortdesc:sale_layout.module_name_translation
msgid "sale_layout"
msgstr "sale_layout"
#. module: sale_layout
#: view:sale.order:0
msgid "Stock Moves"
msgstr "Mouvements de stocks"
+276
View File
@@ -0,0 +1,276 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * sale_layout
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 5.0.6\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-11-26 08:45:52+0000\n"
"PO-Revision-Date: 2009-11-26 08:45:52+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Sub Total"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Title"
msgstr ""
#. module: sale_layout
#: model:ir.module.module,shortdesc:sale_layout.module_meta_information
msgid "sale_layout"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc. (%)"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Note"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Unit Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Order N°"
msgstr ""
#. module: sale_layout
#: field:sale.order,abstract_line_ids:0
msgid "Order Lines"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Disc.(%)"
msgstr ""
#. module: sale_layout
#: field:sale.order.line,layout_type:0
msgid "Layout Type"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
#: view:sale.order.line:0
msgid "Seq."
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Product"
msgstr ""
#. module: sale_layout
#: model:ir.module.module,description:sale_layout.module_meta_information
msgid "\n"
" This module provides some features to improve the layout of the Sale Order.\n"
"\n"
" It gives you the possibility to\n"
" * order all the lines of an sale order\n"
" * add titles, comment lines, sub total lines\n"
" * draw horizontal lines and put page breaks \n"
"\n"
" "
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Description"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Manual Description"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Our Salesman"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Automatic Declaration"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Invoice Lines"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quantity"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Quotation N°"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "VAT"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Make Invoice"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Properties"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Invoice address :"
msgstr ""
#. module: sale_layout
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Page Break"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Notes"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Date Ordered"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Shipping address :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Net Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Tel. :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Total :"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Payment Terms"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "History"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Sale Order Lines"
msgstr ""
#. module: sale_layout
#: selection:sale.order.line,layout_type:0
msgid "Separator Line"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Your Reference"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Sales order lines"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Qty"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "States"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "TVA :"
msgstr ""
#. module: sale_layout
#: model:ir.actions.report.xml,name:sale_layout.sale_order_1
msgid "Order with Layout"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Extra Info"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "UoM"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Fax :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Order Line"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Price"
msgstr ""
#. module: sale_layout
#: rml:sale.order.layout:0
msgid "Taxes :"
msgstr ""
#. module: sale_layout
#: view:sale.order:0
msgid "Stock Moves"
msgstr ""
+24
View File
@@ -0,0 +1,24 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
import report_sale_layout
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+378
View File
@@ -0,0 +1,378 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="15.0" y1="42.0" width="539" height="758"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="AddressTable">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="OrderTable">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="HeadingTable">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
</blockTableStyle>
<blockTableStyle id="Order_Desc_Table">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="4,-1" stop="4,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="5,-1" stop="5,-1"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="6,-1" stop="6,-1"/>
</blockTableStyle>
<blockTableStyle id="Total_Table">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEABOVE" colorName="#ffffff" start="0,0" stop="0,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,2" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,2" stop="1,2"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,2" stop="2,2"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,2" stop="3,2"/>
</blockTableStyle>
<blockTableStyle id="Partner_Note_Table">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P2" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P3" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" rightIndent="0.0" leftIndent="14.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" rightIndent="0.0" leftIndent="11.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" rightIndent="0.0" leftIndent="-2.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" rightIndent="0.0" leftIndent="11.0" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Standard" fontName="Times-Roman"/>
<paraStyle name="Text body" fontName="Times-Roman" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Times-Roman"/>
<paraStyle name="Table Heading" fontName="Times-Roman" alignment="CENTER"/>
<paraStyle name="Caption" fontName="Times-Roman" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Times-Roman"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Footer" fontName="Times-Roman"/>
<paraStyle name="Horizontal Line" fontName="Times-Roman" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Right" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Preformatted Text" fontName="Times-Roman" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
</stylesheet>
<images/>
<story>
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
<para style="terp_default_8">[[ setLang(o.partner_id.lang) ]]</para>
<blockTable colWidths="265.0,51.0,225.0" style="AddressTable">
<tr>
<td>
<para style="terp_default_Bold_9">Shipping address :</para>
<para style="terp_default_9">[[ o.partner_id.title or '' ]][[ o.partner_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.title or '' ]][[ o.partner_shipping_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.street ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.street2 or '' ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.city or '' ]] [[ o.partner_shipping_id.zip or '' ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name or '' ]][[ o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name or '' ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_Bold_9">Invoice address :</para>
<para style="terp_default_9">[[ o.partner_invoice_id.street ]][[ o.partner_invoice_id.street2 and (', %s' % o.partner_invoice_id.street2 or '') ]]</para>
<para style="terp_default_9">[[ o.partner_invoice_id.city or '' ]] [[ o.partner_invoice_id.zip or '' ]]</para>
<para style="terp_default_9">[[ o.partner_invoice_id.country_id and ('%s' % (o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '')) ]]</para>
</td>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">[[ o.partner_id.title or '' ]][[ o.partner_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.title or '' ]][[ o.partner_order_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.street ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.street2 or '' ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.city or '' ]] [[ o.partner_order_id.zip or '' ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.state_id and o.partner_order_id.state_id.name or '' ]][[ o.partner_order_id.country_id and o.partner_order_id.country_id.name or '' ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">Tel. : [[ o.partner_order_id.phone or removeParentNode('para') ]]</para>
<para style="terp_default_9">Fax : [[ o.partner_order_id.fax or removeParentNode('para') ]]</para>
<para style="terp_default_9">TVA : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_header">[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Quotation N° [[ o.name ]]</para>
<para style="terp_header">[[ o.state=='draft' and removeParentNode('para') ]] Order N° [[ o.name ]]</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="132.0,134.0,135.0,135.0" style="Table1">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Your Reference </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Date Ordered </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Our Salesman </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Payment Terms</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="132.0,134.0,135.0,135.0" style="OrderTable">
<tr>
<td>
<para style="terp_default_Centre_8">[[ o.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.date_order ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.user_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.payment_term.name ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="208.0,99.0,64.0,59.0,43.0,65.0" repeatRows="1" style="HeadingTable">
<tr>
<td>
<para style="terp_tblheader_Details">Description</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">VAT</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Quantity</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Unit Price</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Disc.(%)</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Price</para>
</td>
</tr>
</blockTable>
<section>
<para style="terp_default_1">[[ repeatIn(o.order_line,'line') ]]</para>
<blockTable colWidths="207.0,99.0,43.0,21.0,59.0,43.0,65.0" style="Order_Desc_Table">
<tr>
<td>
<para style="terp_default_9">[[ line.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ ', '.join(map(lambda x: x.name, line.tax_id)) or '0.00' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ line.product_uos and line.product_uos_qty or line.product_uom_qty or '0.00']]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ line.product_uos and line.product_uos.name or line.product_uom.name ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ line.price_unit or '0.00' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ line.discount and str(line.discount) or '0.00' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ line.price_subtotal or '0.00' ]]</para>
</td>
</tr>
<tr>
<td>
<para style="P7">[[ format(line.notes or removeParentNode('tr')) ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="384.0,67.0,64.0,22.0" style="Total_Table">
<tr>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P6">Net Total :</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.amount_untaxed or '0.00' ]]</para>
</td>
<td>
<para style="P2">[[ o.pricelist_id.currency_id.name ]]</para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P5">Taxes :</para>
</td>
<td>
<para style="terp_default_Right_9">[[ o.amount_tax or '0.00' ]]</para>
</td>
<td>
<para style="P2">[[ o.pricelist_id.currency_id.name ]]</para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P4">Total :</para>
</td>
<td>
<para style="terp_default_Right_9_Bold">[[ o.amount_total or '0.00' ]] </para>
</td>
<td>
<para style="P3">[[ o.pricelist_id.currency_id.name ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="533.0" style="Partner_Note_Table">
<tr>
<td>
<para style="terp_default_9">[[ format(o.note or '') ]]</para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_9">[[ format((o.partner_id.property_payment_term and o.partner_id.property_payment_term.note) or '') ]]</para>
</td>
</tr>
</blockTable>
<para style="P1">
<font color="white"> </font>
</para>
</story>
</document>
+140
View File
@@ -0,0 +1,140 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
import time
import pooler
from report import report_sxw
rml_parents = {
'tr':1,
'li':1,
'story': 0,
'section': 0
}
class sale_order_1(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(sale_order_1, self).__init__(cr, uid, name, context)
self.localcontext.update({
'time': time,
'sale_order_lines': self.sale_order_lines,
# 'repeat_In':self.repeat_In,
})
self.context = context
#
def sale_order_lines(self,sale_order):
result =[]
sub_total={}
info=[]
order_lines=[]
res={}
list_in_seq=[]
ids = self.pool.get('sale.order.line').search(self.cr, self.uid, [('order_id', '=', sale_order.id)])
for id in range(0,len(ids)):
order = self.pool.get('sale.order.line').browse(self.cr, self.uid,ids[id], self.context.copy())
order_lines.append(order)
i=1
j=0
sum_flag={}
sum_flag[j]=-1
for entry in order_lines:
res={}
if entry.layout_type=='article':
res['tax_id']=', '.join(map(lambda x: x.name, entry.tax_id)) or ''
res['name']=entry.name
res['product_uom_qty']="%.2f"%(entry.product_uos and entry.product_uos_qty or entry.product_uom_qty or 0.00)
res['product_uom']=entry.product_uos and entry.product_uos.name or entry.product_uom.name
res['price_unit']="%.2f"%(entry.price_unit or 0.00)
res['discount']="%.2f"%(entry.discount and entry.discount or 0.00)
res['price_subtotal']="%.2f"%(entry.price_subtotal and entry.price_subtotal or 0.00)
sub_total[i]= entry.price_subtotal and entry.price_subtotal
i=i+1
res['note']=entry.notes or ''
res['currency']=sale_order.pricelist_id.currency_id.name
res['layout_type']=entry.layout_type
else:
res['product_uom_qty']=''
res['price_unit']=''
res['discount']=''
res['tax_id']=''
res['layout_type']=entry.layout_type
res['note']=entry.notes or ''
res['product_uom']=''
if entry.layout_type=='subtotal':
res['name']=entry.name
sum=0
sum_id=0
if sum_flag[j]==-1:
temp=1
else:
temp=sum_flag[j]
for sum_id in range(temp,len(sub_total)+1):
sum+=sub_total[sum_id]
sum_flag[j+1]= sum_id +1
j=j+1
res['price_subtotal']="%.2f"%(sum)
res['currency']=sale_order.pricelist_id.currency_id.name
res['quantity']=''
res['price_unit']=''
res['discount']=''
res['tax_id']=''
res['product_uom']=''
elif entry.layout_type=='title':
res['name']=entry.name
res['price_subtotal']=''
res['currency']=''
elif entry.layout_type=='text':
res['name']=entry.name
res['price_subtotal']=''
res['currency']=''
elif entry.layout_type=='line':
res['product_uom_qty']='__________'
res['price_unit']='______________'
res['discount']='___________'
res['tax_id']='_________________'
res['product_uom']='_____'
res['name']='_______________________________________'
res['price_subtotal']='_________'
res['currency']='_______'
elif entry.layout_type=='break':
res['layout_type']=entry.layout_type
res['name']=entry.name
res['price_subtotal']=''
res['currency']=''
else:
res['name']=entry.name
res['price_subtotal']=''
res['currency']=sale_order.pricelist_id.currency_id.name
result.append(res)
return result
report_sxw.report_sxw('report.sale.order.layout', 'sale.order', 'addons/sale_layout/report/report_sale_layout.rml', parser=sale_order_1)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+352
View File
@@ -0,0 +1,352 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template pageSize="(595.0,842.0)" title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="34.0" y1="28.0" width="527" height="786"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Tableau2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table5">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table6">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#e6e6e6" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#e6e6e6" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#e6e6e6" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table7">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
</blockTableStyle>
<blockTableStyle id="Table8">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEABOVE" colorName="#ffffff" start="0,0" stop="0,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#ffffff" start="0,2" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#ffffff" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,2" stop="1,2"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,2" stop="2,2"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,2" stop="3,2"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" rightIndent="0.0" leftIndent="14.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P2" rightIndent="0.0" leftIndent="-2.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P3" rightIndent="0.0" leftIndent="11.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" fontName="Helvetica" fontSize="5.0" leading="7" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" fontName="Helvetica"/>
<paraStyle name="P8" fontName="Helvetica" fontSize="9.0" leading="13" alignment="LEFT"/>
<paraStyle name="P9" fontName="Helvetica-Bold" fontSize="20.0" leading="25" alignment="LEFT"/>
<paraStyle name="P10" fontName="Helvetica-BoldOblique" fontSize="20.0" leading="25" alignment="LEFT"/>
<paraStyle name="P11" fontName="Helvetica" fontSize="11.0" leading="14"/>
<paraStyle name="P12" fontName="Helvetica" fontSize="11.0" leading="14"/>
<paraStyle name="P13" fontName="Helvetica" fontSize="11.0" leading="14" alignment="LEFT"/>
<paraStyle name="P14" fontName="Helvetica-BoldOblique" fontSize="6.0" leading="8" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P15" fontName="Helvetica-BoldOblique" fontSize="14.0" leading="17" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P16" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P17" fontName="Helvetica" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P18" fontName="Helvetica-BoldOblique" fontSize="11.0" leading="14" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P19" fontName="Helvetica-BoldOblique" fontSize="11.0" leading="14" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P20" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P21" fontName="Helvetica" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P22" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P23" fontName="Helvetica" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P24" fontName="Helvetica-Bold" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P25" fontName="Helvetica-Bold" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="P26" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P27" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P28" rightIndent="0.0" leftIndent="-2.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P29" rightIndent="0.0" leftIndent="11.0" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P30" rightIndent="0.0" leftIndent="14.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P31" fontName="Helvetica-Bold" fontSize="9.0" leading="13" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="P32" fontName="Helvetica-Bold" fontSize="5.0" leading="7" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P33" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P34" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="10.0" leading="13" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="15.0" leading="19" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_General" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_Details_Centre" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="terp_default_1" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Italic" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
</stylesheet>
<images/>
<story>
<para style="terp_default_8">[[repeatIn(objects,'o')]]</para>
<para style="P14">[[ setLang(o.partner_id.lang) ]]</para>
<para style="P8">
<font color="white"> </font>
</para>
<blockTable colWidths="254.0,62.0,211.0" style="Tableau2">
<tr>
<td>
<para style="terp_default_Bold_9">Shipping address :</para>
<para style="terp_default_9">[[ o.partner_id.title or '' ]] [[ o.partner_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.title or '' ]] [[ o.partner_shipping_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.street ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.street2 or '' ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.city or '' ]] [[ o.partner_shipping_id.zip or '' ]]</para>
<para style="terp_default_9">[[ o.partner_shipping_id.state_id and o.partner_shipping_id.state_id.name or '' ]] [[ o.partner_shipping_id.country_id and o.partner_shipping_id.country_id.name or '' ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_Bold_9">Invoice address :</para>
<para style="terp_default_9">[[ o.partner_invoice_id.street ]] [[ o.partner_invoice_id.street2 and (', %s' % o.partner_invoice_id.street2 or '') ]]</para>
<para style="P27">[[ o.partner_invoice_id.zip or '' ]] [[ o.partner_invoice_id.city or '' ]] [[ o.partner_invoice_id.country_id and (', %s' % (o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '')) ]]</para>
</td>
<td>
<para style="P17">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">[[ o.partner_id.title or '' ]] [[ o.partner_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.title or '' ]] [[ o.partner_order_id.name ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.street ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.street2 or '' ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.zip or '' ]] [[ o.partner_order_id.city or '' ]]</para>
<para style="terp_default_9">[[ o.partner_order_id.state_id and o.partner_order_id.state_id.name or '' ]] [[ o.partner_order_id.country_id and o.partner_order_id.country_id.name or '' ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">Tel. : [[ o.partner_order_id.phone or removeParentNode('para') ]]</para>
<para style="terp_default_9">Fax : [[ o.partner_order_id.fax or removeParentNode('para') ]]</para>
<para style="terp_default_9">TVA : [[ o.partner_id.vat or removeParentNode('para') ]]</para>
<para style="P26">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<para style="P8">
<font color="white"> </font>
</para>
<para style="terp_header">[[ o.state&lt;&gt;'draft' and removeParentNode('para') ]] Quotation N° [[ o.name ]]</para>
<para style="terp_header">[[ o.state=='draft' and removeParentNode('para') ]] Order N° [[ o.name ]]</para>
<para style="P15">
<font color="white"> </font>
</para>
<blockTable colWidths="132.0,134.0,135.0,135.0" style="Table5">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Your Reference </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Date Ordered </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Our Salesman </para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Payment Terms</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="132.0,134.0,135.0,135.0" style="Table6">
<tr>
<td>
<para style="terp_default_Centre_8">[[ o.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.date_order ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.user_id.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.payment_term.name ]]</para>
</td>
</tr>
</blockTable>
<para style="P7">
<font color="white"> </font>
</para>
<blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Table7">
<tr>
<td>
<para style="terp_tblheader_Details">Description</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">VAT</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Quantity</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Unit Price</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Disc.(%)</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Price</para>
</td>
</tr>
</blockTable>
<section>
<para style="P32">[[ repeatIn(sale_order_lines(o),'a') ]]</para>
<blockTable colWidths="0.0,216.0,66,46,24,66,55,54" style="Table1">
<tr>
<td>
<para style="P8">[[ a['layout_type']=='text' and removeParentNode('blockTable')]]</para>
</td>
<td>
<para style="Table Contents"><font>[[ (a['layout_type']=='title' or a['layout_type']=='subtotal') and ( setTag('para','para',{'fontName':'Helvetica-bold'})) or removeParentNode('font') ]]</font>[[ a['name'] ]]</para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]]</font><font>[[ a['tax_id'] ]]</font></para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]]</font><font>[[ a['product_uom_qty'] ]]</font></para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]]</font><font>[[ a['product_uom'] ]]</font></para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]] </font><font>[[ a['price_unit'] ]]</font></para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]]</font><font>[[ a['discount'] ]]</font></para>
</td>
<td>
<para style="Table Contents"><font>[[ a['layout_type']=='subtotal' and ( setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]]</font><font>[[ a['price_subtotal'] ]]</font></para>
</td>
</tr>
</blockTable>
<blockTable colWidths="453.0,74.0" style="Table2">
<tr>
<td>
<para style="P7">[[ a['layout_type']=='text' and a['name'] or removeParentNode('blockTable') ]]</para>
</td>
<td>
<para style="P7"></para>
</td>
</tr>
</blockTable>
<blockTable colWidths="66.0,461.0" style="Table3">
<tr>
<td>
<para style="P7"><font>[[ a['note']=='' and removeParentNode('blockTable') ]]</font><font>[[ repeatIn(( a['note'] and a['note'].splitlines()) or [], 'note') ]]</font></para>
</td>
<td>
<para style="P7">[[ a['note'] and note or removeParentNode('blockTable') ]]</para>
</td>
</tr>
</blockTable>
<pageBreak>[[ a['layout_type']!='break' and removeParentNode('pageBreak')]]</pageBreak>
<blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Table4">
<tr>
<td>
<para style="P31">Description [[ a['layout_type']!='break' and removeParentNode('blockTable')]]</para>
</td>
<td>
<para style="P31">Taxes</para>
</td>
<td>
<para style="P31">Quantity</para>
</td>
<td>
<para style="P31">Unit Price</para>
</td>
<td>
<para style="P31">Disc. (%)</para>
</td>
<td>
<para style="P31">Price</para>
</td>
</tr>
</blockTable>
</section>
</story>
</document>
+160
View File
@@ -0,0 +1,160 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2008 Tiny SPRL (<http://tiny.be>). All Rights Reserved
# $Id$
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from osv import fields,osv
from tools import config
import decimal_precision as dp
from tools.translate import _
class sale_order_line(osv.osv):
def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
tax_obj = self.pool.get('account.tax')
cur_obj = self.pool.get('res.currency')
res = {}
context = context or {}
for line in self.browse(cr, uid, ids, context=context):
if line.layout_type=='article':
return super(sale_order_line, self)._amount_line(cr, uid, ids, field_name, arg, context)
return res
def invoice_line_create(self, cr, uid, ids, context={}):
new_ids = []
list_seq = []
for line in self.browse(cr, uid, ids, context):
if line.layout_type == 'article':
new_ids.append(line.id)
list_seq.append(line.sequence)
invoice_line_ids = super(sale_order_line, self).invoice_line_create(cr, uid, new_ids, context)
pool_inv_line = self.pool.get('account.invoice.line')
seq = 0
for obj_inv_line in pool_inv_line.browse(cr, uid, invoice_line_ids, context=context):
pool_inv_line.write(cr, uid, [obj_inv_line.id], {'sequence': list_seq[seq]}, context=context)
seq += 1
return invoice_line_ids
def onchange_sale_order_line_view(self, cr, uid, id, type, context={}, *args):
temp ={}
temp['value']= {}
if (not type):
return {}
if type != 'article':
temp = {'value': {
'product_id': False,
'uos_id': False,
'account_id': False,
'price_unit': 0.0,
'price_subtotal': 0.0,
'quantity': 0,
'discount': 0.0,
'invoice_line_tax_id': False,
'account_analytic_id': False,
'product_uom_qty':0.0,
},
}
if type == 'line':
temp['value']['name'] = ' '
if type == 'break':
temp['value']['name'] = ' '
if type == 'subtotal':
temp['value']['name'] = 'Sub Total'
return temp
return {}
def create(self, cr, user, vals, context=None):
if vals.has_key('layout_type'):
if vals['layout_type'] == 'line':
vals['name'] = ' '
if vals['layout_type'] == 'break':
vals['name'] = ' '
if vals['layout_type'] != 'article':
vals['product_uom_qty']= 0
return super(sale_order_line, self).create(cr, user, vals, context)
def write(self, cr, user, ids, vals, context=None):
if vals.has_key('layout_type'):
if vals['layout_type'] == 'line':
vals['name'] = ' '
if vals['layout_type'] == 'break':
vals['name'] = ' '
return super(sale_order_line, self).write(cr, user, ids, vals, context)
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default['layout_type'] = self.browse(cr, uid, id).layout_type
return super(sale_order_line, self).copy(cr, uid, id, default, context)
_name = "sale.order.line"
_order = "order_id, sequence asc"
_description = "Sale Order line"
_inherit = "sale.order.line"
_columns = {
'layout_type': fields.selection([
('article','Product'),
('title','Title'),
('text','Note'),
('subtotal','Sub Total'),
('line','Separator Line'),
('break','Page Break'),]
,'Layout Type', select=True, required=True),
'sequence': fields.integer('Sequence Number'),
'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price'), readonly=True, states={'draft':[('readonly',False)]}),
'product_uom_qty': fields.float('Quantity (UoM)', digits=(16,2)),
'product_uom': fields.many2one('product.uom', 'Product UoM'),
}
_defaults = {
'layout_type': lambda *a: 'article',
}
sale_order_line()
class one2many_mod2(fields.one2many):
def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
if not context:
context = {}
if not values:
values = {}
res = {}
for id in ids:
res[id] = []
ids2 = obj.pool.get(self._obj).search(cr, user, [(self._fields_id,'in',ids),('layout_type','=','article')], limit=self._limit)
for r in obj.pool.get(self._obj)._read_flat(cr, user, ids2, [self._fields_id], context=context, load='_classic_write'):
res[r[self._fields_id]].append( r['id'] )
return res
class sale_order(osv.osv):
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default['order_line'] = False
return super(sale_order, self).copy(cr, uid, id, default, context)
_inherit = "sale.order"
_columns = {
'abstract_line_ids': fields.one2many('sale.order.line', 'order_id', 'Order Lines',readonly=True, states={'draft':[('readonly',False)]}),
'order_line': one2many_mod2('sale.order.line', 'order_id', 'Order Lines',readonly=True, states={'draft':[('readonly',False)]}),
}
sale_order()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<openerp>
<data>
<report id="sale_order_1"
string="Order with Layout"
model="sale.order"
name="sale.order.layout"
rml="sale_layout/report/report_sale_layout.rml"
auto="False"/>
</data>
</openerp>
+117
View File
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="view_order_line_form2_inherit_1">
<field name="name">sale.order.line.form2.inherit_1</field>
<field name="model">sale.order.line</field>
<field name="inherit_id" ref="sale.view_order_line_form2"/>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='name']" position="before">
<field name="layout_type" select="1" on_change="onchange_sale_order_line_view(layout_type)" />
<field name="sequence"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_order_line_tree_inherit_1">
<field name="name">sale.order.line.tree.inherit_1</field>
<field name="model">sale.order.line</field>
<field name="inherit_id" ref="sale.view_order_line_tree"/>
<field name="type">tree</field>
<field name="arch" type="xml">
<xpath expr="/tree/field[@name='name']" position="before">
<field name="sequence" string="Seq."/>
<field name="layout_type"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_order_form_inherit_1">
<field name="name">sale.order.form.inherit_1</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
<xpath expr="/form/notebook/page/field[@name='order_line']" position="replace">
<field name="abstract_line_ids" colspan="4" nolabel="1" widget="one2many_list">
<form string="Sale Order Lines">
<notebook>
<page string="Order Line">
<separator colspan="4" string="Automatic Declaration"/>
<field colspan="4"
context="partner_id=parent.partner_id,quantity=product_uom_qty,pricelist=parent.pricelist_id,shop=parent.shop_id,uom=product_uom"
name="product_id"
attrs="{'readonly':[('layout_type','!=','article')]}"
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], True, parent.date_order, product_packaging, parent.fiscal_position)"
select="1"/>
<field
context="partner_id=parent.partner_id,quantity=product_uom_qty,pricelist=parent.pricelist_id,shop=parent.shop_id,uom=product_uom"
name="product_uom_qty"
attrs="{'readonly':[('layout_type','!=','article')]}"
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order, product_packaging, parent.fiscal_position)"
select="1"/>
<field name="product_uom"
required="0"
attrs="{'readonly':[('layout_type','!=','article')], 'required':[('layout_type','not in',['title','text','subtotal','line','break'])]}"
on_change="product_uom_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order)"/>
<field
name="product_packaging"
attrs="{'readonly':[('layout_type','!=','article')]}"
context="partner_id=parent.partner_id,quantity=product_uom_qty,pricelist=parent.pricelist_id,shop=parent.shop_id,uom=product_uom"
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order, product_packaging, parent.fiscal_position)"
domain="[('product_id','=',product_id)]"
groups="base.group_extended"/>
<separator colspan="4" string="Manual Description" />
<field name="layout_type" on_change="onchange_sale_order_line_view(layout_type)"/>
<field name="sequence" string="Seq."/>
<field colspan="4" name="name" select="2" attrs="{'readonly':[('layout_type','in',('line','break'))] }"/>
<field name="price_unit" select="2" attrs="{'readonly':[('layout_type','!=','article')],'required':[('layout_type','not in',['title','text','subtotal','line','break'])]}"/>
<field name="discount" attrs="{'readonly':[('layout_type','!=','article')]}"/>
<field name="type" attrs="{'readonly':[('layout_type','!=','article')]}"/>
<field name="delay" select="2" attrs="{'readonly':[('layout_type','!=','article')]}"/>
<field colspan="4" name="tax_id" domain="[('parent_id','=',False)]" attrs="{'readonly':[('layout_type','!=','article')]}"/>
<separator colspan="4" string="States"/>
<field name="state" select="2"/>
<group col="3" colspan="2">
<field name="invoiced" select="2"/>
<button colspan="1" name="%(sale.action_view_sale_order_line_make_invoice)d" states="confirmed" string="Make Invoice" type="action"/>
</group>
</page>
<page groups="base.group_extended" string="Extra Info">
<field groups="product.group_uos" name="product_uos_qty" on_change="uos_change(product_uos, product_uos_qty, product_id)"/>
<field groups="product.group_uos" name="product_uos"/>
<field name="address_allotment_id" select="2"/>
<separator colspan="4" string="Properties"/>
<field colspan="4" name="property_ids" nolabel="1"/>
</page>
<page string="Notes">
<field colspan="4" name="notes" nolabel="1"/>
</page>
<page string="History" groups="base.group_extended">
<separator colspan="4" string="Invoice Lines"/>
<field colspan="4" name="invoice_lines" nolabel="1"/>
<separator colspan="4" string="Stock Moves"/>
<field colspan="4" name="move_ids" nolabel="1" widget="many2many"/>
</page>
</notebook>
</form>
<tree string="Sales order lines">
<field colspan="4" name="name"/>
<field name="product_uom_qty" string="Qty"/>
<field name="product_uom" string="UoM"/>
<field name="discount"/>
<field name="price_unit"/>
<!-- field name="price_net"/-->
<field name="price_subtotal"/>
<field name="sequence"/>
</tree>
</field>
</xpath>
</field>
</record>
</data>
</openerp>
+5 -5
View File
@@ -604,7 +604,7 @@
<field name="invoice_state"/>
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
<field name="state"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Picking"/>
<button name="%(action_partial_picking)d" states="assigned" string="Approve" type="action" icon="gtk-go-forward" help="Approve Picking"/>
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the picking. Do you want to continue?"/>
</tree>
</field>
@@ -714,7 +714,7 @@
<button name="draft_validate" states="draft" string="Process Now" type="object" icon="gtk-media-play"/>
<button name="action_assign" states="confirmed" string="Check Availability" type="object" icon="gtk-find"/>
<button name="force_assign" states="confirmed" string="Force Availability" type="object" icon="gtk-jump-to"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-apply"/>
<button name="%(action_partial_picking)d" states="assigned" string="Approve" type="action" icon="gtk-apply"/>
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel"/>
</group>
</page>
@@ -774,7 +774,7 @@
<field name="min_date"/>
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
<field name="state"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Delivery"/>
<button name="%(action_partial_picking)d" states="assigned" string="Approve" type="action" icon="gtk-go-forward" help="Approve Delivery"/>
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the delivery. Do you want to continue?"/>
</tree>
</field>
@@ -978,7 +978,7 @@
<field name="invoice_state"/>
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
<field name="state"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-go-forward" help="Validate Picking"/>
<button name="%(action_partial_picking)d" states="assigned" string="Approve" type="action" icon="gtk-go-forward" help="Approve Picking"/>
</tree>
</field>
</record>
@@ -1175,7 +1175,7 @@
<field name="invoice_state" groups="base.group_extended"/>
<field name="stock_journal_id" groups="base.group_extended" widget="selection"/>
<field name="state"/>
<button name="%(action_partial_picking)d" states="assigned" string="Validate" type="action" icon="gtk-ok" help="Receive products"/>
<button name="%(action_partial_picking)d" states="assigned" string="Approve" type="action" icon="gtk-ok" help="Receive products"/>
<button name="button_cancel" states="assigned,confirmed,draft" string="Cancel" icon="gtk-cancel" help="Cancel" confirm="This operation will cancel the shipment. Do you want to continue?" />
</tree>
</field>
@@ -153,7 +153,7 @@
<field name="product_qty" />
<field name="state"/>
<label string = ""/>
<button name="action_validate" icon="gtk-apply" string="Validate" states="draft" type="object" colspan = "1"/>
<button name="action_validate" icon="gtk-apply" string="Approve" states="draft" type="object" colspan = "1"/>
</group>
</group>