[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:
@@ -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 {
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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'],
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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=""""OpenOfficeReportDesigner"""" 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
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
Executable
+25
@@ -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:
|
||||
|
||||
Executable
+48
@@ -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:
|
||||
|
||||
Executable
+291
@@ -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"
|
||||
Executable
+276
@@ -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 ""
|
||||
|
||||
Executable
+179
@@ -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"
|
||||
|
||||
Executable
+276
@@ -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 ""
|
||||
|
||||
Executable
+24
@@ -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:
|
||||
|
||||
Executable
+378
@@ -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<>'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
@@ -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
@@ -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<>'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>
|
||||
Executable
+160
@@ -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:
|
||||
|
||||
Executable
+12
@@ -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>
|
||||
Executable
+117
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user