[MERGE] merged trunk up to revision 9350

bzr revid: qdp-launchpad@openerp.com-20140416150551-lxpscdd74mgv99r1
This commit is contained in:
Quentin (OpenERP) 2014-04-16 17:05:51 +02:00
commit fbd3255e37
260 changed files with 3709 additions and 43894 deletions

View File

@ -840,16 +840,11 @@ class account_journal(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100): def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
if not args: if not args:
args = [] args = []
if context is None: if operator in expression.NEGATIVE_TERM_OPERATORS:
context = {} domain = [('code', operator, name), ('name', operator, name)]
ids = [] else:
if context.get('journal_type', False): domain = ['|', ('code', operator, name), ('name', operator, name)]
args += [('type','=',context.get('journal_type'))] ids = self.search(cr, user, expression.AND([domain, args]), limit=limit, context=context)
if name:
ids = self.search(cr, user, [('code', 'ilike', name)]+ args, limit=limit, context=context)
if not ids:
ids = self.search(cr, user, [('name', 'ilike', name)]+ args, limit=limit, context=context)#fix it ilike should be replace with operator
return self.name_get(cr, user, ids, context=context) return self.name_get(cr, user, ids, context=context)
@ -938,13 +933,11 @@ class account_fiscalyear(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80): def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
if args is None: if args is None:
args = [] args = []
if context is None: if operator in expression.NEGATIVE_TERM_OPERATORS:
context = {} domain = [('code', operator, name), ('name', operator, name)]
ids = [] else:
if name: domain = ['|', ('code', operator, name), ('name', operator, name)]
ids = self.search(cr, user, [('code', 'ilike', name)]+ args, limit=limit) ids = self.search(cr, user, expression.AND([domain, args]), limit=limit, context=context)
if not ids:
ids = self.search(cr, user, [('name', operator, name)]+ args, limit=limit)
return self.name_get(cr, user, ids, context=context) return self.name_get(cr, user, ids, context=context)
@ -1040,19 +1033,11 @@ class account_period(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100): def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
if args is None: if args is None:
args = [] args = []
if context is None: if operator in expression.NEGATIVE_TERM_OPERATORS:
context = {} domain = [('code', operator, name), ('name', operator, name)]
ids = [] else:
if name: domain = ['|', ('code', operator, name), ('name', operator, name)]
ids = self.search(cr, user, ids = self.search(cr, user, expression.AND([domain, args]), limit=limit, context=context)
[('code', 'ilike', name)] + args,
limit=limit,
context=context)
if not ids:
ids = self.search(cr, user,
[('name', operator, name)] + args,
limit=limit,
context=context)
return self.name_get(cr, user, ids, context=context) return self.name_get(cr, user, ids, context=context)
def write(self, cr, uid, ids, vals, context=None): def write(self, cr, uid, ids, vals, context=None):
@ -1187,36 +1172,6 @@ class account_move(osv.osv):
'company_id': company_id, 'company_id': company_id,
} }
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
"""
Returns a list of tupples containing id, name, as internally it is called {def name_get}
result format: {[(id, name), (id, name), ...]}
@param cr: A database cursor
@param user: ID of the user currently logged in
@param name: name to search
@param args: other arguments
@param operator: default operator is 'ilike', it can be changed
@param context: context arguments, like lang, time zone
@param limit: Returns first 'n' ids of complete result, default is 80.
@return: Returns a list of tuples containing id and name
"""
if not args:
args = []
ids = []
if name:
ids += self.search(cr, user, [('name','ilike',name)]+args, limit=limit, context=context)
if not ids and name and type(name) == int:
ids += self.search(cr, user, [('id','=',name)]+args, limit=limit, context=context)
if not ids:
ids += self.search(cr, user, args, limit=limit, context=context)
return self.name_get(cr, user, ids, context=context)
def name_get(self, cursor, user, ids, context=None): def name_get(self, cursor, user, ids, context=None):
if isinstance(ids, (int, long)): if isinstance(ids, (int, long)):
ids = [ids] ids = [ids]
@ -1842,10 +1797,12 @@ class account_tax_code(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80): def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
if not args: if not args:
args = [] args = []
if context is None: if operator in expression.NEGATIVE_TERM_OPERATORS:
context = {} domain = [('code', operator, name), ('name', operator, name)]
ids = self.search(cr, user, ['|',('name',operator,name),('code',operator,name)] + args, limit=limit, context=context) else:
return self.name_get(cr, user, ids, context) domain = ['|', ('code', operator, name), ('name', operator, name)]
ids = self.search(cr, user, expression.AND([domain, args]), limit=limit, context=context)
return self.name_get(cr, user, ids, context=context)
def name_get(self, cr, uid, ids, context=None): def name_get(self, cr, uid, ids, context=None):
if isinstance(ids, (int, long)): if isinstance(ids, (int, long)):
@ -1974,15 +1931,11 @@ class account_tax(osv.osv):
""" """
if not args: if not args:
args = [] args = []
if context is None: if operator in expression.NEGATIVE_TERM_OPERATORS:
context = {} domain = [('description', operator, name), ('name', operator, name)]
ids = []
if name:
ids = self.search(cr, user, [('description', '=', name)] + args, limit=limit, context=context)
if not ids:
ids = self.search(cr, user, [('name', operator, name)] + args, limit=limit, context=context)
else: else:
ids = self.search(cr, user, args, limit=limit, context=context or {}) domain = ['|', ('description', operator, name), ('name', operator, name)]
ids = self.search(cr, user, expression.AND([domain, args]), limit=limit, context=context)
return self.name_get(cr, user, ids, context=context) return self.name_get(cr, user, ids, context=context)
def write(self, cr, uid, ids, vals, context=None): def write(self, cr, uid, ids, vals, context=None):

View File

@ -226,7 +226,7 @@ class account_invoice(osv.osv):
}, },
} }
_columns = { _columns = {
'name': fields.char('Description', size=64, select=True, readonly=True, states={'draft':[('readonly',False)]}), 'name': fields.char('Reference/Description', size=64, select=True, readonly=True, states={'draft':[('readonly',False)]}),
'origin': fields.char('Source Document', size=64, help="Reference of the document that produced this invoice.", readonly=True, states={'draft':[('readonly',False)]}), 'origin': fields.char('Source Document', size=64, help="Reference of the document that produced this invoice.", readonly=True, states={'draft':[('readonly',False)]}),
'supplier_invoice_number': fields.char('Supplier Invoice Number', size=64, help="The reference of this invoice as provided by the supplier.", readonly=True, states={'draft':[('readonly',False)]}), 'supplier_invoice_number': fields.char('Supplier Invoice Number', size=64, help="The reference of this invoice as provided by the supplier.", readonly=True, states={'draft':[('readonly',False)]}),
'type': fields.selection([ 'type': fields.selection([
@ -672,25 +672,14 @@ class account_invoice(osv.osv):
self.create_workflow(cr, uid, ids) self.create_workflow(cr, uid, ids)
return True return True
# ---------------------------------------- def get_formview_id(self, cr, uid, id, context=None):
# Mail related methods
# ----------------------------------------
def _get_formview_action(self, cr, uid, id, context=None):
""" Update form view id of action to open the invoice """ """ Update form view id of action to open the invoice """
action = super(account_invoice, self)._get_formview_action(cr, uid, id, context=context)
obj = self.browse(cr, uid, id, context=context) obj = self.browse(cr, uid, id, context=context)
if obj.type == 'in_invoice': if obj.type == 'in_invoice':
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'invoice_supplier_form') model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'invoice_supplier_form')
action.update({
'views': [(view_id, 'form')],
})
else: else:
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'invoice_form') model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account', 'invoice_form')
action.update({ return view_id
'views': [(view_id, 'form')],
})
return action
# Workflow stuff # Workflow stuff
################# #################

View File

@ -404,7 +404,7 @@
</group> </group>
<group> <group>
<field name="origin" groups="base.group_user"/> <field name="origin" groups="base.group_user"/>
<field name="name" string="Customer Reference"/> <field name="name"/>
<field name="move_id" groups="account.group_account_user"/> <field name="move_id" groups="account.group_account_user"/>
</group> </group>
</group> </group>

View File

@ -165,7 +165,7 @@ class account_invoice_refund(osv.osv_memory):
to_reconcile_ids = {} to_reconcile_ids = {}
for line in movelines: for line in movelines:
if line.account_id.id == inv.account_id.id: if line.account_id.id == inv.account_id.id:
to_reconcile_ids[line.account_id.id] = [line.id] to_reconcile_ids.setdefault(line.account_id.id, []).append(line.id)
if line.reconcile_id: if line.reconcile_id:
line.reconcile_id.unlink() line.reconcile_id.unlink()
inv_obj.signal_invoice_open(cr, uid, [refund.id]) inv_obj.signal_invoice_open(cr, uid, [refund.id])

View File

@ -162,7 +162,7 @@ class crossovered_budget_lines(osv.osv):
elapsed = strToDate(date_to) - strToDate(date_to) elapsed = strToDate(date_to) - strToDate(date_to)
if total.days: if total.days:
theo_amt = float(elapsed.days / float(total.days)) * line.planned_amount theo_amt = float((elapsed.days + 1) / float(total.days + 1)) * line.planned_amount
else: else:
theo_amt = line.planned_amount theo_amt = line.planned_amount

View File

@ -66,7 +66,7 @@
<field name="inherit_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_form"/> <field name="inherit_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='timesheet_ids']/tree/field[@name='account_id']" position="replace"> <xpath expr="//field[@name='timesheet_ids']/tree/field[@name='account_id']" position="replace">
<field name="account_id" domain="[('type','=','normal'),('state', '&lt;&gt;', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount)"/> <field name="account_id" domain="[('type','=','normal'),('state', '&lt;&gt;', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount)" context="{'default_use_timesheets': 1}"/>
</xpath> </xpath>
</field> </field>
</record> </record>
@ -79,7 +79,7 @@
<field name="inherit_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_form"/> <field name="inherit_id" ref="hr_timesheet_sheet.hr_timesheet_sheet_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='timesheet_ids']/form/field[@name='account_id']" position="replace"> <xpath expr="//field[@name='timesheet_ids']/form/field[@name='account_id']" position="replace">
<field name="account_id" domain="[('type','=','normal'),('state', '&lt;&gt;', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount)"/> <field name="account_id" domain="[('type','=','normal'),('state', '&lt;&gt;', 'close')]" on_change="on_change_account_id(account_id, user_id, unit_amount)" context="{'default_use_timesheets': 1}"/>
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@ -197,6 +197,10 @@ class calendar_attendee(osv.Model):
@param email_from: email address for user sending the mail @param email_from: email address for user sending the mail
""" """
res = False res = False
if self.pool['ir.config_parameter'].get_param(cr, uid, 'calendar.block_mail', default=False):
return res
mail_ids = [] mail_ids = []
data_pool = self.pool['ir.model.data'] data_pool = self.pool['ir.model.data']
mailmess_pool = self.pool['mail.message'] mailmess_pool = self.pool['mail.message']
@ -431,7 +435,7 @@ class calendar_alarm_manager(osv.AbstractModel):
if cron and len(cron) == 1: if cron and len(cron) == 1:
cron = self.pool.get('ir.cron').browse(cr, uid, cron[0], context=context) cron = self.pool.get('ir.cron').browse(cr, uid, cron[0], context=context)
else: else:
raise ("Cron for " + self._name + " not identified :( !") _logger.exception("Cron for " + self._name + " can not be identified !")
if cron.interval_type == "weeks": if cron.interval_type == "weeks":
cron_interval = cron.interval_number * 7 * 24 * 60 * 60 cron_interval = cron.interval_number * 7 * 24 * 60 * 60
@ -445,7 +449,7 @@ class calendar_alarm_manager(osv.AbstractModel):
cron_interval = cron.interval_number cron_interval = cron.interval_number
if not cron_interval: if not cron_interval:
raise ("Cron delay for " + self._name + " can not be calculated :( !") _logger.exception("Cron delay can not be computed !")
all_events = self.get_next_potential_limit_alarm(cr, uid, cron_interval, notif=False, context=context) all_events = self.get_next_potential_limit_alarm(cr, uid, cron_interval, notif=False, context=context)
@ -649,7 +653,7 @@ class calendar_event(osv.Model):
_inherit = ["mail.thread", "ir.needaction_mixin"] _inherit = ["mail.thread", "ir.needaction_mixin"]
def do_run_scheduler(self, cr, uid, id, context=None): def do_run_scheduler(self, cr, uid, id, context=None):
self.pool['calendar.alarm_manager'].do_run_scheduler(cr, uid, context=context) self.pool['calendar.alarm_manager'].get_next_mail(cr, uid, context=context)
def get_recurrent_date_by_event(self, cr, uid, event, context=None): def get_recurrent_date_by_event(self, cr, uid, event, context=None):
"""Get recurrent dates based on Rule string and all event where recurrent_id is child """Get recurrent dates based on Rule string and all event where recurrent_id is child

View File

@ -212,7 +212,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div> <div style="display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx['color'][attendee.state] or 'white'};"></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:
@ -345,7 +345,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div> <div style="display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx['color'][attendee.state] or 'white'};"></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:
@ -477,7 +477,7 @@
<td colspan="3"> <td colspan="3">
: :
% for attendee in object.event_id.attendee_ids: % for attendee in object.event_id.attendee_ids:
<div style='display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx["color"][attendee.state] or 'white'};'></div> <div style="display:inline-block; border-radius: 50%; width:10px; height:10px;background:${'color' in ctx and ctx['color'][attendee.state] or 'white'};"></div>
% if attendee.cn != object.cn: % if attendee.cn != object.cn:
<span style="margin-left:5px">${attendee.cn}</span> <span style="margin-left:5px">${attendee.cn}</span>
% else: % else:

View File

@ -79,6 +79,7 @@ class crm_lead(format_address, osv.osv):
'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.probability == 0 and obj.stage_id and obj.stage_id.fold and obj.stage_id.sequence > 1, 'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.probability == 0 and obj.stage_id and obj.stage_id.fold and obj.stage_id.sequence > 1,
}, },
} }
_mail_mass_mailing = _('Leads / Opportunities')
def get_empty_list_help(self, cr, uid, help, context=None): def get_empty_list_help(self, cr, uid, help, context=None):
if context.get('default_type') == 'lead': if context.get('default_type') == 'lead':
@ -971,15 +972,13 @@ class crm_lead(format_address, osv.osv):
return [lead.section_id.message_get_reply_to()[0] if lead.section_id else False return [lead.section_id.message_get_reply_to()[0] if lead.section_id else False
for lead in self.browse(cr, SUPERUSER_ID, ids, context=context)] for lead in self.browse(cr, SUPERUSER_ID, ids, context=context)]
def _get_formview_action(self, cr, uid, id, context=None): def get_formview_id(self, cr, uid, id, context=None):
action = super(crm_lead, self)._get_formview_action(cr, uid, id, context=context)
obj = self.browse(cr, uid, id, context=context) obj = self.browse(cr, uid, id, context=context)
if obj.type == 'opportunity': if obj.type == 'opportunity':
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_form_view_oppor') model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_form_view_oppor')
action.update({ else:
'views': [(view_id, 'form')], view_id = super(crm_lead, self).get_formview_id(cr, uid, id, model=model, context=context)
}) return view_id
return action
def message_get_suggested_recipients(self, cr, uid, ids, context=None): def message_get_suggested_recipients(self, cr, uid, ids, context=None):
recipients = super(crm_lead, self).message_get_suggested_recipients(cr, uid, ids, context=context) recipients = super(crm_lead, self).message_get_suggested_recipients(cr, uid, ids, context=context)

View File

@ -1,24 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 crm_todo
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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': 'Tasks on CRM',
'version': '1.0',
'category': 'Customer Relationship Management',
'description': """
Todo list for CRM leads and opportunities.
==========================================
""",
'author': 'OpenERP SA',
'depends': ['crm','project_gtd'],
'data': ['crm_todo_view.xml'],
'demo': ['crm_todo_demo.xml'],
'installable': True,
'auto_install': False,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,39 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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/>.
#
##############################################################################
from openerp.osv import fields, osv
class project_task(osv.osv):
_inherit = 'project.task'
_columns = {
'lead_id': fields.many2one('crm.lead', 'Lead / Opportunity')
}
class crm_todo(osv.osv):
_inherit = 'crm.lead'
_columns = {
'task_ids': fields.one2many('project.task', 'lead_id', 'Tasks'),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,16 +0,0 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="project.project_task_24" model="project.task">
<field name="lead_id" ref="crm.crm_case_24"/>
</record>
<record id="project.project_task_23" model="project.task">
<field name="lead_id" ref="crm.crm_case_24"/>
</record>
<record id="project.project_task_22" model="project.task">
<field name="lead_id" ref="crm.crm_case_20"/>
</record>
</data>
</openerp>

View File

@ -1,58 +0,0 @@
<?xml version="1.0" ?>
<openerp>
<data>
<record id="crm_todo_opportunity_add" model="ir.ui.view">
<field name="name">Opportunities - Tasks</field>
<field name="model">crm.lead</field>
<field name="inherit_id" ref="crm.crm_case_form_view_oppor" />
<field name="arch" type="xml">
<data>
<page string="Lead" position="before">
<page string="Tasks">
<field name="task_ids" colspan="4" nolabel="1">
<tree editable="bottom" string="Tasks">
<field name="name"/>
<field name="user_id" context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>
<field string="Timebox" name="timebox_id"/>
<button name="prev_timebox" type="object" string="Previous"/>
<button name="next_timebox" type="object" string="Next"/>
</tree>
</field>
</page>
</page>
</data>
</field>
</record>
<record model="ir.ui.view" id="project_task_crm_tree">
<field name="name">project.task.tree.crm</field>
<field name="model">project.task</field>
<field name="priority">20</field>
<field name="inherit_id" ref="project.view_task_tree2" />
<field name="arch" type="xml">
<field name="remaining_hours" position="after">
<field name="lead_id" invisible="not context.get('lead_id', False)"/>
</field>
</field>
</record>
<record model="ir.actions.act_window" id="crm_todo_action">
<field name="name">My Tasks</field>
<field name="res_model">project.task</field>
<field name="context">{'set_editable':True,'set_visible':True,'gtd':True,'user_invisible':True, "search_default_open": 1, "lead_id": 1}</field>
<field name="search_view_id" ref="project_gtd.view_task_gtd_search"/>
<field name="domain">[('user_id','=',uid)]</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form,calendar,gantt,graph,kanban</field>
</record>
<menuitem id="menu_crm_todo"
parent="base.menu_sales"
action="crm_todo_action"
sequence="7"/>
</data>
</openerp>

View File

@ -1,97 +0,0 @@
# Arabic translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-01 18:05+0000\n"
"Last-Translator: gehad shaat <gehad.shaath@gmail.com>\n"
"Language-Team: Arabic <ar@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "مهمة"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "الوقت الزمني"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "العروض"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "لإغاء المهمة"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "التالي"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "مهامي"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "المهام"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "تمّ"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "إلغاء"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "عرض/فرصة"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "فرصة"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "التحويل لحالة الإنتهاء"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "السابق"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "خطأ ! لا يمكنك انشاء مهام متداخلة."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "خطأ ! يجب ان يكون تاريخ نهاية المهمة اكبر من تاريخ البداية"
#~ msgid "Extra Info"
#~ msgstr "معلومات إضافية"

View File

@ -1,85 +0,0 @@
# Bosnian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-10-26 09:15+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Zadatak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Potencijal"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Za otkazivanje zadatka"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Slijedeće"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Moji zadaci"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Zadaci"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Gotovo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Otkaži"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Potencijal/Prilika"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Potencijal / Prilika"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Za promjenu u status: Gotovo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Prethodno"

View File

@ -1,84 +0,0 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
# * crm_todo
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 7.0alpha\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-21 17:05+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: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr ""
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr ""
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr ""

View File

@ -1,85 +0,0 @@
# Czech translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-30 12:42+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr ""
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr ""
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr ""

View File

@ -1,85 +0,0 @@
# Danish translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-06-19 17:34+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Danish <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Opgave"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Timeboks"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Emne"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Afbryd opgave"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Næste"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mine opgaver"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Opgaver"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Udført"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Annuller"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Emne/Forventning"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Emne / Forventning"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Ændre til afsluttet"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Forrige"

View File

@ -1,97 +0,0 @@
# German translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-16 16:27+0000\n"
"Last-Translator: Felix Schubert <Unknown>\n"
"Language-Team: German <de@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Aufgabe"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Zeitfenster"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Interessent"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Um eine Aufgabe abzubrechen"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Weiter"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Meine Aufgaben"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Aufgaben"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Erledigt"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Abbrechen"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Interessent / Chance"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Interessent / Chance"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Um in den Status \"Erledigt\" zu wechseln"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Vorheriger"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Fehler ! Sie können keine rekursiven Aufgaben definieren."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Fehler! Aufgaben End-Datum muss größer als Aufgaben-Beginn sein"
#~ msgid "Extra Info"
#~ msgstr "Weitere Information"

View File

@ -1,97 +0,0 @@
# English (United Kingdom) translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-07-18 16:31+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Task"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Timebox"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Lead"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "For cancelling the task"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Next"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "My Tasks"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tasks"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Done"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancel"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Lead/Opportunity"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lead / Opportunity"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "For changing to done state"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Previous"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Error ! You cannot create recursive tasks."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Error ! Task end-date must be greater then task start-date"
#~ msgid "Extra Info"
#~ msgstr "Extra Info"

View File

@ -1,98 +0,0 @@
# Spanish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-11 21:39+0000\n"
"Last-Translator: lambdasoftware <development@lambdasoftware.net>\n"
"Language-Team: Spanish <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tarea"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Periodo de tiempo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Iniciativa"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Para cancelar la tarea"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Siguiente"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mis tareas"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tareas"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Realizado"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancelar"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Iniciativa/Oportunidad"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Iniciativa / Oportunidad"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Para cambiar a estado 'Realizada'"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Anterior"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "¡Error! No se pueden crear tareas recursivas."
#~ msgid "crm.lead"
#~ msgstr "crm.iniciativa"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "¡ Error ! La fecha final de la tarea debe ser mayor que la fecha de inicio"
#~ msgid "Extra Info"
#~ msgstr "Información extra"

View File

@ -1,98 +0,0 @@
# Spanish (Costa Rica) translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-02-15 20:27+0000\n"
"Last-Translator: Freddy Gonzalez <freddy.gonzalez.contreras@gmail.com>\n"
"Language-Team: Spanish (Costa Rica) <es_CR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tarea"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Periodo de tiempo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Iniciativa"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Para cancelar la tarea"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Siguiente"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mis Tareas"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tareas"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Realizado"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancelar"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Iniciativa / Oportunbidad"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Iniciativa / Oportunidad"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Para cambiar al estado hecho"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Anterior"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "¡Error! No se pueden crear tareas recurrentes."
#~ msgid "crm.lead"
#~ msgstr "crm.iniciativa"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "¡Error! Tarea fecha final debe ser mayor que la tarea fecha de inicio"
#~ msgid "Extra Info"
#~ msgstr "Información extra"

View File

@ -1,85 +0,0 @@
# Estonian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-10-09 15:39+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Estonian <et@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Ülesanne"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Ajalahter"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Ülesande katkestamiseks"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Järgmine"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Minu ülesanded"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Ülesanded"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Valmis"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Katkesta"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Eelmine"

View File

@ -1,95 +0,0 @@
# Finnish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-03-26 09:38+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tehtävä"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Aikaikkuna"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Liidi"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Peruuttaaksesi tehtävän"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Seuraava"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Omat tehtäväni"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tehtävät"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Valmis"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Peruuta"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Liidi/Mahdollisuus"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Liidi/Mahdollisuus"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Vaihtaaksesi tilaan \"Valmis\""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Edellinen"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Virhe ! Et voi luoda rekursiivisiä tehtäviä."
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Virhe! Tehtävän lopetuspäivän tulee olla myöhäisempi kuin aloituspäivä"
#~ msgid "Extra Info"
#~ msgstr "Lisätiedot"

View File

@ -1,99 +0,0 @@
# French translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-19 15:50+0000\n"
"Last-Translator: WANTELLET Sylvain <Swantellet@tetra-info.com>\n"
"Language-Team: French <fr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tâche"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Zone de temps"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Piste"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Pour supprimer la tâche"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Suivante"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mes tâches"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tâches"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Terminé"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Annuler"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Piste/opportunité"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Piste / opportunité"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Pour passer à l'état terminé"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Précédente"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Erreur ! Vous ne pouvez pas créer de tâches récursives."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Erreur ! La date de fin de la tâche doit être postérieure à la date de "
#~ "démarrage"
#~ msgid "Extra Info"
#~ msgstr "Informations complémentaires"

View File

@ -1,94 +0,0 @@
# Gujarati translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-04-18 11:47+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Gujarati <gu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "કાર્ય"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "આગલું"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "મારા કાર્યો"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "કાર્યો"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "પૂરુ થઇ ગયુ"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "રદ કરો"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "પહેલાનું"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "ભૂલ! તમે પાસાના ક્રિયાઓ બનાવી શકો નહિ."
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "ભૂલ! કાર્ય અંતિમ તારીખ શરૂઆતની તારીખ કાર્ય કરતાં મોટી હોવી જ જોઈએ"
#~ msgid "Extra Info"
#~ msgstr "વિશેષ માહિતી"

View File

@ -1,85 +0,0 @@
# Hebrew translation for openobject-addons
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2014-01-03 03:46+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hebrew <he@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "משימה"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "ליד (Lead)"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "לביטול המשימה"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "הבא"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "המשימות שלי"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "משימות"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "בוצע"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "בטל"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "ליד/הזדמנות"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "ליד/הזדמנות"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "לשינוי לסטטוס בוצע"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "הקודם"

View File

@ -1,85 +0,0 @@
# Croatian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-10 08:02+0000\n"
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
"Language-Team: Croatian <hr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Zadatak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "modul: Popis zadataka (crm_todo)"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Potencijal"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Za otkazivanje zadatka"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Sljedeći"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Moji Zadaci"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Zadaci"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Završeno"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Otkaži"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Potencijal/prilika"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Potencijal / Prilika"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Za promjenu u status: Završeno"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Prethodni"

View File

@ -1,85 +0,0 @@
# Hungarian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-10 21:58+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Feladat"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Időkorlát"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Érdeklődő"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "A munka visszavonásához"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Következő"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Feladataim"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Feladatok"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Elvégezve"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Visszavonás"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Lehetőség/Esély"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lehetőség/Esély"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Elvégezve szintre váltáshoz"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Előző"

View File

@ -1,96 +0,0 @@
# Italian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-15 11:53+0000\n"
"Last-Translator: Nicola Riolini - Micronaet <Unknown>\n"
"Language-Team: Italian <it@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Attività"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Periodo Inderogabile"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Lead"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Per annullare l'attività"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Successivo"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Le Mie Attività"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Attività"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Completato"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancella"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Lead/Opportunità"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lead/Opportunità"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Per cambiare in stato completato"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Precedente"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Errore ! Non è possibile creare attività ricorsive."
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Errore ! La data di termine del compito deve essere antecedente a quella di "
#~ "inizio"
#~ msgid "Extra Info"
#~ msgstr "Altre Informazioni"

View File

@ -1,97 +0,0 @@
# Japanese translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-07-07 21:25+0000\n"
"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "タスク"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "タイムボックス"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "タスクをキャンセルする為に"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "次へ"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "私のタスク"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "タスク"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "完了"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "キャンセル"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "リード / 商談"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "完了状態に変更するために"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "前へ"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "エラーです。 再帰的なタスクを作成することはできません。"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "エラーです。 タスクの終了日は開始日以降の日付に設定しなければなりません。"
#~ msgid "Extra Info"
#~ msgstr "その他の情報"

View File

@ -1,85 +0,0 @@
# Korean translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-29 00:26+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Korean <ko@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "과제"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "기한"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "리드"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "과제를 취소하기 위해 사용됨"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "다음"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "내 과제"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "과제"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "완료"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "취소"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "리드/기회"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "리드 / 기회"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "완료 상태로 변경하기 위해 사용됨"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "이전으로"

View File

@ -1,94 +0,0 @@
# Lithuanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-05-09 08:27+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Lithuanian <lt@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Užduotis"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Laiko dėžė"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Užduoties nutraukimui"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Kitas"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mano užduotys"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Užduotys"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Atlikta"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Atšaukti"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Iniciatyva / galimybė"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Būsenos pakeitimui į atlikta"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Ankstesnis"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Klaida! Užduoties pabaigos data turi būti vėlesnė nei pradžios data"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Klaida! Jūs negalite sukurti rekursinių užduočių."
#~ msgid "Extra Info"
#~ msgstr "Papildoma informacija"

View File

@ -1,85 +0,0 @@
# Macedonian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-03-01 12:35+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Macedonian <mk@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Задача"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Timebox"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Трага"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "За откажување на задача"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Следно"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Мои задачи"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Завршено"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Откажи"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Трага/Можност"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Трага/Можност"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "За менување во состојба завршено"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Претходно"

View File

@ -1,98 +0,0 @@
# Mongolian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-06-17 12:40+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Mongolian <mn@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Даалгавар"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Хугацааны муж"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Сэжим"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Даалгаварыг цуцлахад"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Дараах"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Миний даалгаврууд"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Даалгаврууд"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Хийгдсэн"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Цуцлах"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Сэжим/Боломж"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Сэжим / Боломж"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Төлөвийг хийгдсэн болгож өөрчлөхөд"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Өмнөх"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Алдаа ! Та рекурсив цэс үүсгэж болохгүй!"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Алдаа ! Даалгаврын дуусах хугацаа нь эхлэх хугацаанаасаа хойно байх ёстой"
#~ msgid "Extra Info"
#~ msgstr "Нэмэлт мэдээлэл"

View File

@ -1,97 +0,0 @@
# Norwegian Bokmal translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-09-04 14:07+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Oppgave"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Timeboks"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "For å avbryte oppgaven"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Neste"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mine oppgaver"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Oppgaver"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Utført"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Kanseller"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lede / mulighet"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "For å bytte til ferdig tilstand"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Tidligere"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Feil! Du kan ikke lage en rekursive oppgaver."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Feil! Oppgave sluttdato må være større enn oppgave startdato"
#~ msgid "Extra Info"
#~ msgstr "Ekstra informasjon"

View File

@ -1,97 +0,0 @@
# Dutch translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-11-24 18:09+0000\n"
"Last-Translator: Erwin van der Ploeg (BAS Solutions) <Unknown>\n"
"Language-Team: Dutch <nl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Taak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Tijdvak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Lead"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Hiermee annuleert u de taak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Volgende"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mijn taken"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Taken"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Verwerkt"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Annuleer"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Lead/Prospect"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lead / prospect"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Hiermee bevestigt u de taak als verwerkt"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Vorige"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Fout! U kunt geen recursieve taken aanmaken."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Fout! Einddatum van de taak moet voorbij de begindatum liggen"
#~ msgid "Extra Info"
#~ msgstr "Extra informatie"

View File

@ -1,94 +0,0 @@
# Polish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-02-25 13:16+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Zadanie"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Ramka"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Do anulowania zadania"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Następny"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Moje zadania"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Zadania"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Wykonane"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Anuluj"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Sygnał / Szansa"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Do zmiany w stan wykonane"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Poprzednie"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Błąd ! Nie możesz tworzyć rekurencyjnych zadań."
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Błąd ! Data końcowa musi być późniejsza niż data początkowa"
#~ msgid "Extra Info"
#~ msgstr "Dodatkowe informacje"

View File

@ -1,97 +0,0 @@
# Portuguese translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-04-13 14:02+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Portuguese <pt@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tarefa"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Período de Tempo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Dica"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Para cancelar a tarefa"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Próximo"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "As Minhas Tarefas"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tarefas"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Concluído"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancelar"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Dica / Oportunidade"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Lead / Oportunidade"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Para mudar para o estado concluído"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Anterior"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Erro ! Não se pode criar tarefas recursivas"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Erro ! Data final da tarefa tem que ser posterior a data inicial"
#~ msgid "Extra Info"
#~ msgstr "Informação Extra"

View File

@ -1,98 +0,0 @@
# Brazilian Portuguese translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-12-17 22:32+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@zupy.com.br>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Tarefa"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Período de Tempo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Prospecto"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Para cancelar a tarefa"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Próximo"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Minhas Tarefas"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Tarefas"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Concluído"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Cancelar"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Prospecto/Oportunidade"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Prospecto / Oportunidade"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Para mudar o estado para Concluído"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Anterior"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Erro! Você não pode criar tarefas recursivas."
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Erro ! A data final deve ser maior do que a data inicial"
#~ msgid "Extra Info"
#~ msgstr "Informações Adicionais"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"

View File

@ -1,99 +0,0 @@
# Romanian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-05-15 12:21+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Romanian <ro@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Sarcina"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Ceas"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Pista"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Pentru anularea sarcinii"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Urmatorul (urmatoarea)"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Sarcinile mele"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Sarcini"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Efectuat"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Anuleaza"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Pista/Oportunitate"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Pista / Oportunitate"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Pentru schimbarea in starea efectuat"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Precedent(a)"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Eroare ! Nu puteti crea sarcini recursive."
#~ msgid "crm.lead"
#~ msgstr "pista.crm"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Eroare ! Data de sfarsit a sarcinii trebuie sa fie mai mare decat data de "
#~ "inceput"
#~ msgid "Extra Info"
#~ msgstr "Informatii suplimentare"

View File

@ -1,98 +0,0 @@
# Russian translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-09-14 06:29+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian <ru@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Резерв времени"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Кандидат"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Для отмены задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Далее"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Мои задачи"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Задачи"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Сделано"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Отмена"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Кандидат/Предложение"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Кандидат / предложение"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Для смены в состояние \"Сделано\""
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Назад"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Ошибка! Вы не можете создавать рекурсивные задачи."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr ""
#~ "Ошибка! Дата завершения задачи должна быть позднее чем дата начала задачи"
#~ msgid "Extra Info"
#~ msgstr "Доп. инфо."

View File

@ -1,85 +0,0 @@
# Slovenian translation for openobject-addons
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2013-01-26 12:13+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovenian <sl@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Naloga"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Časovnica"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Potencialna priložnost"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Za preklic opravila"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Naprej"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Moje naloge"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Naloge"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Končano"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Prekliči"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Potencialna priložnost/Priložnost"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Potencialna priložnost/Priložnost"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Za sprememo v status Opravljeno."
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Predhodni"

View File

@ -1,97 +0,0 @@
# Serbian Latin translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-03-16 10:40+0000\n"
"Last-Translator: Milan Milosevic <Unknown>\n"
"Language-Team: Serbian Latin <sr@latin@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Zadatak"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Rok za izvršenje"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr ""
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Za poništavanje zadatka"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Sledeće"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Moji zadaci"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Zadaci"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Gotovo"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Otkaži"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr ""
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Vodeće / Prilika"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Za promenu u stanje 'gotovo'"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Prethodno"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Greška ! Ne možete praviti rekurzivne zadatke."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Greška ! Datum završetka mora biti posle datuma početka zadatka"
#~ msgid "Extra Info"
#~ msgstr "Dodatne informacije"

View File

@ -1,97 +0,0 @@
# Swedish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-05-08 16:44+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swedish <sv@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Uppgift"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Tidsram"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Kundämne"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "För att avbryta uppgiften"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Framåt"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Mina uppgifter"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Uppgifter"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Klar"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "Avbryt"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Kundämnen/affärsmöjligheter"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Kundämne / affärsmöjlighet"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "För att ändra till klarstatus"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Föregående"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Fel ! Du kan inte skapa rekursiva uppgifter"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Fel ! Uppgiftens slutdatum måste komma efter startdatumet"
#~ msgid "Extra Info"
#~ msgstr "Tilläggsinformation"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"

View File

@ -1,97 +0,0 @@
# Turkish translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-02-09 22:07+0000\n"
"Last-Translator: Ahmet Altınışık <Unknown>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "Görev"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "Zaman Kutusu"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "Aday"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "Görevi iptal etmek için"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "Sonraki"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "Görevlerim"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "Görevler"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "Biten"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "İptal"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "Aday/Fırsat"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "Aday / Fırsat"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "Biten durumuna değiştirmek için"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "Önceki"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "Hata ! Kendini çağıran görevler oluşturamazsınız."
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "Hata! görev bitiş tarihi başlangıç tarihinden sonra olmalı"
#~ msgid "Extra Info"
#~ msgstr "Ek Bilgi"

View File

@ -1,97 +0,0 @@
# Chinese (Simplified) translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-11-27 02:01+0000\n"
"Last-Translator: 盈通 ccdos <ccdos@intoerp.com>\n"
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "任务"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "时间箱"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "线索"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "为取消这个任务"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "下一个"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "我的任务"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "任务"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "已完成"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "取消"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "线索/商机"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "线索 / 商机"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "要设置为完成状态"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "上一个"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "错误!不能创建循环引用的任务"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "错误!任务结束日期必须大于任务开始日期"
#~ msgid "Extra Info"
#~ msgstr "附加信息"

View File

@ -1,97 +0,0 @@
# Chinese (Traditional) translation for openobject-addons
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
# This file is distributed under the same license as the openobject-addons package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
"PO-Revision-Date: 2012-08-29 09:15+0000\n"
"Last-Translator: Bonnie Duan <bonnie.duan@cenoq.com>\n"
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2014-04-12 08:26+0000\n"
"X-Generator: Launchpad (build 16976)\n"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_project_task
msgid "Task"
msgstr "任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Timebox"
msgstr "時間區間"
#. module: crm_todo
#: view:crm.lead:0
msgid "Lead"
msgstr "潛在客戶"
#. module: crm_todo
#: view:crm.lead:0
msgid "For cancelling the task"
msgstr "取消任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Next"
msgstr "下一步"
#. module: crm_todo
#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
msgid "My Tasks"
msgstr "我的任務"
#. module: crm_todo
#: view:crm.lead:0
#: field:crm.lead,task_ids:0
msgid "Tasks"
msgstr "任務"
#. module: crm_todo
#: view:crm.lead:0
msgid "Done"
msgstr "完成"
#. module: crm_todo
#: view:crm.lead:0
msgid "Cancel"
msgstr "刪除"
#. module: crm_todo
#: model:ir.model,name:crm_todo.model_crm_lead
msgid "Lead/Opportunity"
msgstr "潛在客戶/商機"
#. module: crm_todo
#: field:project.task,lead_id:0
msgid "Lead / Opportunity"
msgstr "潛在客戶/機會"
#. module: crm_todo
#: view:crm.lead:0
msgid "For changing to done state"
msgstr "要設置為完成狀態"
#. module: crm_todo
#: view:crm.lead:0
msgid "Previous"
msgstr "前一頁"
#~ msgid "Extra Info"
#~ msgstr "額外資訊"
#~ msgid "Error ! Task end-date must be greater then task start-date"
#~ msgstr "錯誤!任務結束日期必須大於任務開始日期"
#~ msgid "Error ! You cannot create recursive tasks."
#~ msgstr "錯誤!不能創建循環引用的任務"
#~ msgid "crm.lead"
#~ msgstr "crm.lead"

View File

@ -63,7 +63,7 @@ campaigns on any OpenERP document.
'wizard/mail_compose_message_view.xml', 'wizard/mail_compose_message_view.xml',
'security/ir.model.access.csv' 'security/ir.model.access.csv'
], ],
'demo': ['res_partner_demo.yml'], 'demo': [],
'installable': True, 'installable': True,
'auto_install': True, 'auto_install': True,
'images': ['images/1_email_account.jpeg','images/2_email_template.jpeg','images/3_emails.jpeg'], 'images': ['images/1_email_account.jpeg','images/2_email_template.jpeg','images/3_emails.jpeg'],

View File

@ -231,6 +231,11 @@ class email_template(osv.osv):
'email_from': fields.char('From', 'email_from': fields.char('From',
help="Sender address (placeholders may be used here). If not set, the default " help="Sender address (placeholders may be used here). If not set, the default "
"value will be the author's email alias if configured, or email address."), "value will be the author's email alias if configured, or email address."),
'use_default_to': fields.boolean(
'Default recipients',
help="Default recipients of the record:\n"
"- partner (using id on a partner or the partner_id field) OR\n"
"- email (using email_from or email field)"),
'email_to': fields.char('To (Emails)', help="Comma-separated recipient addresses (placeholders may be used here)"), 'email_to': fields.char('To (Emails)', help="Comma-separated recipient addresses (placeholders may be used here)"),
'partner_to': fields.char('To (Partners)', 'partner_to': fields.char('To (Partners)',
help="Comma-separated ids of recipient partners (placeholders may be used here)", help="Comma-separated ids of recipient partners (placeholders may be used here)",
@ -386,6 +391,37 @@ class email_template(osv.osv):
}) })
return {'value': result} return {'value': result}
def generate_recipients_batch(self, cr, uid, results, template_id, res_ids, context=None):
"""Generates the recipients of the template. Default values can ben generated
instead of the template values if requested by template or context.
Emails (email_to, email_cc) can be transformed into partners if requested
in the context. """
if context is None:
context = {}
template = self.browse(cr, uid, template_id, context=context)
if template.use_default_to or context.get('tpl_force_default_to'):
ctx = dict(context, thread_model=template.model)
default_recipients = self.pool['mail.thread'].message_get_default_recipients(cr, uid, res_ids, context=ctx)
for res_id, recipients in default_recipients.iteritems():
results[res_id].pop('partner_to', None)
results[res_id].update(recipients)
for res_id, values in results.iteritems():
partner_ids = values.get('partner_ids', list())
if context and context.get('tpl_partners_only'):
mails = tools.email_split(values.pop('email_to', '')) + tools.email_split(values.pop('email_cc', ''))
for mail in mails:
partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context)
partner_ids.append(partner_id)
partner_to = values.pop('partner_to', '')
if partner_to:
# placeholders could generate '', 3, 2 due to some empty field values
tpl_partner_ids = [pid for pid in partner_to.split(',') if pid]
partner_ids += self.pool['res.partner'].exists(cr, SUPERUSER_ID, tpl_partner_ids, context=context)
results[res_id]['partner_ids'] = partner_ids
return results
def generate_email_batch(self, cr, uid, template_id, res_ids, context=None, fields=None): def generate_email_batch(self, cr, uid, template_id, res_ids, context=None, fields=None):
"""Generates an email from the template for given the given model based on """Generates an email from the template for given the given model based on
records given by res_ids. records given by res_ids.
@ -420,14 +456,18 @@ class email_template(osv.osv):
context=context) context=context)
for res_id, field_value in generated_field_values.iteritems(): for res_id, field_value in generated_field_values.iteritems():
results.setdefault(res_id, dict())[field] = field_value results.setdefault(res_id, dict())[field] = field_value
# compute recipients
results = self.generate_recipients_batch(cr, uid, results, template.id, template_res_ids, context=context)
# update values for all res_ids # update values for all res_ids
for res_id in template_res_ids: for res_id in template_res_ids:
values = results[res_id] values = results[res_id]
# body: add user signature, sanitize
if 'body_html' in fields and template.user_signature: if 'body_html' in fields and template.user_signature:
signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature
values['body_html'] = tools.append_content_to_html(values['body_html'], signature) values['body_html'] = tools.append_content_to_html(values['body_html'], signature)
if values.get('body_html'): if values.get('body_html'):
values['body'] = tools.html_sanitize(values['body_html']) values['body'] = tools.html_sanitize(values['body_html'])
# technical settings
values.update( values.update(
mail_server_id=template.mail_server_id.id or False, mail_server_id=template.mail_server_id.id or False,
auto_delete=template.auto_delete, auto_delete=template.auto_delete,
@ -484,17 +524,8 @@ class email_template(osv.osv):
# create a mail_mail based on values, without attachments # create a mail_mail based on values, without attachments
values = self.generate_email(cr, uid, template_id, res_id, context=context) values = self.generate_email(cr, uid, template_id, res_id, context=context)
if not values.get('email_from'): if not values.get('email_from'):
raise osv.except_osv(_('Warning!'),_("Sender email is missing or empty after template rendering. Specify one to deliver your message")) raise osv.except_osv(_('Warning!'), _("Sender email is missing or empty after template rendering. Specify one to deliver your message"))
# process partner_to field that is a comma separated list of partner_ids -> recipient_ids values['recipient_ids'] = [(4, pid) for pid in values.get('partner_ids', list())]
# NOTE: only usable if force_send is True, because otherwise the value is
# not stored on the mail_mail, and therefore lost -> fixed in v8
values['recipient_ids'] = []
partner_to = values.pop('partner_to', '')
if partner_to:
# placeholders could generate '', 3, 2 due to some empty field values
tpl_partner_ids = [pid for pid in partner_to.split(',') if pid]
values['recipient_ids'] += [(4, pid) for pid in self.pool['res.partner'].exists(cr, SUPERUSER_ID, tpl_partner_ids, context=context)]
attachment_ids = values.pop('attachment_ids', []) attachment_ids = values.pop('attachment_ids', [])
attachments = values.pop('attachments', []) attachments = values.pop('attachments', [])
msg_id = mail_mail.create(cr, uid, values, context=context) msg_id = mail_mail.create(cr, uid, values, context=context)

View File

@ -9,8 +9,10 @@
<sheet> <sheet>
<div class="oe_title"> <div class="oe_title">
<label for="name" class="oe_edit_only"/><h1><field name="name" required="1"/></h1> <label for="name" class="oe_edit_only"/><h1><field name="name" required="1"/></h1>
<label for="model_id"/><field name="model_id" required="1" on_change="onchange_model_id(model_id)" class="oe_inline"/> <group>
<field name="model" invisible="1"/> <field name="model_id" required="1" on_change="onchange_model_id(model_id)"/>
<field name="model" invisible="1"/>
</group>
</div> </div>
<div class="oe_right oe_button_box" name="buttons"> <div class="oe_right oe_button_box" name="buttons">
<field name="ref_ir_act_window" invisible="1"/> <field name="ref_ir_act_window" invisible="1"/>
@ -25,43 +27,28 @@
context="{'template_id':active_id}"/> context="{'template_id':active_id}"/>
</div> </div>
<notebook> <notebook>
<page string="Mailing Template"> <page string="Content">
<group> <label for="subject"/>
<group> <h2 style="display: inline-block;"><field name="subject" placeholder="Subject (placeholders may be used here)"/></h2>
<field name="email_from" <field name="body_html"/>
placeholder="Override author's email"/>
<field name="email_to"
placeholder="Comma-separated recipient addresses"/>
<field name="partner_to"
placeholder="Comma-separated ids of recipient partners"/>
<field name="email_cc"
placeholder="Comma-separated carbon copy recipients addresses"/>
<field name="reply_to"
placeholder="Preferred reply address"/>
<field name="subject"
placeholder="Subject (placeholders may be used here)"/>
<field name="user_signature" string="Author Signature (mass mail only)"/>
</group>
<group class="oe_edit_only">
<h3 colspan="2">Dynamic placeholder generator</h3>
<field name="model_object_field"
domain="[('model_id','=',model_id),('ttype','!=','one2many'),('ttype','!=','many2many')]"
on_change="onchange_sub_model_object_value_field(model_object_field)"/>
<field name="sub_object" readonly="1"/>
<field name="sub_model_object_field"
domain="[('model_id','=',sub_object),('ttype','!=','one2many'),('ttype','!=','many2many')]"
attrs="{'readonly':[('sub_object','=',False)],'required':[('sub_object','!=',False)]}"
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field)"/>
<field name="null_value"
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field,null_value)"/>
<field name="copyvalue"/>
</group>
</group>
<h3>Body</h3>
<field name="body_html" width="250" height="450"
placeholder="Rich-text/HTML content of the message (placeholders may be used here)"/>
<field name="attachment_ids" widget="many2many_binary"/> <field name="attachment_ids" widget="many2many_binary"/>
</page> </page>
<page string="Email Configuration">
<group>
<field name="email_from"
placeholder="Override author's email"/>
<field name="use_default_to"/>
<field name="email_to" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated recipient addresses"/>
<field name="partner_to" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated ids of recipient partners"/>
<field name="email_cc" attrs="{'invisible': [('use_default_to', '=', True)]}"
placeholder="Comma-separated carbon copy recipients addresses"/>
<field name="reply_to"
placeholder="Preferred reply address"/>
<field name="user_signature" string="Author Signature (mass mail only)"/>
</group>
</page>
<page string="Advanced Settings"> <page string="Advanced Settings">
<group> <group>
<field name="lang"/> <field name="lang"/>
@ -72,6 +59,21 @@
attrs="{'invisible':[('report_template','=',False)]}"/> attrs="{'invisible':[('report_template','=',False)]}"/>
</group> </group>
</page> </page>
<page string="Dynamic Placeholder Generator">
<group>
<field name="model_object_field"
domain="[('model_id','=',model_id),('ttype','!=','one2many'),('ttype','!=','many2many')]"
on_change="onchange_sub_model_object_value_field(model_object_field)"/>
<field name="sub_object" readonly="1"/>
<field name="sub_model_object_field"
domain="[('model_id','=',sub_object),('ttype','!=','one2many'),('ttype','!=','many2many')]"
attrs="{'readonly':[('sub_object','=',False)],'required':[('sub_object','!=',False)]}"
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field)"/>
<field name="null_value"
on_change="onchange_sub_model_object_value_field(model_object_field,sub_model_object_field,null_value)"/>
<field name="copyvalue"/>
</group>
</page>
</notebook> </notebook>
</sheet> </sheet>
</form> </form>

View File

@ -1,9 +0,0 @@
-
Set opt-out to True on all demo partners
-
!python {model: res.partner}: |
partner_ids = self.search(cr, uid, [])
# assume partners with an external ID come from demo data
ext_ids = self._get_external_ids(cr, uid, partner_ids)
ids_to_update = [k for (k,v) in ext_ids.iteritems() if v]
self.write(cr, uid, ids_to_update, {'opt_out': True})

View File

@ -74,7 +74,7 @@ class test_message_compose(TestMail):
# 1. Comment on pigs # 1. Comment on pigs
compose_id = mail_compose.create(cr, uid, compose_id = mail_compose.create(cr, uid,
{'subject': 'Forget me subject', 'body': '<p>Dummy body</p>', 'post': True}, {'subject': 'Forget me subject', 'body': '<p>Dummy body</p>'},
{'default_composition_mode': 'comment', {'default_composition_mode': 'comment',
'default_model': 'mail.group', 'default_model': 'mail.group',
'default_res_id': self.group_pigs_id, 'default_res_id': self.group_pigs_id,
@ -102,7 +102,7 @@ class test_message_compose(TestMail):
'default_template_id': email_template_id, 'default_template_id': email_template_id,
'active_ids': [self.group_pigs_id, self.group_bird_id] 'active_ids': [self.group_pigs_id, self.group_bird_id]
} }
compose_id = mail_compose.create(cr, uid, {'subject': 'Forget me subject', 'body': 'Dummy body', 'post': True}, context) compose_id = mail_compose.create(cr, uid, {'subject': 'Forget me subject', 'body': 'Dummy body'}, context)
compose = mail_compose.browse(cr, uid, compose_id, context) compose = mail_compose.browse(cr, uid, compose_id, context)
onchange_res = compose.onchange_template_id(email_template_id, 'comment', 'mail.group', self.group_pigs_id)['value'] onchange_res = compose.onchange_template_id(email_template_id, 'comment', 'mail.group', self.group_pigs_id)['value']
onchange_res['partner_ids'] = [(4, partner_id) for partner_id in onchange_res.pop('partner_ids', [])] onchange_res['partner_ids'] = [(4, partner_id) for partner_id in onchange_res.pop('partner_ids', [])]
@ -146,7 +146,7 @@ class test_message_compose(TestMail):
'default_partner_ids': [p_a_id], 'default_partner_ids': [p_a_id],
'active_ids': [self.group_pigs_id, self.group_bird_id] 'active_ids': [self.group_pigs_id, self.group_bird_id]
} }
compose_id = mail_compose.create(cr, uid, {'subject': 'Forget me subject', 'body': 'Dummy body', 'post': True}, context) compose_id = mail_compose.create(cr, uid, {'subject': 'Forget me subject', 'body': 'Dummy body'}, context)
compose = mail_compose.browse(cr, uid, compose_id, context) compose = mail_compose.browse(cr, uid, compose_id, context)
onchange_res = compose.onchange_template_id(email_template_id, 'mass_mail', 'mail.group', self.group_pigs_id)['value'] onchange_res = compose.onchange_template_id(email_template_id, 'mass_mail', 'mail.group', self.group_pigs_id)['value']
onchange_res['partner_ids'] = [(4, partner_id) for partner_id in onchange_res.pop('partner_ids', [])] onchange_res['partner_ids'] = [(4, partner_id) for partner_id in onchange_res.pop('partner_ids', [])]
@ -172,12 +172,12 @@ class test_message_compose(TestMail):
self.assertIn(_body_html1, message_pigs.body, 'mail.message body on Pigs incorrect') self.assertIn(_body_html1, message_pigs.body, 'mail.message body on Pigs incorrect')
self.assertIn(_body_html2, message_bird.body, 'mail.message body on Bird incorrect') self.assertIn(_body_html2, message_bird.body, 'mail.message body on Bird incorrect')
# Test: partner_ids: p_a_id (default) + 3 newly created partners # Test: partner_ids: p_a_id (default) + 3 newly created partners
message_pigs_pids = [partner.id for partner in message_pigs.notified_partner_ids] # message_pigs_pids = [partner.id for partner in message_pigs.notified_partner_ids]
message_bird_pids = [partner.id for partner in message_bird.notified_partner_ids] # message_bird_pids = [partner.id for partner in message_bird.notified_partner_ids]
partner_ids = self.res_partner.search(cr, uid, [('email', 'in', ['b@b.b', 'c@c.c', 'd@d.d'])]) # partner_ids = self.res_partner.search(cr, uid, [('email', 'in', ['b@b.b', 'c@c.c', 'd@d.d'])])
partner_ids.append(p_a_id) # partner_ids.append(p_a_id)
self.assertEqual(set(message_pigs_pids), set(partner_ids), 'mail.message on pigs incorrect number of notified_partner_ids') # self.assertEqual(set(message_pigs_pids), set(partner_ids), 'mail.message on pigs incorrect number of notified_partner_ids')
self.assertEqual(set(message_bird_pids), set(partner_ids), 'mail.message on bird notified_partner_ids incorrect') # self.assertEqual(set(message_bird_pids), set(partner_ids), 'mail.message on bird notified_partner_ids incorrect')
# ---------------------------------------- # ----------------------------------------
# CASE4: test newly introduced partner_to field # CASE4: test newly introduced partner_to field
@ -237,8 +237,8 @@ class test_message_compose(TestMail):
email_template.send_mail(cr, uid, email_template_id, self.group_pigs_id, force_send=True, context=context) email_template.send_mail(cr, uid, email_template_id, self.group_pigs_id, force_send=True, context=context)
sent_emails = self._build_email_kwargs_list sent_emails = self._build_email_kwargs_list
email_to_lst = [ email_to_lst = [
['b@b.b', 'c@c.c'], ['"Followers of Pigs" <admin@yourcompany.example.com>'], ['b@b.b', 'c@c.c'], ['Administrator <admin@yourcompany.example.com>'],
['"Followers of Pigs" <raoul@raoul.fr>'], ['"Followers of Pigs" <bert@bert.fr>']] ['Raoul Grosbedon <raoul@raoul.fr>'], ['Bert Tartignole <bert@bert.fr>']]
self.assertEqual(len(sent_emails), 4, 'email_template: send_mail: 3 valid email recipients + email_to -> should send 4 emails') self.assertEqual(len(sent_emails), 4, 'email_template: send_mail: 3 valid email recipients + email_to -> should send 4 emails')
for email in sent_emails: for email in sent_emails:
self.assertIn(email['email_to'], email_to_lst, 'email_template: send_mail: wrong email_recipients') self.assertIn(email['email_to'], email_to_lst, 'email_template: send_mail: wrong email_recipients')

View File

@ -66,6 +66,7 @@ class email_template_preview(osv.osv_memory):
_columns = { _columns = {
'res_id': fields.selection(_get_records, 'Sample Document'), 'res_id': fields.selection(_get_records, 'Sample Document'),
'partner_ids': fields.many2many('res.partner', string='Recipients'),
} }
def on_change_res_id(self, cr, uid, ids, res_id, context=None): def on_change_res_id(self, cr, uid, ids, res_id, context=None):
@ -80,7 +81,7 @@ class email_template_preview(osv.osv_memory):
# generate and get template values # generate and get template values
mail_values = email_template.generate_email(cr, uid, template_id, res_id, context=context) mail_values = email_template.generate_email(cr, uid, template_id, res_id, context=context)
vals = dict((field, mail_values.get(field, False)) for field in ('email_from', 'email_to', 'email_cc', 'reply_to', 'subject', 'body_html', 'partner_to')) vals = dict((field, mail_values.get(field, False)) for field in ('email_from', 'email_to', 'email_cc', 'reply_to', 'subject', 'body_html', 'partner_to', 'partner_ids', 'attachment_ids'))
vals['name'] = template.name vals['name'] = template.name
return {'value': vals} return {'value': vals}

View File

@ -8,14 +8,17 @@
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Email Preview" version="7.0"> <form string="Email Preview" version="7.0">
<field name="model_id" invisible="1"/> <field name="model_id" invisible="1"/>
<h2 style="color: #7c7bad;">Preview of <field name="name" readonly="1" nolabel="1" class="oe_inline"/></h2> <h3>Preview of <field name="name" readonly="1" nolabel="1" class="oe_inline"/></h3>
Using sample document <field name="res_id" on_change="on_change_res_id(res_id, context)" class="oe_inline"/> Choose an example <field name="model_id" class="oe_inline" readonly="1"/> record:
<field name="res_id" on_change="on_change_res_id(res_id, context)" class="oe_inline"
style="margin-left: 8px;"/>
<group> <group>
<field name="subject" readonly="1"/> <field name="subject" readonly="1"/>
<field name="email_from" readonly="1" <field name="email_from" readonly="1"
attrs="{'invisible':[('email_from','=',False)]}"/> attrs="{'invisible':[('email_from','=',False)]}"/>
<field name="email_to" readonly="1"/> <field name="partner_ids" widget="many2many_tags" readonly="1"/>
<field name="partner_to" readonly="1"/> <field name="email_to" readonly="1"
attrs="{'invisible':[('email_to','=',False)]}"/>
<field name="email_cc" readonly="1" <field name="email_cc" readonly="1"
attrs="{'invisible':[('email_cc','=',False)]}"/> attrs="{'invisible':[('email_cc','=',False)]}"/>
<field name="reply_to" readonly="1" <field name="reply_to" readonly="1"
@ -23,6 +26,7 @@
</group> </group>
<field name="body_html" widget="html" readonly="1" <field name="body_html" widget="html" readonly="1"
nolabel="1" options='{"safe": True}'/> nolabel="1" options='{"safe": True}'/>
<field name="attachment_ids" widget="many2many_binary" radonly="1"/>
</form> </form>
</field> </field>
</record> </record>
@ -30,10 +34,11 @@
<record id="wizard_email_template_preview" model="ir.actions.act_window"> <record id="wizard_email_template_preview" model="ir.actions.act_window">
<field name="name">Template Preview</field> <field name="name">Template Preview</field>
<field name="res_model">email_template.preview</field> <field name="res_model">email_template.preview</field>
<field name="src_model">email_template.preview</field> <field name="src_model">email.template</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">form</field> <field name="view_mode">form</field>
<field name="view_id" ref="email_template_preview_form"/>
<field name="auto_refresh" eval="1" /> <field name="auto_refresh" eval="1" />
<field name="target">new</field> <field name="target">new</field>
<field name="context">{'template_id':active_id}</field> <field name="context">{'template_id':active_id}</field>

View File

@ -42,7 +42,8 @@ class mail_compose_message(osv.TransientModel):
_inherit = 'mail.compose.message' _inherit = 'mail.compose.message'
def default_get(self, cr, uid, fields, context=None): def default_get(self, cr, uid, fields, context=None):
""" Override to pre-fill the data when having a template in single-email mode """ """ Override to pre-fill the data when having a template in single-email mode
and not going through the view: the on_change is not called in that case. """
if context is None: if context is None:
context = {} context = {}
res = super(mail_compose_message, self).default_get(cr, uid, fields, context=context) res = super(mail_compose_message, self).default_get(cr, uid, fields, context=context)
@ -50,19 +51,13 @@ class mail_compose_message(osv.TransientModel):
res.update( res.update(
self.onchange_template_id( self.onchange_template_id(
cr, uid, [], context['default_template_id'], res.get('composition_mode'), cr, uid, [], context['default_template_id'], res.get('composition_mode'),
res.get('model'), res.get('res_id', context.get('active_id')), context=context res.get('model'), res.get('res_id'), context=context
)['value'] )['value']
) )
return res return res
_columns = { _columns = {
'template_id': fields.many2one('email.template', 'Use template', select=True), 'template_id': fields.many2one('email.template', 'Use template', select=True),
'partner_to': fields.char('To (Partner IDs)',
help="Comma-separated list of recipient partners ids (placeholders may be used here)"),
'email_to': fields.char('To (Emails)',
help="Comma-separated recipient addresses (placeholders may be used here)",),
'email_cc': fields.char('Cc (Emails)',
help="Carbon copy recipients (placeholders may be used here)"),
} }
def send_mail(self, cr, uid, ids, context=None): def send_mail(self, cr, uid, ids, context=None):
@ -92,14 +87,13 @@ class mail_compose_message(osv.TransientModel):
""" - mass_mailing: we cannot render, so return the template values """ - mass_mailing: we cannot render, so return the template values
- normal mode: return rendered values """ - normal mode: return rendered values """
if template_id and composition_mode == 'mass_mail': if template_id and composition_mode == 'mass_mail':
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'mail_server_id'] fields = ['subject', 'body_html', 'email_from', 'reply_to', 'attachment_ids', 'mail_server_id']
template_values = self.pool.get('email.template').read(cr, uid, template_id, fields, context) template_values = self.pool.get('email.template').read(cr, uid, template_id, fields, context)
values = dict((field, template_values[field]) for field in fields if template_values.get(field)) values = dict((field, template_values[field]) for field in fields if template_values.get(field))
elif template_id: elif template_id:
values = self.generate_email_for_composer_batch(cr, uid, template_id, [res_id], context=context)[res_id] values = self.generate_email_for_composer_batch(cr, uid, template_id, [res_id], context=context)[res_id]
# transform attachments into attachment_ids; not attached to the document because this will # transform attachments into attachment_ids; not attached to the document because this will
# be done further in the posting process, allowing to clean database if email not send # be done further in the posting process, allowing to clean database if email not send
values['attachment_ids'] = values.pop('attachment_ids', [])
ir_attach_obj = self.pool.get('ir.attachment') ir_attach_obj = self.pool.get('ir.attachment')
for attach_fname, attach_datas in values.pop('attachments', []): for attach_fname, attach_datas in values.pop('attachments', []):
data_attach = { data_attach = {
@ -110,7 +104,7 @@ class mail_compose_message(osv.TransientModel):
'res_id': 0, 'res_id': 0,
'type': 'binary', # override default_type from context, possibly meant for another model! 'type': 'binary', # override default_type from context, possibly meant for another model!
} }
values['attachment_ids'].append(ir_attach_obj.create(cr, uid, data_attach, context=context)) values.setdefault('attachment_ids', list()).append(ir_attach_obj.create(cr, uid, data_attach, context=context))
else: else:
values = self.default_get(cr, uid, ['subject', 'body', 'email_from', 'email_to', 'email_cc', 'partner_to', 'reply_to', 'attachment_ids', 'mail_server_id'], context=context) values = self.default_get(cr, uid, ['subject', 'body', 'email_from', 'email_to', 'email_cc', 'partner_to', 'reply_to', 'attachment_ids', 'mail_server_id'], context=context)
@ -148,47 +142,29 @@ class mail_compose_message(osv.TransientModel):
# Wizard validation and send # Wizard validation and send
#------------------------------------------------------ #------------------------------------------------------
def _get_or_create_partners_from_values(self, cr, uid, rendered_values, context=None):
""" Check for email_to, email_cc, partner_to """
partner_ids = []
mails = tools.email_split(rendered_values.pop('email_to', '')) + tools.email_split(rendered_values.pop('email_cc', ''))
for mail in mails:
partner_id = self.pool.get('res.partner').find_or_create(cr, uid, mail, context=context)
partner_ids.append(partner_id)
partner_to = rendered_values.pop('partner_to', '')
if partner_to:
# placeholders could generate '', 3, 2 due to some empty field values
tpl_partner_ids = [pid for pid in partner_to.split(',') if pid]
partner_ids += self.pool['res.partner'].exists(cr, SUPERUSER_ID, tpl_partner_ids, context=context)
return partner_ids
def generate_email_for_composer_batch(self, cr, uid, template_id, res_ids, context=None, fields=None): def generate_email_for_composer_batch(self, cr, uid, template_id, res_ids, context=None, fields=None):
""" Call email_template.generate_email(), get fields relevant for """ Call email_template.generate_email(), get fields relevant for
mail.compose.message, transform email_cc and email_to into partner_ids """ mail.compose.message, transform email_cc and email_to into partner_ids """
# filter template values if context is None:
context = {}
if fields is None: if fields is None:
fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'mail_server_id'] fields = ['subject', 'body_html', 'email_from', 'email_to', 'partner_to', 'email_cc', 'reply_to', 'attachment_ids', 'mail_server_id']
returned_fields = fields + ['attachments'] returned_fields = fields + ['partner_ids', 'attachments']
values = dict.fromkeys(res_ids, False) values = dict.fromkeys(res_ids, False)
template_values = self.pool.get('email.template').generate_email_batch(cr, uid, template_id, res_ids, fields=fields, context=context) ctx = dict(context, tpl_partners_only=True)
template_values = self.pool.get('email.template').generate_email_batch(cr, uid, template_id, res_ids, fields=fields, context=ctx)
for res_id in res_ids: for res_id in res_ids:
res_id_values = dict((field, template_values[res_id][field]) for field in returned_fields if template_values[res_id].get(field)) res_id_values = dict((field, template_values[res_id][field]) for field in returned_fields if template_values[res_id].get(field))
res_id_values['body'] = res_id_values.pop('body_html', '') res_id_values['body'] = res_id_values.pop('body_html', '')
# transform email_to, email_cc into partner_ids
ctx = dict((k, v) for k, v in (context or {}).items() if not k.startswith('default_'))
partner_ids = self._get_or_create_partners_from_values(cr, uid, res_id_values, context=ctx)
# legacy template behavior: void values do not erase existing values and the
# related key is removed from the values dict
if partner_ids:
res_id_values['partner_ids'] = list(partner_ids)
values[res_id] = res_id_values values[res_id] = res_id_values
return values return values
def render_message_batch(self, cr, uid, wizard, res_ids, context=None): def render_message_batch(self, cr, uid, wizard, res_ids, context=None):
""" Override to handle templates. """ """ Override to handle templates. """
# generate composer values
composer_values = super(mail_compose_message, self).render_message_batch(cr, uid, wizard, res_ids, context)
# generate template-based values # generate template-based values
if wizard.template_id: if wizard.template_id:
template_values = self.generate_email_for_composer_batch( template_values = self.generate_email_for_composer_batch(
@ -196,17 +172,18 @@ class mail_compose_message(osv.TransientModel):
fields=['email_to', 'partner_to', 'email_cc', 'attachment_ids', 'mail_server_id'], fields=['email_to', 'partner_to', 'email_cc', 'attachment_ids', 'mail_server_id'],
context=context) context=context)
else: else:
template_values = dict.fromkeys(res_ids, dict()) template_values = {}
# generate composer values
composer_values = super(mail_compose_message, self).render_message_batch(cr, uid, wizard, res_ids, context)
for res_id in res_ids: for res_id in res_ids:
# remove attachments from template values as they should not be rendered if template_values.get(res_id):
template_values[res_id].pop('attachment_ids', None) # recipients are managed by the template
# remove some keys from composer that are readonly composer_values[res_id].pop('partner_ids')
composer_values[res_id].pop('email_to', None) composer_values[res_id].pop('email_to')
composer_values[res_id].pop('email_cc', None) composer_values[res_id].pop('email_cc')
composer_values[res_id].pop('partner_to', None) # remove attachments from template values as they should not be rendered
template_values[res_id].pop('attachment_ids', None)
else:
template_values[res_id] = dict()
# update template values by composer values # update template values by composer values
template_values[res_id].update(composer_values[res_id]) template_values[res_id].update(composer_values[res_id])
return template_values return template_values

View File

@ -7,22 +7,6 @@
<field name="model">mail.compose.message</field> <field name="model">mail.compose.message</field>
<field name="inherit_id" ref="mail.email_compose_message_wizard_form"/> <field name="inherit_id" ref="mail.email_compose_message_wizard_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='subject']" position="after">
<label string="Template Recipients" for="partner_to"
groups="base.group_no_one"
attrs="{'invisible':[('composition_mode', '!=', 'mass_mail')]}"/>
<div groups="base.group_no_one" name="template_recipients"
attrs="{'invisible':[('composition_mode', '!=', 'mass_mail')]}">
<group class="oe_grey">
<!-- <label string="Partners" for="partner_to"/> -->
<field name="partner_to" readonly="1"/>
<!-- <label string="Email To" for="email_to"/> -->
<field name="email_to" readonly="1"/>
<!-- <label string="Email CC" for="email_cc"/> -->
<field name="email_cc" readonly="1"/>
</group>
</div>
</xpath>
<xpath expr="//footer" position="inside"> <xpath expr="//footer" position="inside">
<group class="oe_right oe_form" col="1"> <group class="oe_right oe_form" col="1">
<div>Use template <div>Use template

View File

@ -185,7 +185,7 @@ class event_event(osv.osv):
'country_id': fields.related('address_id', 'country_id', 'country_id': fields.related('address_id', 'country_id',
type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}, store=True), type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}, store=True),
'description': fields.html( 'description': fields.html(
'Description', readonly=False, 'Description', readonly=False, translate=True,
states={'done': [('readonly', True)]}, states={'done': [('readonly', True)]},
oldname='note'), oldname='note'),
'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),

View File

@ -168,7 +168,7 @@ class event_ticket(osv.osv):
return res return res
_columns = { _columns = {
'name': fields.char('Name', size=64, required=True), 'name': fields.char('Name', size=64, required=True, translate=True),
'event_id': fields.many2one('event.event', "Event", required=True, ondelete='cascade'), 'event_id': fields.many2one('event.event', "Event", required=True, ondelete='cascade'),
'product_id': fields.many2one('product.product', 'Product', required=True, domain=[("event_type_id", "!=", False)]), 'product_id': fields.many2one('product.product', 'Product', required=True, domain=[("event_type_id", "!=", False)]),
'registration_ids': fields.one2many('event.registration', 'event_ticket_id', 'Registrations'), 'registration_ids': fields.one2many('event.registration', 'event_ticket_id', 'Registrations'),
@ -222,4 +222,4 @@ class event_registration(osv.osv):
_constraints = [ _constraints = [
(_check_ticket_seats_limit, 'No more available tickets.', ['event_ticket_id','nb_register','state']), (_check_ticket_seats_limit, 'No more available tickets.', ['event_ticket_id','nb_register','state']),
] ]

View File

@ -287,30 +287,33 @@ class gamification_goal(osv.Model):
field_date_name = definition.field_date_id and definition.field_date_id.name or False field_date_name = definition.field_date_id and definition.field_date_id.name or False
if definition.computation_mode == 'count' and definition.batch_mode: if definition.computation_mode == 'count' and definition.batch_mode:
# batch mode, trying to do as much as possible in one request
general_domain = safe_eval(definition.domain) general_domain = safe_eval(definition.domain)
# goal_distinct_values = {goal.id: safe_eval(definition.batch_user_expression, {'user': goal.user_id}) for goal in goals}
field_name = definition.batch_distinctive_field.name field_name = definition.batch_distinctive_field.name
# general_domain.append((field_name, 'in', list(set(goal_distinct_values.keys()))))
subqueries = {} subqueries = {}
for goal in goals: for goal in goals:
start_date = field_date_name and goal.start_date or False start_date = field_date_name and goal.start_date or False
end_date = field_date_name and goal.end_date or False end_date = field_date_name and goal.end_date or False
subqueries.setdefault((start_date, end_date), {}).update({goal.id:safe_eval(definition.batch_user_expression, {'user': goal.user_id})}) subqueries.setdefault((start_date, end_date), {}).update({goal.id:safe_eval(definition.batch_user_expression, {'user': goal.user_id})})
# the global query should be split by time periods (especially for recurrent goals)
for (start_date, end_date), query_goals in subqueries.items(): for (start_date, end_date), query_goals in subqueries.items():
subquery_domain = list(general_domain) subquery_domain = list(general_domain)
subquery_domain.append((field_name, 'in', list(set(query_goals.values())))) subquery_domain.append((field_name, 'in', list(set(query_goals.values()))))
if start_date: if start_date:
subquery_domain.append((field_date_name, '>=', start_date)) subquery_domain.append((field_date_name, '>=', start_date))
if end_date: if end_date:
subquery_domain.append((field_date_name, '>=', end_date)) subquery_domain.append((field_date_name, '<=', end_date))
user_values = obj.read_group(cr, uid, subquery_domain, fields=[field_name], groupby=[field_name], context=context)
if field_name == 'id':
# grouping on id does not work and is similar to search anyway
user_ids = obj.search(cr, uid, subquery_domain, context=context)
user_values = [{'id': user_id, 'id_count': 1} for user_id in user_ids]
else:
user_values = obj.read_group(cr, uid, subquery_domain, fields=[field_name], groupby=[field_name], context=context)
# user_values has format of read_group: [{'partner_id': 42, 'partner_id_count': 3},...]
for goal in [g for g in goals if g.id in query_goals.keys()]: for goal in [g for g in goals if g.id in query_goals.keys()]:
for user_value in user_values: for user_value in user_values:
# return format of read_group: [{'partner_id': 42, 'partner_id_count': 3},...]
queried_value = field_name in user_value and user_value[field_name] or False queried_value = field_name in user_value and user_value[field_name] or False
if isinstance(queried_value, tuple) and len(queried_value) == 2 and isinstance(queried_value[0], (int, long)): if isinstance(queried_value, tuple) and len(queried_value) == 2 and isinstance(queried_value[0], (int, long)):
queried_value = queried_value[0] queried_value = queried_value[0]

View File

@ -61,13 +61,12 @@ class res_users_gamification_group(osv.Model):
challenge_obj.generate_goals_from_challenge(cr, SUPERUSER_ID, challenge_ids, context=context) challenge_obj.generate_goals_from_challenge(cr, SUPERUSER_ID, challenge_ids, context=context)
return write_res return write_res
# def get_goals_todo_info(self, cr, uid, context=None): def get_serialised_gamification_summary(self, cr, uid, excluded_categories=None, context=None):
return self._serialised_goals_summary(cr, uid, user_id=uid, excluded_categories=excluded_categories, context=context)
def get_serialised_gamification_summary(self, cr, uid, context=None): def _serialised_goals_summary(self, cr, uid, user_id, excluded_categories=None, context=None):
return self._serialised_goals_summary(cr, uid, user_id=uid, context=context)
def _serialised_goals_summary(self, cr, uid, user_id, context=None):
"""Return a serialised list of goals assigned to the user, grouped by challenge """Return a serialised list of goals assigned to the user, grouped by challenge
:excluded_categories: list of challenge categories to exclude in search
[ [
{ {
@ -81,9 +80,11 @@ class res_users_gamification_group(osv.Model):
""" """
all_goals_info = [] all_goals_info = []
challenge_obj = self.pool.get('gamification.challenge') challenge_obj = self.pool.get('gamification.challenge')
domain = [('user_ids', 'in', uid), ('state', '=', 'inprogress')]
if excluded_categories and isinstance(excluded_categories, list):
domain.append(('category', 'not in', excluded_categories))
user = self.browse(cr, uid, uid, context=context) user = self.browse(cr, uid, uid, context=context)
challenge_ids = challenge_obj.search(cr, uid, [('user_ids', 'in', uid), ('state', '=', 'inprogress')], context=context) challenge_ids = challenge_obj.search(cr, uid, domain, context=context)
for challenge in challenge_obj.browse(cr, uid, challenge_ids, context=context): for challenge in challenge_obj.browse(cr, uid, challenge_ids, context=context):
# serialize goals info to be able to use it in javascript # serialize goals info to be able to use it in javascript
lines = challenge_obj._get_serialized_challenge_lines(cr, uid, challenge, user_id, restrict_top=MAX_VISIBILITY_RANKING, context=context) lines = challenge_obj._get_serialized_challenge_lines(cr, uid, challenge, user_id, restrict_top=MAX_VISIBILITY_RANKING, context=context)

View File

@ -81,12 +81,12 @@
</page> </page>
<page string="Reward"> <page string="Reward">
<group> <group>
<field name="reward_id"/> <field name="reward_id" attrs="{'required': [('reward_realtime','=', True)]}" />
<field name="reward_first_id" /> <field name="reward_first_id" />
<field name="reward_second_id" attrs="{'invisible': [('reward_first_id','=', False)]}" /> <field name="reward_second_id" attrs="{'invisible': [('reward_first_id','=', False)]}" />
<field name="reward_third_id" attrs="{'invisible': ['|',('reward_first_id','=', False),('reward_second_id','=', False)]}" /> <field name="reward_third_id" attrs="{'invisible': ['|',('reward_first_id','=', False),('reward_second_id','=', False)]}" />
<field name="reward_failure" attrs="{'invisible': [('reward_first_id','=', False)]}" /> <field name="reward_failure" attrs="{'invisible': [('reward_first_id','=', False)]}" />
<field name="reward_realtime" attrs="{'readonly': [('reward_id','=', False)], 'required': [('reward_id','!=', False)]}" /> <field name="reward_realtime" />
</group> </group>
<div class="oe_grey"> <div class="oe_grey">
<p>Badges are granted when a challenge is finished. This is either at the end of a running period (eg: end of the month for a monthly challenge), at the end date of a challenge (if no periodicity is set) or when the challenge is manually closed.</p> <p>Badges are granted when a challenge is finished. This is either at the end of a running period (eg: end of the month for a monthly challenge), at the end date of a challenge (if no periodicity is set) or when the challenge is manually closed.</p>

View File

@ -43,6 +43,7 @@ actions(Sign in/Sign out) performed by them.
'wizard/hr_attendance_byweek_view.xml', 'wizard/hr_attendance_byweek_view.xml',
'wizard/hr_attendance_error_view.xml', 'wizard/hr_attendance_error_view.xml',
'res_config_view.xml', 'res_config_view.xml',
'views/report_attendanceerrors.xml',
], ],
'demo': ['hr_attendance_demo.xml'], 'demo': ['hr_attendance_demo.xml'],
'test': [ 'test': [
@ -51,10 +52,10 @@ actions(Sign in/Sign out) performed by them.
], ],
'installable': True, 'installable': True,
'auto_install': False, 'auto_install': False,
#web #web
"js": ["static/src/js/attendance.js"], "js": ["static/src/js/attendance.js"],
'qweb' : ["static/src/xml/attendance.xml"], 'qweb': ["static/src/xml/attendance.xml"],
'css' : ["static/src/css/slider.css"], 'css': ["static/src/css/slider.css"],
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,8 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
<report
<report auto="False" id="attendance_error_report" keyword="client_print_multi" menu="False" model="hr.employee" multi="True" name="report.hr.timesheet.attendance.error" rml="hr_attendance/report/attendance_errors.rml" string="Attendance Error Report"/> id="action_report_hrattendanceerror"
model="hr.employee"
string="Attendance Error Report"
report_type="qweb-pdf"
name="hr_attendance.report_attendanceerrors"
file="hr_attendance.report_attendanceerrors"
/>
</data> </data>
</openerp> </openerp>

View File

@ -21,9 +21,10 @@
import datetime import datetime
import time import time
from openerp.osv import osv
from openerp.report import report_sxw from openerp.report import report_sxw
class attendance_print(report_sxw.rml_parse): class attendance_print(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context): def __init__(self, cr, uid, name, context):
@ -39,7 +40,6 @@ class attendance_print(report_sxw.rml_parse):
emp_obj_list = self.pool.get('hr.employee').browse(self.cr, self.uid, emp_ids) emp_obj_list = self.pool.get('hr.employee').browse(self.cr, self.uid, emp_ids)
return emp_obj_list return emp_obj_list
def _lst(self, employee_id, dt_from, dt_to, max, *args): def _lst(self, employee_id, dt_from, dt_to, max, *args):
self.cr.execute("select name as date, create_date, action, create_date-name as delay from hr_attendance where employee_id=%s and to_char(name,'YYYY-mm-dd')<=%s and to_char(name,'YYYY-mm-dd')>=%s and action IN (%s,%s) order by name", (employee_id, dt_to, dt_from, 'sign_in', 'sign_out')) self.cr.execute("select name as date, create_date, action, create_date-name as delay from hr_attendance where employee_id=%s and to_char(name,'YYYY-mm-dd')<=%s and to_char(name,'YYYY-mm-dd')>=%s and action IN (%s,%s) order by name", (employee_id, dt_to, dt_from, 'sign_in', 'sign_out'))
res = self.cr.dictfetchall() res = self.cr.dictfetchall()
@ -75,7 +75,11 @@ class attendance_print(report_sxw.rml_parse):
} }
return [result_dict] return [result_dict]
report_sxw.report_sxw('report.hr.attendance.error', 'hr.employee', 'addons/hr_attendance/report/attendance_errors.rml', parser=attendance_print, header='internal')
class report_hr_attendanceerrors(osv.AbstractModel):
_name = 'report.hr_attendance.report_attendanceerrors'
_inherit = 'report.abstract_report'
_template = 'hr_attendance.report_attendanceerrors'
_wrapped_report_class = attendance_print
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,137 +0,0 @@
<?xml version="1.0"?>
<document filename="Attendance Errors.pdf">
<template title="Attendance Errors" author="OpenERP S.A.(sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="28.0" y1="26.0" width="536" height="784"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEABOVE" colorName="#000000" 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"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" 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_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="12.0" spaceAfter="6.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_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" 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_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_Centre_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Footer" fontName="Helvetica"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="Horizontal Line" fontName="Helvetica" 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" 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_tblheader_General_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" 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_default_address" fontName="Helvetica" fontSize="10.0" leading="13" alignment="LEFT" 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"/>
<images/>
</stylesheet>
<story>
<para style="terp_default_8">[[ repeatIn(get_employees(data['form']['emp_ids']),'employee') ]]</para>
<para style="terp_header_Centre">Attendance Errors</para>
<para style="terp_tblheader_Details">[[ employee.name ]]</para>
<blockTable colWidths="107.0,107.0,107.0,107.0,107.0" style="Table1">
<tr>
<td>
<para style="terp_tblheader_Details">Operation</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Date Signed</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Date Recorded</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Delay</para>
</td>
<td>
<para style="terp_tblheader_Details_Centre">Min Delay</para>
</td>
</tr>
</blockTable>
<section>
<para style="terp_default_8">[[ repeatIn(lst(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']), 'att') ]]</para>
<blockTable colWidths="107.0,107.0,107.0,107.0,107.0" style="Table2">
<tr>
<td>
<para style="terp_default_9">[[ att['action'] ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ formatLang(att['date'],date_time=True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ formatLang(att['create_date'],date_time=True) ]] </para>
</td>
<td>
<para style="terp_default_Centre_9">[[ att['delay'] ]]</para>
</td>
<td>
<para style="terp_default_Centre_9">[[ att['delay2'] ]]</para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="322.0,108.0,107.0" style="Table3">
<tr>
<td>
<para style="terp_default_Bold_9">Total period:[[ repeatIn(total(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay']),'total') ]]</para>
</td>
<td>
<para style="terp_default_Centre_9_Bold">[[ total['total'] ]]</para>
</td>
<td>
<para style="terp_default_Centre_9_Bold">[[ total['total2'] ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_9">(*) A positive delay means that the employee worked less than recorded.</para>
<para style="terp_default_9">(*) A negative delay means that the employee worked more than encoded.</para>
</story>
</document>

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_attendanceerrors">
<t t-call="report.html_container">
<t t-foreach="get_employees(data['form']['emp_ids'])" t-as="employee">
<t t-call="report.internal_layout">
<div class="page">
<div class="oe_structure"/>
<h2>Attendance Errors: <span t-esc="employee.name"/></h2>
<table class="table table-condensed mt32">
<thead>
<tr>
<th>Operation</th>
<th>Date Signed</th>
<th>Date Recorded</th>
<th>Delay</th>
<th>Min Delay</th>
</tr>
</thead>
<tbody>
<tr t-foreach="lst(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay'])" t-as="att">
<td><span t-esc="att['action']"/></td>
<td><span t-esc="formatLang(att['date'],date_time=True)"/></td>
<td><span t-esc="formatLang(att['create_date'],date_time=True)"/></td>
<td><span t-esc="att['delay']"/></td>
<td><span t-esc="att['delay2']"/></td>
</tr>
<tr class="border-black" t-foreach="total(employee.id,data['form']['init_date'], data['form']['end_date'], data['form']['max_delay'])" t-as="total">
<td colspan="3"><strong>Total period</strong></td>
<td><strong t-esc="total['total']"/></td>
<td><strong t-esc="total['total2']"/></td>
</tr>
</tbody>
</table>
<p>(*) A positive delay means that the employee worked less than recorded.<br/>
(*) A negative delay means that the employee worked more than encoded.</p>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -23,6 +23,7 @@ import time
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
class hr_attendance_error(osv.osv_memory): class hr_attendance_error(osv.osv_memory):
_name = 'hr.attendance.error' _name = 'hr.attendance.error'
@ -58,11 +59,8 @@ class hr_attendance_error(osv.osv_memory):
'model': 'hr.employee', 'model': 'hr.employee',
'form': data_error 'form': data_error
} }
return { return self.pool['report'].get_action(
'type': 'ir.actions.report.xml', cr, uid, [], 'hr_attendance.report_attendanceerrors', data=datas, context=context
'report_name': 'hr.attendance.error', )
'datas': datas,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -59,6 +59,7 @@ This module also uses analytic accounting and is compatible with the invoice on
'report/hr_expense_report_view.xml', 'report/hr_expense_report_view.xml',
'board_hr_expense_view.xml', 'board_hr_expense_view.xml',
'hr_expense_installer_view.xml', 'hr_expense_installer_view.xml',
'views/report_expense.xml',
], ],
'demo': ['hr_expense_demo.xml'], 'demo': ['hr_expense_demo.xml'],
'test': [ 'test': [
@ -69,4 +70,5 @@ This module also uses analytic accounting and is compatible with the invoice on
'auto_install': False, 'auto_install': False,
'application': True, 'application': True,
} }
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,8 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data> <data>
<report
<report auto="False" id="hr_expenses" model="hr.expense.expense" name="hr.expense" rml="hr_expense/report/expense.rml" string="HR expenses"/> id="action_report_hr_expense"
string="HR Expense"
model="hr.expense.expense"
report_type="qweb-pdf"
name="hr_expense.report_expense"
file="hr_expense.report_expense"
/>
</data> </data>
</openerp> </openerp>

View File

@ -19,8 +19,6 @@
# #
############################################################################## ##############################################################################
import expense
import hr_expense_report import hr_expense_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,37 +0,0 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 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 datetime
import time
from openerp.report import report_sxw
class expense(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context):
super(expense, self).__init__(cr, uid, name, context=context)
self.localcontext.update({'time': time, })
report_sxw.report_sxw('report.hr.expense', 'hr.expense.expense', 'addons/hr_expense/report/expense.rml',parser=expense)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,302 +0,0 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template title="Expenses" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="16.0" y1="57.0" width="522" height="728"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table_employee_ref_header">
<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="LINEAFTER" 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="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="Table_employee_ref_content">
<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="LINEAFTER" 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="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="Table_hr_expense_line_header">
<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="Table_expense_line">
<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="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"/>
</blockTableStyle>
<blockTableStyle id="Table_Final_total">
<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"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="Footer" fontName="Helvetica"/>
<paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.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_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.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_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.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_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" 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="12.0" leading="15" 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_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_centre_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" 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_9_bold_right" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_italic_8" fontName="Helvetica-Oblique" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<pto>
<pto_header>
<blockTable colWidths="60.0,200.0,50.0,70.0,70.0,85.0" style="Table_hr_expense_line_header">
<tr>
<td>
<para style="terp_tblheader_Details">Date</para>
</td>
<td>
<para style="terp_tblheader_Details">Name</para>
</td>
<td>
<para style="terp_tblheader_Details">Ref.</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Unit Price</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Qty</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Price</para>
</td>
</tr>
</blockTable>
</pto_header>
<para style="terp_default_8">[[ repeatIn(objects,'o') ]]</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_header_Centre">HR Expenses</para>
<para style="terp_tblheader_General_Centre">
<font face="Helvetica" size="9.0">[[ o.name or '' ]]</font>
</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="130.5,130.5,130.5,130.5" style="Table_employee_ref_header">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Employee</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Date</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Description</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Validated By</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="130.5,130.5,130.5,130.5" style="Table_employee_ref_content">
<tr>
<td>
<para style="terp_default_Centre_8">[[ o.employee_id.name ]] </para>
</td>
<td>
<para style="terp_default_Centre_8">[[ formatLang(o.date,date=True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.name ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ o.user_valid.name ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="60.0,200.0,50.0,70.0,70.0,85.0" style="Table_hr_expense_line_header">
<tr>
<td>
<para style="terp_tblheader_Details">Date</para>
</td>
<td>
<para style="terp_tblheader_Details">Name</para>
</td>
<td>
<para style="terp_tblheader_Details">Ref.</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Unit Price</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Qty</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Price</para>
</td>
</tr>
</blockTable>
<para style="terp_default_1">
<font color="white"> </font>
</para>
<section>
<para style="terp_default_8">[[ repeatIn(o.line_ids,'line') ]]</para>
<blockTable colWidths="60.0,200.0,50.0,70.0,70.0,85.0" style="Table_expense_line">
<tr>
<td>
<para style="terp_default_9">[[ formatLang(line.date_value,date=True) ]]</para>
</td>
<td>
<para style="terp_default_9">[[ line.name or '' ]] [[ line.description or '' ]]</para>
</td>
<td>
<para style="terp_default_9">[[ line.ref or '' ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(line.unit_amount) ]] </para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(line.unit_quantity) ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ formatLang(line.total_amount, currency_obj=o.currency_id) ]] </para>
</td>
</tr>
<tr>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_italic_8">[[ line.analytic_account and line.analytic_account.complete_name or removeParentNode('tr') ]]</para>
</td>
<td>
<para style="terp_default_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="365.0,70.0,100.0" style="Table_Final_total">
<tr>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_tblheader_Details">Total:</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">[[ formatLang(o.amount, currency_obj=o.currency_id) ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">[[ o.note or '' ]]</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">Certified honest and conform,</para>
<para style="terp_default_9">(Date and signature)</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">
<font color="white"> </font>
</para>
<para style="terp_default_9">This document must be dated and signed for reimbursement</para>
</pto>
</story>
</document>

View File

@ -32,11 +32,3 @@
!python {model: hr.expense.expense}: | !python {model: hr.expense.expense}: |
duplicate_id = self.copy(cr, uid, ref('sep_expenses'), context=context) duplicate_id = self.copy(cr, uid, ref('sep_expenses'), context=context)
self.expense_canceled(cr, uid, [duplicate_id]) self.expense_canceled(cr, uid, [duplicate_id])
-
I print a report of the expenses.
-
!python {model: hr.expense.expense}: |
data, format = self.print_report(cr, uid, [ref('hr_expense.sep_expenses')], 'hr.expense', {}, {})
if openerp.tools.config['test_report_directory']:
import os
file(os.path.join(openerp.tools.config['test_report_directory'], 'hr_expense-report.'+format), 'wb+').write(data)

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_expense">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>HR Expenses</h2>
<div class="row mt32 mb32">
<div class="col-xs-3">
<strong>Employee:</strong>
<p t-field="o.employee_id.name"/>
</div>
<div class="col-xs-3">
<strong>Date:</strong>
<p t-field="o.date"/>
</div>
<div class="col-xs-3">
<strong>Description:</strong>
<p t-field="o.name"/>
</div>
<div class="col-xs-3">
<strong>Validated By:</strong>
<p t-field="o.user_valid"/>
</div>
</div>
<table class="table table-condensed">
<thead>
<tr>
<th>Date</th>
<th>Name</th>
<th class="text-center">Ref.</th>
<th>Unit Price</th>
<th class="text-center">Qty</th>
<th class="text-right">Price</th>
</tr>
</thead>
<tbody>
<tr t-foreach="o.line_ids" t-as="line">
<td><span t-field="line.date_value"/></td>
<td>
<span t-field="line.name"/>
<span t-field="line.description"/><br/>
<span t-field="line.analytic_account.complete_name"/>
</td>
<td style="text-center">
<span t-field="line.ref"/>
</td>
<td>
<span t-field="line.unit_amount"/>
</td>
<td class="text-center">
<span t-field="line.unit_quantity"/>
</td>
<td class="text-right">
<span t-field="line.total_amount"
t-field-options='{"widget": "monetary", "display_currency":"o.currency_id"}'/>
</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col-xs-4 pull-right">
<table class="table table-condensed">
<tr class="border-black">
<td><strong>Total</strong></td>
<td class="text-right">
<span t-field="o.amount"
t-field-options='{"widget": "monetary", "display_currency": "o.currency_id"}'/>
</td>
</tr>
</table>
</div>
</div>
<p t-field="o.note"/>
<p>Certified honest and conform,<br/>(Date and signature).<br/><br/></p>
<p>This document must be dated and signed for reimbursement.</p>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -19,6 +19,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
############################################################################## ##############################################################################
{ {
'name': 'Payroll', 'name': 'Payroll',
'version': '1.0', 'version': '1.0',
@ -37,9 +38,14 @@ Generic Payroll system.
* Monthly Payroll Register * Monthly Payroll Register
* Integrated with Holiday Management * Integrated with Holiday Management
""", """,
'author':'OpenERP SA', 'author': 'OpenERP SA',
'website':'http://www.openerp.com', 'website': 'http://www.openerp.com',
'images': ['images/hr_company_contributions.jpeg','images/hr_salary_heads.jpeg','images/hr_salary_structure.jpeg','images/hr_employee_payslip.jpeg'], 'images': [
'images/hr_company_contributions.jpeg',
'images/hr_salary_heads.jpeg',
'images/hr_salary_structure.jpeg',
'images/hr_employee_payslip.jpeg'
],
'depends': [ 'depends': [
'hr', 'hr',
'hr_contract', 'hr_contract',
@ -57,12 +63,12 @@ Generic Payroll system.
'security/ir.model.access.csv', 'security/ir.model.access.csv',
'wizard/hr_payroll_contribution_register_report.xml', 'wizard/hr_payroll_contribution_register_report.xml',
'res_config_view.xml', 'res_config_view.xml',
'views/report_contributionregister.xml',
'views/report_payslip.xml',
'views/report_payslipdetails.xml',
], ],
'test': [ 'test': [
'test/payslip.yml', 'test/payslip.yml',
# 'test/payment_advice.yml',
# 'test/payroll_register.yml',
# 'test/hr_payroll_report.yml',
], ],
'demo': ['hr_payroll_demo.xml'], 'demo': ['hr_payroll_demo.xml'],
'installable': True, 'installable': True,

View File

@ -1,31 +1,30 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<openerp> <openerp>
<data> <data>
<report
id="action_contribution_register"
model="hr.contribution.register"
string="PaySlip Lines By Conribution Register"
report_type="qweb-pdf"
name="hr_payroll.report_contributionregister"
file="hr_payroll.report_contributionregister"
menu="False"
/>
<report
id="action_report_payslip"
model="hr.payslip"
string="Payslip"
report_type="qweb-pdf"
name="hr_payroll.report_payslip"
file="hr_payroll.report_payslip"
/>
<report <report
auto="False"
id="payslip_report"
model="hr.payslip"
name="payslip"
rml="hr_payroll/report/report_payslip.rml"
string="Employee PaySlip" />
<report
auto="False"
id="payslip_details_report" id="payslip_details_report"
model="hr.payslip" model="hr.payslip"
name="paylip.details" string="PaySlip Details"
rml="hr_payroll/report/report_payslip_details.rml" report_type="qweb-pdf"
string="PaySlip Details" /> name="hr_payroll.report_payslipdetails"
file="hr_payroll.report_payslipdetails"
<report />
auto="False"
menu="False"
id="contribution_register"
model="hr.contribution.register"
name="contribution.register.lines"
rml="hr_payroll/report/report_contribution_register.rml"
string="PaySlip Lines By Conribution Register" />
</data> </data>
</openerp> </openerp>

View File

@ -24,9 +24,10 @@
import time import time
from datetime import datetime from datetime import datetime
from dateutil import relativedelta from dateutil import relativedelta
from openerp.osv import osv
from openerp.report import report_sxw from openerp.report import report_sxw
class contribution_register_report(report_sxw.rml_parse): class contribution_register_report(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context): def __init__(self, cr, uid, name, context):
super(contribution_register_report, self).__init__(cr, uid, name, context) super(contribution_register_report, self).__init__(cr, uid, name, context)
@ -44,7 +45,6 @@ class contribution_register_report(report_sxw.rml_parse):
return self.regi_total return self.regi_total
def _get_payslip_lines(self, obj): def _get_payslip_lines(self, obj):
payslip_obj = self.pool.get('hr.payslip')
payslip_line = self.pool.get('hr.payslip.line') payslip_line = self.pool.get('hr.payslip.line')
payslip_lines = [] payslip_lines = []
res = [] res = []
@ -69,6 +69,11 @@ class contribution_register_report(report_sxw.rml_parse):
self.regi_total += line.total self.regi_total += line.total
return res return res
report_sxw.report_sxw('report.contribution.register.lines', 'hr.contribution.register', 'hr_payroll/report/report_contribution_register.rml', parser=contribution_register_report)
class wrapped_report_contribution_register(osv.AbstractModel):
_name = 'report.hr_payroll.report_contributionregister'
_inherit = 'report.abstract_report'
_template = 'hr_payroll.report_contributionregister'
_wrapped_report_class = contribution_register_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,234 +0,0 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
</blockTableStyle>
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<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="Table16">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table5">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P2" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P3" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P9" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/>
<paraStyle name="P10" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P11" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P12" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P13" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P14" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P15" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P17" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P18" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<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="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" 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="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<para style="P1">[[repeatIn(objects,'o')]]</para>
<blockTable colWidths="539.0" style="Table1">
<tr>
<td>
<para style="P6">PaySlip Lines by Contribution Register</para>
</td>
</tr>
</blockTable>
<para style="P7">
<font color="white"> </font>
</para>
<para style="P5">
<font color="white"> </font>
</para>
<para style="P16"/>
<blockTable colWidths="254.0,143.0,141.0" style="Table3">
<tr>
<td>
<para style="P17">Register Name</para>
</td>
<td>
<para style="P13">Date From</para>
</td>
<td>
<para style="P14">Date To</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="254.0,143.0,141.0" style="Table4">
<tr>
<td>
<para style="P4">[[ o.name or '']]</para>
</td>
<td>
<para style="P4">[[ data['form']['date_from'] or '']]</para>
</td>
<td>
<para style="P4">[[ data['form']['date_to'] or '' ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_Bold_8"/>
<para style="terp_default_Bold_8">
<font color="white"> </font>
</para>
<para style="P8">
<font color="white"> </font>
</para>
<blockTable colWidths="194.0,35.0,126.0,72.0,43.0,69.0" style="Table2">
<tr>
<td>
<para style="P9">PaySlip Name</para>
</td>
<td>
<para style="P9">Code</para>
</td>
<td>
<para style="P9">Name</para>
</td>
<td>
<para style="P9">Quantity/Rate</para>
</td>
<td>
<para style="P9">Amount</para>
</td>
<td>
<para style="P10">Total </para>
</td>
</tr>
</blockTable>
<para style="P18">
<font color="white"> </font>
</para>
<section>
<para style="P2">[[repeatIn(get_payslip_lines(o),'r') ]]</para>
<blockTable colWidths="194.0,35.0,126.0,72.0,43.0,68.0" style="Table16">
<tr>
<td>
<para style="P12">[[ r.get('payslip_name', False) ]]<font face="Helvetica">[[ r.get('payslip_name', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]]</font></para>
</td>
<td>
<para style="P2">[[ r['code'] ]]</para>
</td>
<td>
<para style="P2">[[ r['name'] ]]</para>
</td>
<td>
<para style="P2">[[ formatLang(r['quantity']) ]]</para>
</td>
<td>
<para style="P2">[[ formatLang(r['amount']) ]]</para>
</td>
<td>
<para style="P3">[[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]]</para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="397.0,31.0,111.0" style="Table5">
<tr>
<td>
<para style="P15">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P15">Total:</para>
</td>
<td>
<para style="P11">[[ formatLang(sum_total(), currency_obj = o.company_id and o.company_id.currency_id)]]</para>
</td>
</tr>
</blockTable>
<para style="Standard">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -21,8 +21,9 @@
# #
############################################################################## ##############################################################################
from openerp.osv import osv
from openerp.report import report_sxw from openerp.report import report_sxw
from openerp.tools import amount_to_text_en
class payslip_report(report_sxw.rml_parse): class payslip_report(report_sxw.rml_parse):
@ -37,12 +38,17 @@ class payslip_report(report_sxw.rml_parse):
res = [] res = []
ids = [] ids = []
for id in range(len(obj)): for id in range(len(obj)):
if obj[id].appears_on_payslip == True: if obj[id].appears_on_payslip is True:
ids.append(obj[id].id) ids.append(obj[id].id)
if ids: if ids:
res = payslip_line.browse(self.cr, self.uid, ids) res = payslip_line.browse(self.cr, self.uid, ids)
return res return res
report_sxw.report_sxw('report.payslip', 'hr.payslip', 'hr_payroll/report/report_payslip.rml', parser=payslip_report)
class wrapped_report_payslip(osv.AbstractModel):
_name = 'report.hr_payroll.report_payslip'
_inherit = 'report.abstract_report'
_template = 'hr_payroll.report_payslip'
_wrapped_report_class = payslip_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,340 +0,0 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
</blockTableStyle>
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table5">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table6">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table8">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table9">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table13">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="P2" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P3" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P10" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P11" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P12" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P13" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/>
<paraStyle name="P14" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P15" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<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="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" 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="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<para style="P2">[[repeatIn(objects,'o')]]</para>
<blockTable colWidths="539.0" style="Table1">
<tr>
<td>
<para style="P7">Pay Slip</para>
</td>
</tr>
</blockTable>
<para style="terp_header_Centre">
<font face="Helvetica" size="6.0">[[o.credit_note==False and removeParentNode('para')]]</font>
<font face="Helvetica-Bold" size="14.0">Credit</font>
<font face="Helvetica" size="14.0"/>
<font face="Helvetica-Bold" size="14.0">Note</font>
</para>
<para style="P8">([[o.name or removeParentNode('para')]])</para>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table2">
<tr>
<td>
<para style="P15">Name</para>
</td>
<td>
<para style="P15">[[o.employee_id.name]]</para>
</td>
<td>
<para style="P15">Designation </para>
</td>
<td>
<para style="P4">[[ o.employee_id.job_id.name or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,476.0" style="Table3">
<tr>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica">Address </font>
</para>
</td>
<td>
<para style="P4">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
[[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table4">
<tr>
<td>
<para style="P15">Email</para>
</td>
<td>
<para style="P4">[[ o.employee_id.work_email or '' ]]</para>
</td>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica">Identification No</font>
</para>
</td>
<td>
<para style="P4">[[ o.employee_id.identification_id or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table5">
<tr>
<td>
<para style="P15">Reference</para>
</td>
<td>
<para style="P4">[[ o.number or '' ]]</para>
</td>
<td>
<para style="P15">Bank Account</para>
</td>
<td>
<para style="P4">[[ o.employee_id.otherid or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table6">
<tr>
<td>
<para style="P15">Date From</para>
</td>
<td>
<para style="P4">[[ o.date_from or '']]</para>
</td>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica" size="8.0">Date To</font>
</para>
</td>
<td>
<para style="P4">[[ o.date_to or '' ]]</para>
</td>
</tr>
</blockTable>
<para style="P6">
<font color="white"> </font>
</para>
<para style="P6"/>
<blockTable colWidths="67.0,218.0,88.0,85.0,81.0" style="Table8">
<tr>
<td>
<para style="P13">Code</para>
</td>
<td>
<para style="P13">Name</para>
</td>
<td>
<para style="P13">Quantity/Rate</para>
</td>
<td>
<para style="P13">Amount</para>
</td>
<td>
<para style="P14">Total</para>
</td>
</tr>
</blockTable>
<section>
<para style="P4">[[repeatIn(get_payslip_lines(o.line_ids),'p') ]]</para>
<blockTable colWidths="67.0,218.0,88.0,85.0,81.0" style="Table9">
<tr>
<td>
<para style="P4">[[ p.code ]]</para>
</td>
<td>
<para style="P4">[[ p.name ]]</para>
</td>
<td>
<para style="P4">[[ formatLang(p.quantity) ]]</para>
</td>
<td>
<para style="P4">[[ formatLang(p.amount) ]]</para>
</td>
<td>
<para style="P5">[[ formatLang(p.total, currency_obj = o.company_id and o.company_id.currency_id)]]</para>
</td>
</tr>
</blockTable>
</section>
<para style="P10">
<font color="white"> </font>
</para>
<para style="P16">
<font color="white"> </font>
</para>
<para style="P6">
<font color="white"> </font>
</para>
<para style="P1">
<font color="white"> </font>
</para>
<blockTable colWidths="269.0,269.0" style="Table13">
<tr>
<td>
<para style="P4">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">Authorized Signature </para>
</td>
</tr>
</blockTable>
<para style="P3">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -1,5 +1,4 @@
#-*- coding:utf-8 -*- #-*- coding:utf-8 -*-
############################################################################## ##############################################################################
# #
# OpenERP, Open Source Management Solution # OpenERP, Open Source Management Solution
@ -21,8 +20,9 @@
# #
############################################################################## ##############################################################################
from openerp.osv import osv
from openerp.report import report_sxw from openerp.report import report_sxw
from openerp.tools import amount_to_text_en
class payslip_details_report(report_sxw.rml_parse): class payslip_details_report(report_sxw.rml_parse):
@ -113,6 +113,11 @@ class payslip_details_report(report_sxw.rml_parse):
}) })
return res return res
report_sxw.report_sxw('report.paylip.details', 'hr.payslip', 'hr_payroll/report/report_payslip_details.rml', parser=payslip_details_report)
class wrapped_report_payslipdetails(osv.AbstractModel):
_name = 'report.hr_payroll.report_payslipdetails'
_inherit = 'report.abstract_report'
_template = 'hr_payroll.report_payslipdetails'
_wrapped_report_class = payslip_details_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,426 +0,0 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template title="Test" author="Martin Simon" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="28.0" y1="28.0" width="539" height="786"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table2">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table3">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
</blockTableStyle>
<blockTableStyle id="Table4">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table5">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table6">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="0,0" stop="0,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="0,0" stop="0,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="1,0" stop="1,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="1,0" stop="1,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="2,0" stop="2,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="2,0" stop="2,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="2,-1" stop="2,-1"/>
<lineStyle kind="LINEBEFORE" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEAFTER" colorName="#cccccc" start="3,0" stop="3,-1"/>
<lineStyle kind="LINEABOVE" colorName="#cccccc" start="3,0" stop="3,0"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="3,-1" stop="3,-1"/>
</blockTableStyle>
<blockTableStyle id="Table10">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table11">
<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="Table12">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table8">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</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="Table16">
<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"/>
</blockTableStyle>
<blockTableStyle id="Table13">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="P1" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="P2" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="P3" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P4" rightIndent="-56.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P5" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P6" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P7" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P8" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P9" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P10" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P11" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P12" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P13" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/>
<paraStyle name="P14" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P15" fontName="Helvetica-Bold" fontSize="8.0" leading="10"/>
<paraStyle name="P16" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P17" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P18" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P19" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT"/>
<paraStyle name="P20" fontName="Helvetica" fontSize="2.0" leading="3"/>
<paraStyle name="P21" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P22" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT"/>
<paraStyle name="P23" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT"/>
<paraStyle name="P24" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P25" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="P26" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<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="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_space" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_header_Centre" fontName="Helvetica-Bold" fontSize="14.0" leading="17" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Centre_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_8" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Bold_9" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_10" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="terp_tblheader_Details" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_tblheader_Details_Right" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" 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="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="payslip_adj" rightIndent="0.0" leftIndent="0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<para style="P3">[[repeatIn(objects,'o')]]</para>
<blockTable colWidths="539.0" style="Table1">
<tr>
<td>
<para style="P8">Pay Slip Details</para>
</td>
</tr>
</blockTable>
<para style="terp_header_Centre">
<font face="Helvetica" size="6.0">[[o.credit_note==False and removeParentNode('para')]]</font>
<font face="Helvetica-Bold" size="14.0">Credit</font>
<font face="Helvetica" size="14.0"/>
<font face="Helvetica-Bold" size="14.0">Note</font>
</para>
<para style="P9">([[o.name or removeParentNode('para')]])</para>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table2">
<tr>
<td>
<para style="P16">Name</para>
</td>
<td>
<para style="P16">[[o.employee_id.name]]</para>
</td>
<td>
<para style="P16">Designation </para>
</td>
<td>
<para style="P5">[[ o.employee_id.job_id.name or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,476.0" style="Table3">
<tr>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica">Address </font>
</para>
</td>
<td>
<para style="P5">[[o.employee_id.address_home_id and o.employee_id.address_home_id.name or '' ]]
[[o.employee_id.address_home_id and display_address(o.employee_id.address_home_id)]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table4">
<tr>
<td>
<para style="P16">Email</para>
</td>
<td>
<para style="P5">[[ o.employee_id.work_email or '' ]]</para>
</td>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica">Identification No</font>
</para>
</td>
<td>
<para style="P5">[[ o.employee_id.identification_id or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table5">
<tr>
<td>
<para style="P16">Reference</para>
</td>
<td>
<para style="P5">[[ o.number or '' ]]</para>
</td>
<td>
<para style="P16">Bank Account</para>
</td>
<td>
<para style="P5">[[ o.employee_id.otherid or '' ]]</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="63.0,206.0,89.0,181.0" style="Table6">
<tr>
<td>
<para style="P16">Date From</para>
</td>
<td>
<para style="P5">[[ o.date_from or '']]</para>
</td>
<td>
<para style="terp_default_Bold_8">
<font face="Helvetica" size="8.0">Date To</font>
</para>
</td>
<td>
<para style="P5">[[ o.date_to or '' ]]</para>
</td>
</tr>
</blockTable>
<para style="P7"/>
<para style="P11">
<font color="white"> </font>
</para>
<para style="P5">
<font color="white"> </font>
</para>
<blockTable colWidths="539.0" style="Table10">
<tr>
<td>
<para style="P10">Details by Salary Rule Category: </para>
</td>
</tr>
</blockTable>
<blockTable colWidths="54.0,388.0,97.0" style="Table11">
<tr>
<td>
<para style="P15">Code</para>
</td>
<td>
<para style="P15">Salary Rule Category</para>
</td>
<td>
<para style="P14">Total</para>
</td>
</tr>
</blockTable>
<para style="P1">
<font color="white"> </font>
</para>
<section>
<para style="P16">[[repeatIn(get_details_by_rule_category(o.details_by_salary_rule_category),'h') ]]</para>
<blockTable colWidths="54.0,388.0,97.0" style="Table12">
<tr>
<td>
<para style="P16">
<font face="Helvetica">[[ h['code'] ]]</font>
<font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]]</font>
</para>
</td>
<td>
<para style="P17"><font face="Helvetica" color="white">[[ '..'*h['level'] ]]</font>[[ h['rule_category'] ]]<font face="Helvetica">[[ h['level']!=0 and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font') ]]</font></para>
</td>
<td>
<para style="P6">[[ formatLang(h['total'], currency_obj = o.company_id and o.company_id.currency_id)]] <font face="Helvetica" size="8.0">[[ h['level']==0 and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font') ]]</font></para>
</td>
</tr>
</blockTable>
</section>
<para style="P7">
<font color="white"> </font>
</para>
<blockTable colWidths="539.0" style="Table8">
<tr>
<td>
<para style="P10">Payslip Lines by Contribution Register:</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="114.0,42.0,170.0,85.0,56.0,71.0" style="Table7">
<tr>
<td>
<para style="P13">Register Name</para>
</td>
<td>
<para style="P13">Code</para>
</td>
<td>
<para style="P13">Name</para>
</td>
<td>
<para style="P13">Quantity/Rate</para>
</td>
<td>
<para style="P13">Amount</para>
</td>
<td>
<para style="P14">Total</para>
</td>
</tr>
</blockTable>
<section>
<para style="P16">[[repeatIn(get_lines_by_contribution_register(o.details_by_salary_rule_category),'r') ]]</para>
<blockTable colWidths="113.0,44.0,169.0,85.0,56.0,72.0" style="Table16">
<tr>
<td>
<para style="P16">[[ r.get('register_name', False) ]]<font face="Helvetica">[[ h.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_8'})) or removeParentNode('font')]]</font></para>
</td>
<td>
<para style="P5">[[ r['code'] ]]</para>
</td>
<td>
<para style="P5">[[ r['name'] ]]</para>
</td>
<td>
<para style="P5">[[ formatLang(r['quantity']) ]]</para>
</td>
<td>
<para style="P5">[[ formatLang(r['amount']) ]]</para>
</td>
<td>
<para style="P6">[[ formatLang(r['total'], currency_obj = o.company_id and o.company_id.currency_id)]]<font face="Helvetica">[[ r.get('register_name', False) and ( setTag('para','para',{'style':'terp_default_10'})) or removeParentNode('font')]]</font></para>
</td>
</tr>
</blockTable>
</section>
<blockTable colWidths="269.0,269.0" style="Table13">
<tr>
<td>
<para style="P5">
<font color="white"> </font>
</para>
</td>
<td>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">
<font color="white"> </font>
</para>
<para style="P12">Authorized Signature </para>
</td>
</tr>
</blockTable>
<para style="P4">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -1,12 +0,0 @@
-
In order to test the PDF reports defined on HR Payroll, we will print Employees' Salary Structure
-
Print HR Payslip
-
!python {model: hr.payslip}: |
import os
import openerp.report
from openerp import tools
data, format = openerp.report.render_report(cr, uid, [ref('hr_payroll.hr_payslip_salaryslipofbonamyforjune0')], 'payslip.pdf', {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'hr_payroll-payslip_report.'+format), 'wb+').write(data)

View File

@ -107,8 +107,29 @@
date_from: '2011-09-30' date_from: '2011-09-30'
date_to: '2011-09-01' date_to: '2011-09-01'
- -
I print the report. I print the payslip report
- -
!python {model: payslip.lines.contribution.register}: | !python {model: hr.payslip}: |
self.print_report(cr, uid, [ref('payslip_lines_contribution_register0')], context={'active_ids': [ref('hr_houserent_register')]}) import os
import openerp.report
from openerp import tools
data, format = openerp.report.render_report(cr, uid, [ref('hr_payslip_0')], 'hr_payroll.report_payslip', {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'hr_payroll-payslip.'+format), 'wb+').write(data)
-
I print the payslip details report
-
!python {model: hr.payslip}: |
import os
import openerp.report
from openerp import tools
data, format = openerp.report.render_report(cr, uid, [ref('hr_payslip_0')], 'hr_payroll.report_payslipdetails', {}, {})
if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'hr_payroll-payslipdetails.'+format), 'wb+').write(data)
-
I print the contribution register report
-
!python {model: hr.contribution.register}: |
ctx={'model': 'hr.contribution.register', 'active_ids': [ref('hr_houserent_register')]}
from openerp.tools import test_reports
test_reports.try_report_action(cr, uid, 'action_payslip_lines_contribution_register', context=ctx, our_module='hr_payroll')

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_contributionregister">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>PaySlip Lines by Contribution Register</h2>
<div class="row mt32 mb32">
<div class="col-xs-3">
<strong>Register Name:</strong>
<p t-field="o.name"/>
</div>
<div class="col-xs-3">
<strong>Date From:</strong>
<p t-esc="data['form']['date_from']"/>
</div>
<div class="col-xs-3">
<strong>Date To:</strong>
<p t-esc="data['form']['date_to']"/>
</div>
</div>
<table class="table table-condensed">
<thead>
<tr>
<th>PaySlip Name</th>
<th>Code</th>
<th>Name</th>
<th>Quantity/Rate</th>
<th>Amount</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr t-foreach="get_payslip_lines(o)" t-as="r">
<td><span t-esc="r.get('payslip_name')"/></td>
<td><span t-esc="r['code']"/></td>
<td><span t-esc="r['name']"/></td>
<td><span t-esc="formatLang(r['quantity'])"/></td>
<td><span t-esc="formatLang(r['amount'])"/></td>
<td><span t-esc=" formatLang(r['total'], currency_obj=o.company_id and o.company_id.currency_id)"/></td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col-xs-4 pull-right">
<table class="table table-condensed">
<tr class="border-black">
<td><strong>Total</strong></td>
<td class="text-right">
<span t-esc="formatLang(sum_total(), currency_obj = o.company_id and o.company_id.currency_id)"/>
</td>
</tr>
</table>
</div>
</div>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_payslip">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>Pay Slip</h2>
<p t-field="o.name"/>
<table class="table table-condensed table-bordered">
<tr>
<td><strong>Name</strong></td>
<td><span t-field="o.employee_id"/></td>
<td><strong>Designation</strong></td>
<td><span t-field="o.employee_id.job_id"/></td>
</tr>
<tr>
<td><strong>Address</strong></td>
<td colspan="3">
<div t-filed="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true}'/>
</td>
</tr>
<tr>
<td><strong>Email</strong></td>
<td><span t-field="o.employee_id.work_email"/></td>
<td><strong>Identification No</strong></td>
<td><span t-field="o.employee_id.job_id"/></td>
</tr>
<tr>
<td><strong>Reference</strong></td>
<td><span t-field="o.number"/></td>
<td><strong>Bank Account</strong></td>
<td><span t-field="o.employee_id.otherid"/></td>
</tr>
<tr>
<td><strong>Date From</strong></td>
<td><span t-field="o.date_from"/></td>
<td><strong>Date To</strong></td>
<td><span t-field="o.date_to"/></td>
</tr>
</table>
<table class="table table-condensed">
<thead>
<tr>
<th>Code</th>
<th>Name</th>
<th>Quantity/rate</th>
<th>Amount</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr t-foreach="get_payslip_lines(o.line_ids)" t-as="p">
<td><span t-field="p.code"/></td>
<td><span t-field="p.name"/></td>
<td><span t-field="p.quantity"/></td>
<td><span t-esc="formatLang(p.amount, currency_obj=o.company_id.currency_id)"/></td>
<td><span t-esc="formatLang(p.total, currency_obj=o.company_id.currency_id)"/></td>
</tr>
</tbody>
</table>
<p class="text-right"><strong>Authorized signature</strong></p>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_payslipdetails">
<t t-call="report.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="report.external_layout">
<div class="page">
<h2>Pay Slip</h2>
<p t-field="o.name"/>
<table class="table table-condensed table-bordered">
<tr>
<td><strong>Name</strong></td>
<td><span t-field="o.employee_id"/></td>
<td><strong>Designation</strong></td>
<td><span t-field="o.employee_id.job_id"/></td>
</tr>
<tr>
<td><strong>Address</strong></td>
<td colspan="3">
<div t-field="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": true}'/>
</td>
</tr>
<tr>
<td><strong>Email</strong></td>
<td><span t-field="o.employee_id.work_email"/></td>
<td><strong>Identification No</strong></td>
<td><span t-field="o.employee_id.job_id"/></td>
</tr>
<tr>
<td><strong>Reference</strong></td>
<td><span t-field="o.number"/></td>
<td><strong>Bank Account</strong></td>
<td><span t-field="o.employee_id.otherid"/></td>
</tr>
<tr>
<td><strong>Date From</strong></td>
<td><span t-field="o.date_from"/></td>
<td><strong>Date To</strong></td>
<td><span t-field="o.date_to"/></td>
</tr>
</table>
<h3>Details by Salary Rule Category</h3>
<table class="table table-condensed mb32">
<thead>
<tr>
<th>Code</th>
<th>Salary Rule Category</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr t-foreach="get_details_by_rule_category(o.details_by_salary_rule_category)" t-as="h">
<td>
<span t-esc="h['code']"/>
</td>
<td>
<span t-esc="'..'*h['level']"/><span t-esc="h['rule_category']"/>
</td>
<td>
<span t-esc="formatLang(h['total'], currency_obj=o.company_id.currency_id)"/>
</td>
</tr>
</tbody>
</table>
<h3>Payslip Lines by Contribution Register</h3>
<table class="table table-condensed mt32">
<thead>
<tr>
<th>Code</th>
<th>Name</th>
<th>Quantity/rate</th>
<th>Amount</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr t-foreach="get_lines_by_contribution_register(o.line_ids)" t-as="p">
<td><span t-esc="p.get('code', '')"/></td>
<td><span t-esc="p.get('name', '')"/></td>
<td><span t-esc="p.get('quantity', '')"/></td>
<td><span t-esc="formatLang(p.get('amount', 0))"/></td>
<td><span t-esc="formatLang(p.get('total', 0), currency_obj=o.company_id.currency_id)"/></td>
</tr>
</tbody>
</table>
<p class="text-right"><strong>Authorized signature</strong></p>
</div>
</t>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -22,9 +22,9 @@
import time import time
from datetime import datetime from datetime import datetime
from dateutil import relativedelta from dateutil import relativedelta
from openerp.osv import fields, osv from openerp.osv import fields, osv
class payslip_lines_contribution_register(osv.osv_memory): class payslip_lines_contribution_register(osv.osv_memory):
_name = 'payslip.lines.contribution.register' _name = 'payslip.lines.contribution.register'
_description = 'PaySlip Lines by Contribution Registers' _description = 'PaySlip Lines by Contribution Registers'
@ -44,11 +44,8 @@ class payslip_lines_contribution_register(osv.osv_memory):
'model': 'hr.contribution.register', 'model': 'hr.contribution.register',
'form': self.read(cr, uid, ids, [], context=context)[0] 'form': self.read(cr, uid, ids, [], context=context)[0]
} }
return { return self.pool['report'].get_action(
'type': 'ir.actions.report.xml', cr, uid, [], 'hr_payroll.report_contributionregister', data=datas, context=context
'report_name': 'contribution.register.lines', )
'datas': datas,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -80,6 +80,7 @@ class hr_applicant(osv.Model):
_description = "Applicant" _description = "Applicant"
_order = "id desc" _order = "id desc"
_inherit = ['mail.thread', 'ir.needaction_mixin'] _inherit = ['mail.thread', 'ir.needaction_mixin']
_track = { _track = {
'stage_id': { 'stage_id': {
# this is only an heuristics; depending on your particular stage configuration it may not match all 'new' stages # this is only an heuristics; depending on your particular stage configuration it may not match all 'new' stages
@ -87,6 +88,7 @@ class hr_applicant(osv.Model):
'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence > 1, 'hr_recruitment.mt_applicant_stage_changed': lambda self, cr, uid, obj, ctx=None: obj.stage_id and obj.stage_id.sequence > 1,
}, },
} }
_mail_mass_mailing = _('Applicants')
def _get_default_department_id(self, cr, uid, context=None): def _get_default_department_id(self, cr, uid, context=None):
""" Gives default department by checking if present in the context """ """ Gives default department by checking if present in the context """

View File

@ -125,7 +125,19 @@
</xpath> </xpath>
</field> </field>
</record> </record>
<record id="act_hr_timesheet_accounts_form" model="ir.actions.act_window">
<field name="name">Timesheet Accounts</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.analytic.account</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[('use_timesheets','=', True)]</field>
<field name="context">{'default_use_timesheets':1}</field>
</record>
<menuitem parent="hr.menu_hr_configuration" id="menu_timesheet_accounts" action="act_hr_timesheet_accounts_form" sequence="7" groups="base.group_hr_manager"/>
<record id="act_hr_timesheet_line_evry1_all_form" model="ir.actions.act_window"> <record id="act_hr_timesheet_line_evry1_all_form" model="ir.actions.act_window">
<field name="name">Timesheet Activities</field> <field name="name">Timesheet Activities</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>

View File

@ -47,6 +47,7 @@ reports.""",
'wizard/hr_timesheet_analytic_profit_view.xml', 'wizard/hr_timesheet_analytic_profit_view.xml',
'wizard/hr_timesheet_invoice_create_view.xml', 'wizard/hr_timesheet_invoice_create_view.xml',
'wizard/hr_timesheet_invoice_create_final_view.xml', 'wizard/hr_timesheet_invoice_create_final_view.xml',
'views/report_analyticprofit.xml',
], ],
'demo': ['hr_timesheet_invoice_demo.xml'], 'demo': ['hr_timesheet_invoice_demo.xml'],
'test': ['test/test_hr_timesheet_invoice.yml', 'test': ['test/test_hr_timesheet_invoice.yml',

View File

@ -2,13 +2,12 @@
<openerp> <openerp>
<data> <data>
<report <report
auto="False" id="action_report_analytic_profit"
id="report_analytical_profit"
menu="False"
model="account.analytic.line" model="account.analytic.line"
name="account.analytic.profit" name="hr_timesheet_invoice.report_analyticprofit"
rml="hr_timesheet_invoice/report/account_analytic_profit.rml" file="hr_timesheet_invoice.report_analyticprofit"
string="Timesheet Profit"/> report_type="qweb-pdf"
string="Timesheet Profit"
/>
</data> </data>
</openerp> </openerp>

View File

@ -20,6 +20,8 @@
############################################################################## ##############################################################################
from openerp.report import report_sxw from openerp.report import report_sxw
from openerp.osv import osv
class account_analytic_profit(report_sxw.rml_parse): class account_analytic_profit(report_sxw.rml_parse):
def __init__(self, cr, uid, name, context): def __init__(self, cr, uid, name, context):
@ -30,6 +32,7 @@ class account_analytic_profit(report_sxw.rml_parse):
'journal_ids': self._journal_ids, 'journal_ids': self._journal_ids,
'line': self._line, 'line': self._line,
}) })
def _user_ids(self, lines): def _user_ids(self, lines):
user_obj = self.pool['res.users'] user_obj = self.pool['res.users']
ids=list(set([b.user_id.id for b in lines])) ids=list(set([b.user_id.id for b in lines]))
@ -116,6 +119,11 @@ class account_analytic_profit(report_sxw.rml_parse):
]) ])
return line_obj.browse(self.cr, self.uid, ids) return line_obj.browse(self.cr, self.uid, ids)
report_sxw.report_sxw('report.account.analytic.profit', 'account.analytic.line', 'addons/hr_timesheet_invoice/report/account_analytic_profit.rml', parser=account_analytic_profit)
class report_account_analytic_profit(osv.AbstractModel):
_name = 'report.hr_timesheet_invoice.report_analyticprofit'
_inherit = 'report.abstract_report'
_template = 'hr_timesheet_invoice.report_analyticprofit'
_wrapped_report_class = account_analytic_profit
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -1,341 +0,0 @@
<?xml version="1.0"?>
<document filename="test.pdf">
<template title="Invoice rate by user" author="OpenERP S.A. (sales@openerp.com)" allowSplitting="20">
<pageTemplate id="first">
<frame id="first" x1="35.0" y1="57.0" width="525" height="728"/>
</pageTemplate>
</template>
<stylesheet>
<blockTableStyle id="Standard_Outline">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table_Title">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table_header_Date">
<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="LINEAFTER" 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"/>
</blockTableStyle>
<blockTableStyle id="Table_Content_Date">
<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="LINEAFTER" 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"/>
</blockTableStyle>
<blockTableStyle id="Table_Header_Employee">
<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"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Final_Total">
<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"/>
<lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Journal_Total_detail">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="0,-1" stop="0,-1"/>
<lineStyle kind="LINEBELOW" colorName="#cccccc" start="1,-1" stop="1,-1"/>
</blockTableStyle>
<blockTableStyle id="Table_Journal_title">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<blockTableStyle id="Table1">
<blockAlignment value="LEFT"/>
<blockValign value="TOP"/>
</blockTableStyle>
<initialize>
<paraStyle name="all" alignment="justify"/>
</initialize>
<paraStyle name="Standard" fontName="Helvetica"/>
<paraStyle name="Text body" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Heading" fontName="Helvetica" fontSize="14.0" leading="17" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="List" fontName="Helvetica" spaceBefore="0.0" spaceAfter="6.0"/>
<paraStyle name="Table Contents" fontName="Helvetica"/>
<paraStyle name="Table Heading" fontName="Helvetica" alignment="CENTER"/>
<paraStyle name="Caption" fontName="Helvetica" fontSize="12.0" leading="15" spaceBefore="6.0" spaceAfter="6.0"/>
<paraStyle name="Index" fontName="Helvetica"/>
<paraStyle name="Preformatted Text" fontName="Courier" fontSize="10.0" leading="13" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="Footer" fontName="Helvetica"/>
<paraStyle name="Horizontal Line" fontName="Helvetica" fontSize="6.0" leading="8" spaceBefore="0.0" spaceAfter="14.0"/>
<paraStyle name="terp_header" fontName="Helvetica-Bold" fontSize="12.0" leading="15" alignment="LEFT" spaceBefore="12.0" spaceAfter="6.0"/>
<paraStyle name="Heading 9" fontName="Helvetica-Bold" fontSize="75%" leading="NaN" spaceBefore="12.0" spaceAfter="6.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_Details" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="6.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_tblheader_General_Centre" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="6.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_default_Centre_8" fontName="Helvetica" fontSize="8.0" leading="10" alignment="CENTER" 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="12.0" leading="15" 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_9" fontName="Helvetica" fontSize="9.0" leading="11" 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_Centre_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" 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_centre_bold_9" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" 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_Right_9" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<paraStyle name="terp_default_Right_9_bold_U" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
<images/>
</stylesheet>
<story>
<blockTable colWidths="175.0,175.0,175.0" repeatRows="1" style="Table_Title">
<tr>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_header_Centre">Invoice rate by user</para>
</td>
<td>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="175.0,175.0,175.0" style="Table_header_Date">
<tr>
<td>
<para style="terp_tblheader_General_Centre">Period from startdate</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Period to enddate</para>
</td>
<td>
<para style="terp_tblheader_General_Centre">Currency</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="175.0,175.0,175.0" style="Table_Content_Date">
<tr>
<td>
<para style="terp_default_Centre_8">[[ formatLang(data['form']['date_from'],date=True) ]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ formatLang (data['form']['date_to'] ,date=True)]]</para>
</td>
<td>
<para style="terp_default_Centre_8">[[ company.currency_id.name ]]</para>
</td>
</tr>
</blockTable>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<para style="terp_default_8">
<font color="white"> </font>
</para>
<blockTable colWidths="159.0,62.0,63.0,68.0,65.0,53.0,52.0" style="Table_Header_Employee">
<tr>
<td>
<para style="terp_tblheader_Details">User or Journal Name</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Units</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Theorical</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Income</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Cost</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Profit</para>
</td>
<td>
<para style="terp_tblheader_Details_Right">Eff.</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
<blockTable colWidths="154.0,65.0,60.0,72.0,66.0,52.0,51.0" style="Table_Final_Total">
<tr>
<td>
<para style="terp_default_Bold_9">Totals:</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['unit_amount'], line(data['form'], data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['amount'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['profit'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) and round(reduce(lambda x, y: x+y['amount'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)/reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)* -100, 2)]] %</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2"/>
<section>
<para style="terp_default_8">[[ repeatIn(user_ids(lines(data['form'])), 'e') ]]</para>
<blockTable colWidths="137.0,29.0,52.0,61.0,71.0,66.0,52.0,51.0" style="Table_Journal_Total_detail">
<tr>
<td>
<para style="terp_default_Bold_9">[[ e.name ]]</para>
</td>
<td>
<para style="terp_default_8">[[ repeatIn(journal_ids(data['form'], [e.id]), 'j') ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['unit_amount'], line(data['form'], [j.id], [e.id]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['amount_th'], line(data['form'], [j.id], [e.id]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['amount'], line(data['form'], [j.id], [e.id]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[ reduce(lambda x, y: x+y['profit'], line(data['form'], [j.id], [e.id]), 0) ]]</para>
</td>
<td>
<para style="terp_default_Right_9_bold_U">[[reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0) and '%d' % (reduce(lambda x, y: x+y['amount'], line(data['form'], [j.id], [e.id]), 0) / reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0) * 100.0, 2)]] %</para>
</td>
</tr>
</blockTable>
<blockTable colWidths="154.0,65.0,61.0,71.0,66.0,52.0,51.0" style="Table_Journal_title">
<tr>
<td>
<para style="terp_default_9">[[ j.name ]]</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
<td>
<para style="terp_default_9">
<font color="white"> </font>
</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
<section>
<para style="terp_default_8">[[ repeatIn(line(data['form'], [j.id],[e.id]), 'l') ]] </para>
<blockTable colWidths="155.0,64.0,61.0,71.0,66.0,52.0,50.0" style="Table1">
<tr>
<td>
<para style="terp_default_8">[[ l['name'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['unit_amount'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['amount_th'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['amount'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['cost'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['profit'] ]]</para>
</td>
<td>
<para style="terp_default_Right_9">[[ l['eff'] ]] %</para>
</td>
</tr>
</blockTable>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</section>
<para style="terp_default_2">
<font color="white"> </font>
</para>
</section>
<para style="terp_default_8">
<font color="white"> </font>
</para>
</story>
</document>

View File

@ -6,6 +6,6 @@
import openerp.report import openerp.report
from openerp import tools from openerp import tools
data_dict = {'model': 'ir.ui.menu', 'form': {'date_from': time.strftime('%Y-%m-01'), 'employee_ids': [[6,0,[ref('hr.employee_fp'), ref('hr.employee_qdp'),ref('hr.employee_al')]]], 'journal_ids': [[6,0,[ref('hr_timesheet.analytic_journal')]]], 'date_to': time.strftime('%Y-%m-%d')}} data_dict = {'model': 'ir.ui.menu', 'form': {'date_from': time.strftime('%Y-%m-01'), 'employee_ids': [[6,0,[ref('hr.employee_fp'), ref('hr.employee_qdp'),ref('hr.employee_al')]]], 'journal_ids': [[6,0,[ref('hr_timesheet.analytic_journal')]]], 'date_to': time.strftime('%Y-%m-%d')}}
data, format = openerp.report.render_report(cr, uid, [], 'account.analytic.profit', data_dict, {}) data, format = openerp.report.render_report(cr, uid, [], 'hr_timesheet_invoice.report_analyticprofit', data_dict, {})
if tools.config['test_report_directory']: if tools.config['test_report_directory']:
file(os.path.join(tools.config['test_report_directory'], 'hr_timesheet_invoice-account_analytic_profit_report.'+format), 'wb+').write(data) file(os.path.join(tools.config['test_report_directory'], 'hr_timesheet_invoice-account_analytic_profit_report.'+format), 'wb+').write(data)

View File

@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="report_analyticprofit">
<t t-call="report.html_container">
<t t-call="report.external_layout">
<div class="page">
<h2>Invoice rate by user</h2>
<div class="row mt32 mb32">
<div class="col-xs-3">
<strong>Period from startdate:</strong>
<p t-esc="formatLang(data['form']['date_from'],date=True)"/>
</div>
<div class="col-xs-3">
<strong>Period to enddate:</strong>
<p t-esc="formatLang(data['form']['date_to'],date=True)"/>
</div>
<div class="col-xs-3">
<strong>Currency:</strong>
<p t-esc="res_company.currency_id.name"/>
</div>
</div>
<table class="table table-condensed">
<thead>
<tr>
<th>User or Journal Name</th>
<th>Units</th>
<th>Theorical</th>
<th>Income</th>
<th>Cost</th>
<th>Profit</th>
<th>Eff.</th>
</tr>
</thead>
<tbdody>
<tr>
<td>Totals:</td>
<td><span t-esc="reduce(lambda x, y: x+y['unit_amount'], line(data['form'], data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)"/></td>
<td></td>
<td><span t-esc="reduce(lambda x, y: x+y['amount'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['profit'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0) and round(reduce(lambda x, y: x+y['amount'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)/reduce(lambda x, y: x+y['cost'], line(data['form'],data['form']['journal_ids'][0][2], data['form']['employee_ids'][0][2]), 0)* -100, 2)"/><span> %</span></td>
</tr>
<t t-foreach="user_ids(lines(data['form']))" t-as="e">
<t t-foreach="journal_ids(data['form'], [e.id])" t-as="j">
<tr>
<td><span t-esc="e.name"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['unit_amount'], line(data['form'], [j.id], [e.id]), 0) "/></td>
<td><span t-esc="reduce(lambda x, y: x+y['amount_th'], line(data['form'], [j.id], [e.id]), 0)"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['amount'], line(data['form'], [j.id], [e.id]), 0)"/></td>
<td><span t-esc="reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0) "/></td>
<td><span t-esc="reduce(lambda x, y: x+y['profit'], line(data['form'], [j.id], [e.id]), 0)"/></td>
<td>
<t t-if="reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0)">
<span t-esc="reduce(lambda x, y: x+y['amount'], line(data['form'], [j.id], [e.id]), 0) / reduce(lambda x, y: x+y['cost'], line(data['form'], [j.id], [e.id]), 0) * -100.0"/>
<span> %</span>
</t>
</td>
</tr>
<tr>
<th colspan="7"><span t-esc="j.name"/></th>
</tr>
<tr t-foreach="line(data['form'], [j.id],[e.id])" t-as="l">
<td><span t-esc="l['name']"/></td>
<td><span t-esc="l['unit_amount']"/></td>
<td><span t-esc="l['amount_th']"/></td>
<td><span t-esc="l['amount']"/></td>
<td><span t-esc="l['cost']"/></td>
<td><span t-esc="l['profit']"/></td>
<td><span t-esc="l['eff']"/><span> %</span></td>
</tr>
</t>
</t>
</tbdody>
</table>
</div>
</t>
</t>
</template>
</data>
</openerp>

View File

@ -23,6 +23,7 @@ import datetime
from openerp.osv import fields, osv from openerp.osv import fields, osv
from openerp.tools.translate import _ from openerp.tools.translate import _
class account_analytic_profit(osv.osv_memory): class account_analytic_profit(osv.osv_memory):
_name = 'hr.timesheet.analytic.profit' _name = 'hr.timesheet.analytic.profit'
_description = 'Print Timesheet Profit' _description = 'Print Timesheet Profit'
@ -60,15 +61,12 @@ class account_analytic_profit(osv.osv_memory):
data['form']['journal_ids'] = [(6, 0, data['form']['journal_ids'])] # Improve me => Change the rml/sxw so that it can support withou [0][2] data['form']['journal_ids'] = [(6, 0, data['form']['journal_ids'])] # Improve me => Change the rml/sxw so that it can support withou [0][2]
data['form']['employee_ids'] = [(6, 0, data['form']['employee_ids'])] data['form']['employee_ids'] = [(6, 0, data['form']['employee_ids'])]
datas = { datas = {
'ids': [], 'ids': [],
'model': 'account.analytic.line', 'model': 'account.analytic.line',
'form': data['form'] 'form': data['form']
} }
return { return self.pool['report'].get_action(
'type': 'ir.actions.report.xml', cr, uid, [], 'hr_timesheet_invoice.report_analyticprofit', data=datas, context=context
'report_name': 'account.analytic.profit', )
'datas': datas,
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -250,7 +250,18 @@ class account_analytic_line(osv.osv):
#if we don't get the dates from the timesheet, we return the default value from super() #if we don't get the dates from the timesheet, we return the default value from super()
return res return res
class account_analytic_account(osv.osv):
_inherit = "account.analytic.account"
def name_create(self, cr, uid, name, context=None):
if context is None:
context = {}
group_template_required = self.pool['res.users'].has_group(cr, uid, 'account_analytic_analysis.group_template_required')
if not context.get('default_use_timesheets') or group_template_required:
return super(account_analytic_account, self).name_create(cr, uid, name, context=context)
rec_id = self.create(cr, uid, {self._rec_name: name}, context)
return self.name_get(cr, uid, [rec_id], context)[0]
class hr_timesheet_line(osv.osv): class hr_timesheet_line(osv.osv):
_inherit = "hr.analytic.timesheet" _inherit = "hr.analytic.timesheet"

Some files were not shown because too many files have changed in this diff Show More