diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py
index d4731fa0215..cea696f590f 100644
--- a/addons/account/__openerp__.py
+++ b/addons/account/__openerp__.py
@@ -107,8 +107,11 @@ module named account_voucherss
'company_view.xml',
'account_installer.xml',
'report/account_invoice_report_view.xml',
+ 'report/account_entries_report_view.xml',
'report/account_report_view.xml',
'report/account_analytic_report_view.xml',
+ 'report/account_account_report_view.xml',
+ 'report/account_analytic_entries_report_view.xml'
],
'demo_xml': [
#'demo/price_accuracy00.yml',
diff --git a/addons/account/account.py b/addons/account/account.py
index 6095c2aa113..5181028c17b 100644
--- a/addons/account/account.py
+++ b/addons/account/account.py
@@ -231,9 +231,9 @@ class account_account(osv.osv):
aml_query = self.pool.get('account.move.line')._query_get(cr, uid, context=context)
wheres = [""]
- if query:
+ if query.strip():
wheres.append(query.strip())
- if aml_query:
+ if aml_query.strip():
wheres.append(aml_query.strip())
query = " AND ".join(wheres)
@@ -251,6 +251,7 @@ class account_account(osv.osv):
# consolidate accounts with direct children
+ ids2.reverse()
brs = list(self.browse(cr, uid, ids2, context=context))
sums = {}
while brs:
@@ -270,8 +271,9 @@ class account_account(osv.osv):
if current.child_id:
sums[current.id][fn] += sum(sums[child.id][fn] for child in current.child_id)
res = {}
+ null_result = dict((fn, 0.0) for fn in field_names)
for id in ids:
- res[id] = sums[id]
+ res[id] = sums.get(id, null_result)
return res
def _get_company_currency(self, cr, uid, ids, field_name, arg, context={}):
@@ -313,7 +315,7 @@ class account_account(osv.osv):
'user_type': fields.many2one('account.account.type', 'Account Type', required=True,
help="These types are defined according to your country. The type contains more information "\
"about the account and its specificities."),
- 'parent_id': fields.many2one('account.account', 'Parent', ondelete='cascade'),
+ 'parent_id': fields.many2one('account.account', 'Parent', ondelete='cascade', domain=[('type','=','view')]),
'child_parent_ids': fields.one2many('account.account','parent_id','Children'),
'child_consol_ids': fields.many2many('account.account', 'account_account_consol_rel', 'child_id', 'parent_id', 'Consolidated Children'),
'child_id': fields.function(_get_child_ids, method=True, type='many2many', relation="account.account", string="Child Accounts"),
@@ -450,18 +452,42 @@ class account_account(osv.osv):
def _check_moves(self, cr, uid, ids, method, context):
line_obj = self.pool.get('account.move.line')
account_ids = self.search(cr, uid, [('id', 'child_of', ids)])
+
if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]):
if method == 'write':
raise osv.except_osv(_('Error !'), _('You cannot deactivate an account that contains account moves.'))
elif method == 'unlink':
raise osv.except_osv(_('Error !'), _('You cannot remove an account which has account entries!. '))
+ #Checking whether the account is set as a property to any Partner or not
+ value = 'account.account,' + str(ids[0])
+ partner_prop_acc = self.pool.get('ir.property').search(cr, uid, [('value_reference','=',value)], context=context)
+ if partner_prop_acc:
+ raise osv.except_osv(_('Warning !'), _('You cannot remove/deactivate an account which is set as a property to any Partner.'))
+ return True
+
+ def _check_allow_type_change(self, cr, uid, ids, new_type, context):
+ group1 = ['payable', 'receivable', 'other']
+ group2 = ['consolidation','view']
+ line_obj = self.pool.get('account.move.line')
+ for account in self.browse(cr, uid, ids, context=context):
+ old_type = account.type
+ account_ids = self.search(cr, uid, [('id', 'child_of', [account.id])])
+ if line_obj.search(cr, uid, [('account_id', 'in', account_ids)]):
+ #Check for 'Closed' type
+ if old_type == 'closed' and new_type !='closed':
+ raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from 'Closed' to any other type which contains account entries!"))
+ #Check for change From group1 to group2 and vice versa
+ if (old_type in group1 and new_type in group2) or (old_type in group2 and new_type in group1):
+ raise osv.except_osv(_('Warning !'), _("You cannot change the type of account from '%s' to '%s' type as it contains account entries!") % (old_type,new_type,))
return True
def write(self, cr, uid, ids, vals, context=None):
- if not context:
+ if context is None:
context = {}
if 'active' in vals and not vals['active']:
self._check_moves(cr, uid, ids, "write", context)
+ if 'type' in vals.keys():
+ self._check_allow_type_change(cr, uid, ids, vals['type'], context=context)
return super(account_account, self).write(cr, uid, ids, vals, context=context)
def unlink(self, cr, uid, ids, context={}):
@@ -557,15 +583,16 @@ class account_journal(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
if not args:
- args=[]
- if not context:
- context={}
+ args = []
+ if context is None:
+ context = {}
ids = []
if name:
- ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
+ ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit, context=context)
if not ids:
- ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
+ ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit, context=context)
return self.name_get(cr, user, ids, context=context)
+
account_journal()
class account_fiscalyear(osv.osv):
@@ -631,6 +658,19 @@ class account_fiscalyear(osv.osv):
else:
return False
return ids[0]
+
+ def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
+ if args is None:
+ args = []
+ if context is None:
+ context = {}
+ ids = []
+ if name:
+ ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
+ if not ids:
+ ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
+ return self.name_get(cr, user, ids, context=context)
+
account_fiscalyear()
class account_period(osv.osv):
@@ -706,12 +746,24 @@ class account_period(osv.osv):
cr.execute('update account_journal_period set state=%s where period_id=%s', (mode, id))
cr.execute('update account_period set state=%s where id=%s', (mode, id))
return True
+
+ def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
+ if args is None:
+ args = []
+ if context is None:
+ context = {}
+ ids = []
+ if name:
+ ids = self.search(cr, user, [('code','ilike',name)]+ args, limit=limit)
+ if not ids:
+ ids = self.search(cr, user, [('name',operator,name)]+ args, limit=limit)
+ return self.name_get(cr, user, ids, context=context)
account_period()
class account_journal_period(osv.osv):
_name = "account.journal.period"
- _description = "Journal - Period"
+ _description = "Journal Period"
def _icon_get(self, cr, uid, ids, field_name, arg=None, context={}):
result = {}.fromkeys(ids, 'STOCK_NEW')
@@ -950,7 +1002,6 @@ class account_move(osv.osv):
l[2]['period_id'] = default_period
context['period_id'] = default_period
- accnt_journal = self.pool.get('account.journal').browse(cr, uid, vals['journal_id'])
if 'line_id' in vals:
c = context.copy()
c['novalidate'] = True
@@ -1248,7 +1299,7 @@ class account_tax_code(osv.osv):
_description = 'Tax Code'
_rec_name = 'code'
_columns = {
- 'name': fields.char('Tax Case Name', size=64, required=True),
+ 'name': fields.char('Tax Case Name', size=64, required=True, translate=True),
'code': fields.char('Case Code', size=64),
'info': fields.text('Description'),
'sum': fields.function(_sum_year, method=True, string="Year Sum"),
@@ -1262,6 +1313,15 @@ class account_tax_code(osv.osv):
}
+ def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=80):
+ if not args:
+ args = []
+ if context is None:
+ context = {}
+ ids = self.search(cr, user, ['|',('name',operator,name),('code',operator,name)] + args, limit=limit, context=context)
+ return self.name_get(cr, user, ids, context)
+
+
def name_get(self, cr, uid, ids, context=None):
if not len(ids):
return []
@@ -1290,7 +1350,15 @@ class account_tax_code(osv.osv):
return False
level -= 1
return True
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ if default is None:
+ default = {}
+ default = default.copy()
+ default.update({'line_ids': []})
+ return super(account_tax_code, self).copy(cr, uid, id, default, context)
+
_constraints = [
(_check_recursion, 'Error ! You can not create recursive accounts.', ['parent_id'])
]
diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py
index ce6341cc9b2..1fa0a5c6cfa 100644
--- a/addons/account/account_analytic_line.py
+++ b/addons/account/account_analytic_line.py
@@ -30,7 +30,7 @@ from tools import config
class account_analytic_line(osv.osv):
_inherit = 'account.analytic.line'
- _description = 'Analytic lines'
+ _description = 'Analytic Line'
_columns = {
'product_uom_id' : fields.many2one('product.uom', 'UoM'),
'product_id' : fields.many2one('product.product', 'Product'),
@@ -42,7 +42,7 @@ class account_analytic_line(osv.osv):
}
_defaults = {
'date': lambda *a: time.strftime('%Y-%m-%d'),
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', c),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context=c),
}
_order = 'date'
@@ -118,7 +118,7 @@ account_analytic_line()
class timesheet_invoice(osv.osv):
_name = "report.hr.timesheet.invoice.journal"
- _description = "Analytic account costs and revenues"
+ _description = "Analytic Account Costs and Revenues"
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index deb010c7cd0..81b6e3157a1 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -387,7 +387,7 @@ account_bank_statement()
class account_bank_statement_reconcile(osv.osv):
_name = "account.bank.statement.reconcile"
- _description = "Statement reconcile"
+ _description = "Statement Reconcile"
def _total_entry(self, cursor, user, ids, name, attr, context=None):
result = {}
@@ -558,35 +558,40 @@ class account_bank_statement_line(osv.osv):
def onchange_partner_id(self, cursor, user, line_id, partner_id, type, currency_id,
context={}):
+ res = {'value': {}}
if not partner_id:
- return {}
- res_currency_obj = self.pool.get('res.currency')
- res_users_obj = self.pool.get('res.users')
-
- company_currency_id = res_users_obj.browse(cursor, user, user,
- context=context).company_id.currency_id.id
-
- if not currency_id:
- currency_id = company_currency_id
-
- part = self.pool.get('res.partner').browse(cursor, user, partner_id,
+ return res
+ line = self.browse(cursor, user, line_id)
+
+ if not line or (line and not line[0].account_id):
+ part = self.pool.get('res.partner').browse(cursor, user, partner_id,
context=context)
- if type == 'supplier':
- account_id = part.property_account_payable.id
- else:
- account_id = part.property_account_receivable.id
+ if type == 'supplier':
+ account_id = part.property_account_payable.id
+ else:
+ account_id = part.property_account_receivable.id
+ res['value']['account_id'] = account_id
- cursor.execute('SELECT sum(debit-credit) \
+ if not line or (line and not line[0].amount):
+ res_users_obj = self.pool.get('res.users')
+ res_currency_obj = self.pool.get('res.currency')
+ company_currency_id = res_users_obj.browse(cursor, user, user,
+ context=context).company_id.currency_id.id
+ if not currency_id:
+ currency_id = company_currency_id
+
+ cursor.execute('SELECT sum(debit-credit) \
FROM account_move_line \
WHERE (reconcile_id is null) \
AND partner_id = %s \
AND account_id=%s', (partner_id, account_id))
- res = cursor.fetchone()
- balance = res and res[0] or 0.0
+ pgres = cursor.fetchone()
+ balance = pgres and pgres[0] or 0.0
- balance = res_currency_obj.compute(cursor, user, company_currency_id,
+ balance = res_currency_obj.compute(cursor, user, company_currency_id,
currency_id, balance, context=context)
- return {'value': {'amount': balance, 'account_id': account_id}}
+ res['value']['amount'] = balance
+ return res
def _reconcile_amount(self, cursor, user, ids, name, args, context=None):
if not ids:
@@ -625,7 +630,7 @@ class account_bank_statement_line(osv.osv):
'statement_id': fields.many2one('account.bank.statement', 'Statement',
select=True, required=True, ondelete='cascade'),
'reconcile_id': fields.many2one('account.bank.statement.reconcile',
- 'Reconcile', states={'confirm':[('readonly',True)]}),
+ 'Reconcile'),
'move_ids': fields.many2many('account.move',
'account_bank_statement_line_move_rel', 'move_id','statement_id',
'Moves'),
@@ -633,7 +638,7 @@ class account_bank_statement_line(osv.osv):
'note': fields.text('Notes'),
'reconcile_amount': fields.function(_reconcile_amount,
string='Amount reconciled', method=True, type='float'),
- 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bank statement line."),
+ 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of bank statement lines."),
}
_defaults = {
'name': lambda self,cr,uid,context={}: self.pool.get('ir.sequence').get(cr, uid, 'account.bank.statement.line'),
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 2ce4324f7c6..2da7c71021c 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -478,9 +478,11 @@
-
-
+
+
+
+
res.partner.invoice.info.inheritres.partner
diff --git a/addons/account/account_invoice_workflow.xml b/addons/account/account_invoice_workflow.xml
index 374a436e9ac..4c919765596 100644
--- a/addons/account/account_invoice_workflow.xml
+++ b/addons/account/account_invoice_workflow.xml
@@ -50,7 +50,7 @@ write({'state':'open'})
paid
- write({'state':'paid'})
+ confirm_paid()functionsubflow.paid
diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml
index 37d539a4b25..a2d18095618 100644
--- a/addons/account/account_menuitem.xml
+++ b/addons/account/account_menuitem.xml
@@ -22,6 +22,7 @@
groups="group_account_user"/>
+
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index a86fce20772..36b65d20dca 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -30,7 +30,7 @@ import tools
class account_move_line(osv.osv):
_name = "account.move.line"
- _description = "Entry lines"
+ _description = "Entry Lines"
def _query_get(self, cr, uid, obj='l', context={}):
fiscalyear_obj = self.pool.get('account.fiscalyear')
@@ -577,11 +577,12 @@ class account_move_line(osv.osv):
merges_rec = []
for line in self.browse(cr, uid, ids, context):
if line.reconcile_id:
- raise osv.except_osv(_('Already Reconciled'), _('Already Reconciled'))
+ raise osv.except_osv(_('Warning'), _('Already Reconciled!'))
if line.reconcile_partial_id:
for line2 in line.reconcile_partial_id.line_partial_ids:
if not line2.reconcile_id:
- merges.append(line2.id)
+ if line2.id not in merges:
+ merges.append(line2.id)
total += (line2.debit or 0.0) - (line2.credit or 0.0)
merges_rec.append(line.reconcile_partial_id.id)
else:
@@ -774,6 +775,17 @@ class account_move_line(osv.osv):
result['fields'] = self.fields_get(cr, uid, fields, context)
return result
+ def _check_moves(self, cr, uid, context):
+ # use the first move ever created for this journal and period
+ cr.execute('select id, state, name from account_move where journal_id=%s and period_id=%s order by id limit 1', (context['journal_id'],context['period_id']))
+ res = cr.fetchone()
+ if res:
+ if res[1] != 'draft':
+ raise osv.except_osv(_('UserError'),
+ _('The account move (%s) for centralisation ' \
+ 'has been confirmed!') % res[2])
+ return res
+
def unlink(self, cr, uid, ids, context={}, check=True):
self._update_check(cr, uid, ids, context)
result = False
@@ -809,7 +821,7 @@ class account_move_line(osv.osv):
return True
def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True):
- if not context:
+ if context is None:
context={}
if vals.get('account_tax_id', False):
raise osv.except_osv(_('Unable to change tax !'), _('You can not change the tax, you should remove and recreate lines !'))
@@ -825,6 +837,24 @@ class account_move_line(osv.osv):
if vals.get('date', False):
todo_date = vals['date']
del vals['date']
+
+ for line in self.browse(cr, uid, ids,context=context):
+ ctx = context.copy()
+ if ('journal_id' not in ctx):
+ if line.move_id:
+ ctx['journal_id'] = line.move_id.journal_id.id
+ else:
+ ctx['journal_id'] = line.journal_id.id
+ if ('period_id' not in ctx):
+ if line.move_id:
+ ctx['period_id'] = line.move_id.period_id.id
+ else:
+ ctx['period_id'] = line.period_id.id
+ #Check for centralisation
+ journal = self.pool.get('account.journal').browse(cr, uid, ctx['journal_id'], context=ctx)
+ if journal.centralisation:
+ self._check_moves(cr, uid, context=ctx)
+
result = super(account_move_line, self).write(cr, uid, ids, vals, context)
if check:
@@ -891,14 +921,9 @@ class account_move_line(osv.osv):
is_new_move = False
if not move_id:
if journal.centralisation:
- # use the first move ever created for this journal and period
- cr.execute('select id, state, name from account_move where journal_id=%s and period_id=%s order by id limit 1', (context['journal_id'],context['period_id']))
- res = cr.fetchone()
+ #Check for centralisation
+ res = self._check_moves(cr, uid, context)
if res:
- if res[1] != 'draft':
- raise osv.except_osv(_('UserError'),
- _('The Ledger Posting (%s) for centralisation ' \
- 'has been confirmed!') % res[2])
vals['move_id'] = res[0]
if not vals.get('move_id', False):
@@ -926,7 +951,7 @@ class account_move_line(osv.osv):
break
if journal.account_control_ids and not ok:
for a in journal.account_control_ids:
- if a.id==vals['account_id']:
+ if a.id == vals['account_id']:
ok = True
break
if (account.currency_id) and 'amount_currency' not in vals and account.currency_id.id <> company_currency:
@@ -941,7 +966,7 @@ class account_move_line(osv.osv):
if not ok:
raise osv.except_osv(_('Bad account !'), _('You can not use this general account in this journal !'))
- if 'analytic_account_id' in vals and vals['analytic_account_id']:
+ if vals.get('analytic_account_id',False):
if journal.analytic_journal_id:
vals['analytic_lines'] = [(0,0, {
'name': vals['name'],
@@ -961,8 +986,8 @@ class account_move_line(osv.osv):
result = super(osv.osv, self).create(cr, uid, vals, context)
# CREATE Taxes
- if 'account_tax_id' in vals and vals['account_tax_id']:
- tax_id=tax_obj.browse(cr,uid,vals['account_tax_id'])
+ if vals.get('account_tax_id',False):
+ tax_id = tax_obj.browse(cr, uid, vals['account_tax_id'])
total = vals['debit'] - vals['credit']
if journal.refund_journal:
base_code = 'ref_base_code_id'
@@ -978,7 +1003,7 @@ class account_move_line(osv.osv):
tax_sign = 'tax_sign'
tmp_cnt = 0
- for tax in tax_obj.compute(cr,uid,[tax_id],total,1.00):
+ for tax in tax_obj.compute(cr, uid, [tax_id], total, 1.00):
#create the base movement
if tmp_cnt == 0:
if tax[base_code]:
@@ -1031,7 +1056,7 @@ class account_move_line(osv.osv):
# if context and ('__last_update' in context):
# del context['__last_update']
# self.pool.get('account.move').write(cr, uid, [move_id], {'date':vals['date']}, context=context)
- if check and not context.get('no_store_function'):
+ if check and ((not context.get('no_store_function')) or journal.entry_posted):
tmp = self.pool.get('account.move').validate(cr, uid, [vals['move_id']], context)
if journal.entry_posted and tmp:
self.pool.get('account.move').button_validate(cr,uid, [vals['move_id']],context)
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index 5e514041d1d..1edb56d6044 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -351,7 +351,7 @@
-
+
@@ -531,7 +531,10 @@
+
+
+
@@ -551,6 +554,7 @@
+
@@ -562,7 +566,7 @@
-
+
-
+
@@ -1453,9 +1457,11 @@
-
+
-
+
+
+ Account Add wizard
diff --git a/addons/account/i18n/eu.po b/addons/account/i18n/eu.po
index 68a84f413de..84652c621ae 100644
--- a/addons/account/i18n/eu.po
+++ b/addons/account/i18n/eu.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-17 13:10+0000\n"
-"Last-Translator: Jon A. Ortuondo (Euskotec) \n"
+"PO-Revision-Date: 2010-05-23 09:59+0000\n"
+"Last-Translator: ninaiz \n"
"Language-Team: Basque \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-18 05:15+0000\n"
+"X-Launchpad-Export-Date: 2010-05-24 03:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -236,7 +236,7 @@ msgstr ""
#: field:account.tax.template,amount:0
#: xsl:account.transfer:0
msgid "Amount"
-msgstr ""
+msgstr "Kopurua"
#. module: account
#: model:ir.actions.report.xml,name:account.account_3rdparty_ledger
@@ -338,7 +338,7 @@ msgstr ""
#: field:account.invoice,amount_tax:0
#: field:account.move.line,account_tax_id:0
msgid "Tax"
-msgstr ""
+msgstr "Zerga"
#. module: account
#: rml:account.general.journal:0
@@ -465,7 +465,7 @@ msgstr ""
#. module: account
#: rml:account.invoice:0
msgid "Disc.(%)"
-msgstr ""
+msgstr "Desk. (%)"
#. module: account
#: rml:account.general.ledger:0
diff --git a/addons/account/i18n/fr.po b/addons/account/i18n/fr.po
index 1785d79bf38..e6bddde1647 100644
--- a/addons/account/i18n/fr.po
+++ b/addons/account/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-02-18 09:24+0000\n"
-"Last-Translator: Olivier Dony (OpenERP) \n"
+"PO-Revision-Date: 2010-05-21 17:48+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:06+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -2495,7 +2495,8 @@ msgid "Analytic Entry"
msgstr "Ecriture analytique"
#. module: account
-#: view:res.company:0 field:res.company,overdue_msg:0
+#: view:res.company:0
+#: field:res.company,overdue_msg:0
msgid "Overdue Payments Message"
msgstr "Message pour les paiements en retard"
@@ -2784,7 +2785,7 @@ msgstr "Ouvrir journal"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "KI"
-msgstr ""
+msgstr "KI"
#. module: account
#: model:ir.actions.wizard,name:account.action_account_analytic_line
@@ -3034,7 +3035,7 @@ msgstr "-"
#. module: account
#: rml:account.analytic.account.journal:0
msgid "asgfas"
-msgstr ""
+msgstr "asgfas"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_analytic_account_tree2
@@ -6082,3 +6083,6 @@ msgid ""
msgstr ""
"Cochez cette case si l'utilisateur peut réconcilier les entrées dans ce "
"compte."
+
+#~ msgid "account.config.wizard"
+#~ msgstr "account.config.wizard"
diff --git a/addons/account/i18n/oc.po b/addons/account/i18n/oc.po
index 53532fba0ac..180ce8da31a 100644
--- a/addons/account/i18n/oc.po
+++ b/addons/account/i18n/oc.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-03-13 10:33+0000\n"
-"Last-Translator: Cédric VALMARY (Per Tot en òc) \n"
+"PO-Revision-Date: 2010-05-18 08:45+0000\n"
+"Last-Translator: Cédric VALMARY (Tot en òc) \n"
"Language-Team: Occitan (post 1500) \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:07+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -175,7 +175,7 @@ msgstr ""
#. module: account
#: view:account.move:0
msgid "Total Credit"
-msgstr "Total crrdit"
+msgstr "Credit Total"
#. module: account
#: field:account.config.wizard,charts:0
@@ -255,7 +255,7 @@ msgstr "Taxas provesidors"
#. module: account
#: view:account.move:0
msgid "Total Debit"
-msgstr "Total debit"
+msgstr "Debit Total"
#. module: account
#: rml:account.tax.code.entries:0
@@ -808,7 +808,6 @@ msgstr ""
msgid "Move Lines"
msgstr ""
-
#. module: account
#: model:ir.actions.act_window,name:account.report_account_analytic_journal_tree
#: model:ir.ui.menu,name:account.report_account_analytic_journal_print
@@ -2136,7 +2135,8 @@ msgid "Analytic Entry"
msgstr ""
#. module: account
-#: view:res.company:0 field:res.company,overdue_msg:0
+#: view:res.company:0
+#: field:res.company,overdue_msg:0
msgid "Overdue Payments Message"
msgstr ""
diff --git a/addons/account/i18n/th.po b/addons/account/i18n/th.po
index 320fdc82290..7389cdda788 100644
--- a/addons/account/i18n/th.po
+++ b/addons/account/i18n/th.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-03-15 03:12+0000\n"
+"PO-Revision-Date: 2010-05-20 07:09+0000\n"
"Last-Translator: Songpon Phusing \n"
"Language-Team: Thai
\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:08+0000\n"
+"X-Launchpad-Export-Date: 2010-05-21 03:38+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: account
@@ -51,7 +51,7 @@ msgstr ""
#. module: account
#: model:account.account.type,name:account.account_type_asset
msgid "Asset"
-msgstr ""
+msgstr "สินทรัพย์"
#. module: account
#: constraint:ir.actions.act_window:0
@@ -106,7 +106,7 @@ msgstr ""
#: model:ir.actions.wizard,name:account.wizard_vat_declaration
#: model:ir.ui.menu,name:account.menu_wizard_vat_declaration
msgid "Print Taxes Report"
-msgstr ""
+msgstr "พิมพ์รายงานภาษี"
#. module: account
#: field:account.account,parent_id:0
@@ -2133,7 +2133,8 @@ msgid "Analytic Entry"
msgstr ""
#. module: account
-#: view:res.company:0 field:res.company,overdue_msg:0
+#: view:res.company:0
+#: field:res.company,overdue_msg:0
msgid "Overdue Payments Message"
msgstr ""
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index 34c7aa3e6ba..dbaa321f329 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -23,8 +23,8 @@ import time
import decimal_precision as dp
import netsvc
+
from osv import fields, osv, orm
-import ir
import pooler
from tools import config
from tools.translate import _
@@ -217,6 +217,7 @@ class account_invoice(osv.osv):
_name = "account.invoice"
_description = 'Invoice'
_order = "number"
+ _log_create = True
_columns = {
'name': fields.char('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."),
@@ -333,7 +334,14 @@ class account_invoice(osv.osv):
raise orm.except_orm(_('Configuration Error!'),
_('There is no Accounting Journal of type Sale/Purchase defined!'))
else:
- raise
+ raise orm.except_orm(_('UnknownError'), str(e))
+
+ def confirm_paid(self, cr, uid, ids, context=None):
+ self.write(cr, uid, ids, {'state':'paid'}, context=context)
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Document ') + " '" + name + "' "+ _("has been paid.")
+ self.log(cr, uid, id, message)
+ return True
def unlink(self, cr, uid, ids, context=None):
invoices = self.read(cr, uid, ids, ['state'])
@@ -350,7 +358,7 @@ class account_invoice(osv.osv):
# res = self.pool.get('res.partner').address_get(cr, uid, [part], ['invoice'])
# return [{}]
def onchange_partner_id(self, cr, uid, ids, type, partner_id,
- date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
+ date_invoice=False, payment_term=False, partner_bank=False, company_id=False):
invoice_addr_id = False
contact_addr_id = False
partner_payment_term = False
@@ -415,7 +423,7 @@ class account_invoice(osv.osv):
else:
result['value']['date_due'] = False
- if partner_bank_id != bank_id:
+ if partner_bank != bank_id:
to_update = self.onchange_partner_bank(cr, uid, ids, bank_id)
result['value'].update(to_update['value'])
return result
@@ -450,7 +458,7 @@ class account_invoice(osv.osv):
def onchange_invoice_line(self, cr, uid, ids, lines):
return {}
- def onchange_partner_bank(self, cursor, user, ids, partner_bank_id):
+ def onchange_partner_bank(self, cursor, user, ids, partner_bank):
return {'value': {}}
def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id):
@@ -650,6 +658,16 @@ class account_invoice(osv.osv):
self.write(cr, uid, [inv.id], res['value'])
return True
+ def finalize_invoice_move_lines(self, cr, uid, invoice_browse, move_lines):
+ """finalize_invoice_move_lines(cr, uid, invoice, move_lines) -> move_lines
+ Hook method to be overridden in additional modules to verify and possibly alter the
+ move lines to be created by an invoice, for special cases.
+ :param invoice_browse: browsable record of the invoice that is generating the move lines
+ :param move_lines: list of dictionaries with the account.move.lines (as for create())
+ :return: the (possibly updated) final move_lines to create for this invoice
+ """
+ return move_lines
+
def check_tax_lines(self, cr, uid, inv, compute_taxes, ait_obj):
if not inv.tax_line:
for tax in compute_taxes.values():
@@ -912,7 +930,12 @@ class account_invoice(osv.osv):
# will be automatically deleted too
account_move_obj.unlink(cr, uid, [i['move_id'][0]])
if i['payment_ids']:
- self.pool.get('account.move.line').write(cr, uid, i['payment_ids'], {'reconcile_partial_id': False})
+ account_move_line_obj = self.pool.get('account.move.line')
+ pay_ids = account_move_line_obj.browse(cr, uid , i['payment_ids'])
+ for move_line in pay_ids:
+ if move_line.reconcile_partial_id and move_line.reconcile_partial_id.line_partial_ids:
+ raise osv.except_osv(_('Error !'), _('You cannot cancel the Invoice which is Partially Paid! You need to unreconcile concerned payment entries!'))
+
self.write(cr, uid, ids, {'state':'cancel', 'move_id':False})
self._log_event(cr, uid, ids,-1.0, 'Cancel Invoice')
return True
@@ -1147,14 +1170,14 @@ class account_invoice_line(osv.osv):
t = t - (p * l[2].get('quantity'))
taxes = l[2].get('invoice_line_tax_id')
if len(taxes[0]) >= 3 and taxes[0][2]:
- taxes=tax_obj.browse(cr, uid, taxes[0][2])
+ taxes = tax_obj.browse(cr, uid, taxes[0][2])
for tax in tax_obj.compute(cr, uid, taxes, p,l[2].get('quantity'), context.get('address_invoice_id', False), l[2].get('product_id', False), context.get('partner_id', False)):
t = t - tax['amount']
return t
return 0
_name = "account.invoice.line"
- _description = "Invoice line"
+ _description = "Invoice Line"
_columns = {
'name': fields.char('Description', size=256, required=True),
'origin': fields.char('Origin', size=256, help="Reference of the document that produced this invoice."),
@@ -1200,8 +1223,8 @@ class account_invoice_line(osv.osv):
part = self.pool.get('res.partner').browse(cr, uid, partner_id)
fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False
- lang=part.lang
- context.update({'lang': lang})
+ if part.lang:
+ context.update({'lang': part.lang})
result = {}
res = self.pool.get('product.product').browse(cr, uid, product, context=context)
diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml
index 494c0f71a48..edbe704d4db 100644
--- a/addons/account/partner_view.xml
+++ b/addons/account/partner_view.xml
@@ -113,6 +113,7 @@
+
diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml
index 71e57cb82e2..e57629d2618 100644
--- a/addons/account/project/project_view.xml
+++ b/addons/account/project/project_view.xml
@@ -25,13 +25,13 @@
-
+
@@ -97,6 +97,7 @@
formtree,graph,form
+ {"search_default_user_id":uid}
@@ -188,11 +189,11 @@
-
+
@@ -202,6 +203,7 @@
ir.actions.act_windowaccount.analytic.lineform
+ {"search_default_user_id":uid}
diff --git a/addons/account/project/report/analytic_check.py b/addons/account/project/report/analytic_check.py
index 54fbaddc4d9..458827d8bf3 100644
--- a/addons/account/project/report/analytic_check.py
+++ b/addons/account/project/report/analytic_check.py
@@ -54,12 +54,12 @@ class account_analytic_analytic_check(report_sxw.rml_parse):
self.cr.execute("SELECT abs(sum(amount)) AS balance \
FROM account_analytic_line \
- WHERE date>=%s AND date<=%s AND amount>0 AND general_account_id = %s", (date1, date2, a['id']))
+ WHERE date>=%s AND date<=%s AND amount<0 AND general_account_id = %s", (date1, date2, a['id']))
(ad,) = self.cr.fetchone()
ad = ad or 0.0
self.cr.execute("SELECT abs(sum(amount)) AS balance \
FROM account_analytic_line \
- WHERE date>=%s AND date<=%s AND amount<0 AND general_account_id = %s", (date1, date2, a['id']))
+ WHERE date>=%s AND date<=%s AND amount>0 AND general_account_id = %s", (date1, date2, a['id']))
(ac,) = self.cr.fetchone()
ac = ac or 0.0
diff --git a/addons/account/report/__init__.py b/addons/account/report/__init__.py
index 09ff866d1a8..b411e404cac 100644
--- a/addons/account/report/__init__.py
+++ b/addons/account/report/__init__.py
@@ -37,6 +37,8 @@ import compare_account_balance
import account_invoice_report
import account_report
import account_analytic_report
-
+import account_account_report
+import account_entries_report
+import account_analytic_entries_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/report/account_account_report.py b/addons/account/report/account_account_report.py
new file mode 100644
index 00000000000..55e5d7030c7
--- /dev/null
+++ b/addons/account/report/account_account_report.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import tools
+from osv import fields,osv
+
+class account_account_report(osv.osv):
+ _name = "account.account.report"
+ _description = "Account Report"
+ _auto = False
+ _columns = {
+ 'name': fields.char('Name', size=128, readonly=True),
+ 'code': fields.char('Code', size=64, readonly=True),
+ 'type': fields.selection([
+ ('receivable', 'Receivable'),
+ ('payable', 'Payable'),
+ ('view', 'View'),
+ ('consolidation', 'Consolidation'),
+ ('other', 'Others'),
+ ('closed', 'Closed'),
+ ], 'Internal Type', readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
+ 'currency_mode': fields.selection([('current', 'At Date'), ('average', 'Average Rate')], 'Outgoing Currencies Rate',readonly=True),
+ 'user_type': fields.many2one('account.account.type', 'Account Type',readonly=True),
+ 'quantity': fields.float('Quantity', readonly=True),
+ 'amount_total': fields.float('Total Amount', readonly=True),
+ 'credit': fields.float('Credit', readonly=True),
+ 'debit': fields.float('Debit', readonly=True),
+ 'balance': fields.float('Balance', readonly=True),
+ 'nbr': fields.integer('#Accounts', readonly=True),
+ 'parent_account_id': fields.many2one('account.account', 'Parent Account', required=True),
+ }
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'account_account_report')
+ cr.execute("""
+ create or replace view account_account_report as (
+ select
+ min(a.id) as id,
+ count(distinct a.id) as nbr,
+ a.name,
+ a.code,
+ a.type as type,
+ a.company_id as company_id,
+ a.currency_mode as currency_mode,
+ a.user_type as user_type,
+ a.parent_id as parent_account_id,
+ sum(ail.quantity) as quantity,
+ sum(ail.price_subtotal) as amount_total,
+ sum(m.credit) as credit,
+ sum(m.debit) as debit,
+ (sum(m.credit)-sum(m.debit)) as balance
+ from
+ account_account as a
+ left join account_move_line as m on m.account_id=a.id
+ left join account_invoice_line as ail on ail.account_id=a.id
+ left join account_invoice as ai on ai.account_id=a.id
+ group by
+ a.name,
+ a.code,
+ a.type,
+ a.company_id,
+ a.currency_mode,
+ a.user_type,
+ m.account_id,
+ a.parent_id
+ )
+ """)
+account_account_report()
diff --git a/addons/account/report/account_account_report_view.xml b/addons/account/report/account_account_report_view.xml
new file mode 100644
index 00000000000..32e77be341f
--- /dev/null
+++ b/addons/account/report/account_account_report_view.xml
@@ -0,0 +1,92 @@
+
+
+
+
+ account.account.report.tree
+ account.account.report
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.account.report.graph
+ account.account.report
+ graph
+
+
+
+
+
+
+
+
+
+
+
+ account.account.report.search
+ account.account.report
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Accounts
+ account.account.report
+ form
+ tree,graph
+ {"search_default_Account":1,"search_default_At Date":1,'group_by_no_leaf':1,'group_by':[]}
+
+
+
+
+
+
+
diff --git a/addons/account/report/account_analytic_entries_report.py b/addons/account/report/account_analytic_entries_report.py
new file mode 100644
index 00000000000..2a1b4ad993b
--- /dev/null
+++ b/addons/account/report/account_analytic_entries_report.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import tools
+from osv import fields,osv
+
+class analytic_entries_report(osv.osv):
+ _name = "analytic.entries.report"
+ _description = "Analytic Entries Statistics"
+ _auto = False
+ _columns = {
+ 'date': fields.date('Date', readonly=True),
+ 'year': fields.char('Year', size=4, readonly=True),
+ 'day': fields.char('Day', size=128, readonly=True),
+ 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
+ ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
+ ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'user_id' : fields.many2one('res.users', 'User',readonly=True),
+ 'name': fields.char('Description', size=64, readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
+ 'currency_id': fields.many2one('res.currency', 'Currency', required=True),
+ 'account_id': fields.many2one('account.analytic.account', 'Account', required=True),
+ 'general_account_id': fields.many2one('account.account', 'General Account', required=True),
+ 'journal_id': fields.many2one('account.analytic.journal', 'Journal', required=True),
+ 'move_id': fields.many2one('account.move.line', 'Move', required=True),
+ 'product_id': fields.many2one('product.product', 'Product', required=True),
+ 'product_uom_id': fields.many2one('product.uom', 'Product UOM', required=True),
+ 'amount': fields.float('Amount', readonly=True),
+ 'unit_amount': fields.float('Unit Amount', readonly=True),
+ 'amount_currency': fields.float('Amount Currency', readonly=True),
+ 'nbr': fields.integer('#Entries', readonly=True),
+ }
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'analytic_entries_report')
+ cr.execute("""
+ create or replace view analytic_entries_report as (
+ select
+ min(a.id) as id,
+ count(distinct a.id) as nbr,
+ a.create_date as date,
+ to_char(a.create_date, 'YYYY') as year,
+ to_char(a.create_date, 'MM') as month,
+ to_char(a.create_date, 'YYYY-MM-DD') as day,
+ a.user_id as user_id,
+ a.name as name,
+ a.company_id as company_id,
+ a.currency_id as currency_id,
+ a.account_id as account_id,
+ a.general_account_id as general_account_id,
+ a.journal_id as journal_id,
+ a.move_id as move_id,
+ a.product_id as product_id,
+ a.product_uom_id as product_uom_id,
+ sum(a.amount) as amount,
+ sum(a.unit_amount) as unit_amount,
+ sum(a.amount_currency) as amount_currency
+ from
+ account_analytic_line a
+ group by
+ a.create_date, a.user_id,a.name,company_id,a.currency_id,
+ a.account_id,a.general_account_id,a.journal_id,
+ a.move_id,a.product_id,a.product_uom_id
+ )
+ """)
+analytic_entries_report()
diff --git a/addons/account/report/account_analytic_entries_report_view.xml b/addons/account/report/account_analytic_entries_report_view.xml
new file mode 100644
index 00000000000..41d9c0976f2
--- /dev/null
+++ b/addons/account/report/account_analytic_entries_report_view.xml
@@ -0,0 +1,112 @@
+
+
+
+
+ analytic.entries.report.tree
+ analytic.entries.report
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ analytic.entries.report.search
+ analytic.entries.report
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.analytic.entries.graph
+ analytic.entries.report
+ graph
+
+
+
+
+
+
+
+
+
+
+ Analytic Entries
+ analytic.entries.report
+ form
+ tree,graph
+ {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+
+
+
+
+
+
+
diff --git a/addons/account/report/account_analytic_report.py b/addons/account/report/account_analytic_report.py
index 45057d950bd..87912b4a3ef 100644
--- a/addons/account/report/account_analytic_report.py
+++ b/addons/account/report/account_analytic_report.py
@@ -35,7 +35,7 @@ class analytic_report(osv.osv):
'parent_id': fields.many2one('account.analytic.account', 'Parent Analytic Account', readonly=True),
'user_id' : fields.many2one('res.users', 'Account Manager',readonly=True),
'product_id' : fields.many2one('product.product', 'Product',readonly=True),
- 'quantity': fields.float('Quantity',readonly=True),
+ 'total_quantity': fields.float('# Total Quantity',readonly=True),
'debit' : fields.float('Debit',readonly=True),
'credit' : fields.float('Credit',readonly=True),
'balance' : fields.float('Balance',readonly=True),
@@ -43,6 +43,11 @@ class analytic_report(osv.osv):
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'day': fields.char('Day', size=128, readonly=True),
+ 'nbr':fields.integer('# of Lines', readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', readonly=True),
+ 'type': fields.selection([('view','View'), ('normal','Normal')], 'Account Type'),
+
'state': fields.selection([('draft','Draft'),
('open','Open'),
('pending','Pending'),
@@ -50,6 +55,7 @@ class analytic_report(osv.osv):
('close','Close'),
('template', 'Template')],
'State', readonly=True),
+
}
_order = 'date_start desc'
def init(self, cr):
@@ -60,15 +66,18 @@ class analytic_report(osv.osv):
min(s.id) as id,
to_char(s.create_date, 'YYYY') as year,
to_char(s.create_date, 'MM') as month,
+ to_char(s.create_date, 'YYYY-MM-DD') as day,
l.journal_id,
l.product_id,
s.parent_id,
s.date_start,
s.date as date_end,
s.user_id,
+ s.company_id,
+ s.type,
s.name,
s.partner_id,
- s.quantity,
+ sum(s.quantity) as total_quantity,
s.debit,
s.credit,
s.balance,
@@ -77,7 +86,8 @@ class analytic_report(osv.osv):
from account_analytic_account s
left join account_analytic_line l on (s.id=l.account_id)
GROUP BY s.create_date,s.state,l.journal_id,s.name,
- s.partner_id,s.date_start,s.date,s.user_id,s.quantity,
+ s.partner_id,s.date_start,s.date,s.user_id,
+ s.company_id,s.type,
s.debit,s.credit,s.balance,s.parent_id,l.product_id
)
""")
diff --git a/addons/account/report/account_analytic_report_view.xml b/addons/account/report/account_analytic_report_view.xml
index de97bfcb798..838cefe5898 100644
--- a/addons/account/report/account_analytic_report_view.xml
+++ b/addons/account/report/account_analytic_report_view.xml
@@ -9,23 +9,26 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
+
-
analytic.report.searchanalytic.report
@@ -38,23 +41,15 @@
domain="[('year','=',time.strftime('%%Y'))]"/>
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -70,40 +77,59 @@
string="Template"
domain="[('state','=','template')]"/>
+
-
-
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
-
+
+ account.analytic.report.graph
+ analytic.report
+ graph
+
+
+
+
+
+
+
+
+
+ Analytic Accountsanalytic.reportform
- tree
- {'search_default_User':1,'search_default_user_id':uid}
+ tree,graph
+ {'search_default_This Month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
-
-
+
diff --git a/addons/account/report/account_entries_report.py b/addons/account/report/account_entries_report.py
new file mode 100644
index 00000000000..85ba8a058f7
--- /dev/null
+++ b/addons/account/report/account_entries_report.py
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import tools
+from osv import fields,osv
+
+class account_entries_report(osv.osv):
+ _name = "account.entries.report"
+ _description = "Entries"
+ _auto = False
+ _rec_name = 'date'
+ _columns = {
+ 'date': fields.date('Effective Date', readonly=True),
+ 'date_created': fields.date('Date Created', readonly=True),
+ 'date_maturity': fields.date('Date Maturity', readonly=True),
+ 'nbr':fields.integer('# of Entries', readonly=True),
+ 'nbl':fields.integer('# of Lines', readonly=True),
+ 'amount': fields.float('Amount',readonly=True),
+ 'year': fields.char('Year', size=4, readonly=True),
+ 'day': fields.char('Day', size=128, readonly=True),
+ 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
+ ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
+ ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'ref': fields.char('Reference', size=64,readonly=True),
+ 'period_id': fields.many2one('account.period', 'Period', readonly=True),
+ 'account_id': fields.many2one('account.account', 'Account', readonly=True),
+ 'journal_id': fields.many2one('account.journal', 'Journal', readonly=True),
+ 'product_id': fields.many2one('product.product', 'Product', readonly=True),
+ 'state': fields.selection([('draft','Draft'), ('posted','Posted')], 'State',readonly=True,
+ help='When new account move is created the state will be \'Draft\'. When all the payments are done it will be in \'Posted\' state.'),
+ 'state_2': fields.selection([('draft','Draft'), ('valid','Valid')], 'State of Move Line', readonly=True,
+ help='When new move line is created the state will be \'Draft\'.\n* When all the payments are done it will be in \'Valid\' state.'),
+ 'partner_id': fields.many2one('res.partner','Partner', readonly=True),
+ 'period_id2': fields.many2one('account.period', 'Move Line Period', readonly=True),
+ 'analytic_account_id' : fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
+ 'journal_id2': fields.many2one('account.journal', 'Move Line Journal', readonly=True),
+ 'type': fields.selection([
+ ('pay_voucher','Cash Payment'),
+ ('bank_pay_voucher','Bank Payment'),
+ ('rec_voucher','Cash Receipt'),
+ ('bank_rec_voucher','Bank Receipt'),
+ ('cont_voucher','Contra'),
+ ('journal_sale_vou','Journal Sale'),
+ ('journal_pur_voucher','Journal Purchase'),
+ ('journal_voucher','Journal Voucher'),
+ ],'Type',readonly=True),
+ 'quantity': fields.float('Products Quantity', digits=(16,2), readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', readonly=True),
+ }
+ _order = 'date desc'
+
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'account_entries_report')
+ cr.execute("""
+ create or replace view account_entries_report as (
+ select
+ min(l.id) as id,
+ am.ref as ref,
+ sum(l.quantity) as quantity,
+ am.state as state,
+ l.state as state_2,
+ am.date as date,
+ count(l.id) as nbr,
+ count(distinct am.id) as nbl,
+ l.debit as amount,
+ to_char(am.date, 'YYYY') as year,
+ to_char(am.date, 'MM') as month,
+ to_char(am.date, 'YYYY-MM-DD') as day,
+ am.company_id as company_id,
+ l.account_id as account_id,
+ l.analytic_account_id as analytic_account_id,
+ l.date_created as date_created,
+ l.date_maturity as date_maturity,
+ am.journal_id as journal_id,
+ l.journal_id as journal_id2,
+ l.period_id as period_id2,
+ am.period_id as period_id,
+ l.partner_id as partner_id,
+ l.product_id as product_id,
+ am.type as type
+ from
+ account_move_line l
+ left join
+ account_move am on (am.id=l.move_id)
+ group by am.ref,
+ am.state,
+ am.date,
+ am.company_id,
+ am.journal_id,
+ l.journal_id,
+ am.period_id,
+ l.period_id,
+ am.type,
+ l.partner_id,
+ l.analytic_account_id,
+ l.product_id,
+ l.date_created,
+ l.date_maturity,
+ l.account_id,
+ l.state,
+ l.debit
+ )
+ """)
+
+account_entries_report()
diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml
new file mode 100644
index 00000000000..c6308ec9928
--- /dev/null
+++ b/addons/account/report/account_entries_report_view.xml
@@ -0,0 +1,127 @@
+
+
+
+
+ account.entries.report.tree
+ account.entries.report
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ account.entries.report.graph
+ account.entries.report
+ graph
+
+
+
+
+
+
+
+
+ account.entries.report.search
+ account.entries.report
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Entries
+ account.entries.report
+ form
+ tree,graph
+ {'search_default_This Month':1,'search_default_Journal':1,'group_by_no_leaf':1,'group_by':[]}
+
+
+
+
+
diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py
index 36fa5a0d132..cd1477e79cf 100644
--- a/addons/account/report/account_invoice_report.py
+++ b/addons/account/report/account_invoice_report.py
@@ -61,6 +61,13 @@ class account_invoice_report(osv.osv):
('paid','Done'),
('cancel','Cancelled')
], 'Order State', readonly=True),
+ 'date_due': fields.date('Due Date', readonly=True),
+ 'address_contact_id': fields.many2one('res.partner.address', 'Contact Address Name', readonly=True),
+ 'address_invoice_id': fields.many2one('res.partner.address', 'Invoice Address Name', readonly=True),
+ 'account_id': fields.many2one('account.account', 'Account',readonly=True),
+ 'partner_bank': fields.many2one('res.partner.bank', 'Bank Account',readonly=True),
+ 'residual':fields.float('Total Residual', readonly=True),
+ 'delay_to_pay':fields.float('Avg. Delay To Pay', readonly=True, group_operator="avg"),
}
_order = 'date desc'
def init(self, cr):
@@ -87,12 +94,24 @@ class account_invoice_report(osv.osv):
(sum(l.quantity*l.price_unit)/sum(l.quantity * u.factor))::decimal(16,2) as price_average,
count(*) as nbr,
s.type as type,
- s.state
- from
+ s.state,
+ s.date_due as date_due,
+ s.address_contact_id as address_contact_id,
+ s.address_invoice_id as address_invoice_id,
+ s.account_id as account_id,
+ s.partner_bank as partner_bank,
+ s.residual as residual,
+ case when s.state != 'paid' then null else
+ extract(epoch from avg(am.date_created-l.create_date))/(24*60*60)::decimal(16,2)
+ end as delay_to_pay
+ from
account_invoice_line l
left join
account_invoice s on (s.id=l.invoice_id)
- left join product_uom u on (u.id=l.uos_id)
+ left join product_uom u on (u.id=l.uos_id),
+ account_move_line am left join account_invoice i on (i.move_id=am.move_id)
+ where
+ am.account_id=i.account_id
group by
s.type,
s.date_invoice,
@@ -101,12 +120,18 @@ class account_invoice_report(osv.osv):
l.uos_id,
s.user_id,
s.state,
+ s.residual,
s.company_id,
s.payment_term,
s.period_id,
s.fiscal_position,
s.currency_id,
- s.journal_id
+ s.journal_id,
+ s.date_due,
+ s.address_contact_id,
+ s.address_invoice_id,
+ s.account_id,
+ s.partner_bank
)
""")
account_invoice_report()
diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index 5a833e454fb..b974afdb8a3 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -17,7 +17,6 @@
-
@@ -27,6 +26,13 @@
+
+
+
+
+
+
+
@@ -49,14 +55,14 @@
search
-
-
+
-
+
+ help="Invoices of last 30 days"/>
+
-
-
-
-
+
+
-
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
-
+
-
+
@@ -141,11 +147,11 @@
account.invoice.reportformtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[],'search_default_user_id':uid}
-
+
diff --git a/addons/account/report/account_report_view.xml b/addons/account/report/account_report_view.xml
index f0f67b477e3..9b1688730aa 100644
--- a/addons/account/report/account_report_view.xml
+++ b/addons/account/report/account_report_view.xml
@@ -47,7 +47,7 @@
formtree,graph
-
+
@@ -116,7 +116,7 @@
-
+
report.account.sales.tree
@@ -169,7 +169,7 @@
graph,tree
-
+
@@ -237,7 +237,7 @@
graph,tree
-
+
diff --git a/addons/account/report/overdue.rml b/addons/account/report/overdue.rml
index 2713b665d06..e8e1a7dc84c 100644
--- a/addons/account/report/overdue.rml
+++ b/addons/account/report/overdue.rml
@@ -84,8 +84,8 @@
+
- [[ repeatIn(objects,'o') ]][[ setLang(o.lang) ]]
@@ -177,16 +177,16 @@
[[ line['ref'] ]]
- [[ line['date_maturity'] ]]
+ [[ line['date_maturity'] and formatLang(line['date_maturity'],date=True) or '' ]]
- [[ formatLang(line['debit']) and formatLang(line['debit'] * (line['account_id']['type'] == 'payable' and -1 or 1)) ]]
+ [[ (line['account_id']['type'] == 'receivable' and formatLang(line['debit']) or 0) or (line['account_id']['type'] == 'payable' and formatLang(line['credit'] * -1) or ' ') ]]
- [[ formatLang(line['credit']) and formatLang(line['credit'] * (line['account_id']['type'] == 'payable' and -1 or 1)) ]]
+ [[ (line['account_id']['type'] == 'receivable' and formatLang(line['credit']) or 0) or (line['account_id']['type'] == 'payable' and formatLang(line['debit'] * -1) or 0) ]]
- [[ formatLang((line['date_maturity'] < time.strftime('%Y-%m-%d')) and ((line['debit'] - line['credit']) * (line['account_id']['type'] == 'payable' and -1 or 1))) ]]
+ [[ formatLang((line['date_maturity'] < time.strftime('%Y-%m-%d'))) and (line['debit'] - line['credit']) ]]
[[ line['blocked'] and 'X' or '' ]]
@@ -205,13 +205,13 @@
Sub-Total :
- [[ formatLang((reduce(lambda x, y: x + (y['debit'] * (y['account_id']['type'] == 'payable' and -1 or 1)), getLines(o), 0))) ]]
+ [[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['debit'] or 0) or (y['account_id']['type'] == 'payable' and y['credit'] * -1 or 0)), getLines(o), 0))) ]]
- [[ formatLang((reduce(lambda x ,y: x + (y['credit'] * (y['account_id']['type'] == 'payable' and -1 or 1)), getLines(o), 0))) ]]
+ [[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['credit'] or 0) or (y['account_id']['type'] == 'payable' and y['debit'] * -1 or 0)), getLines(o), 0))) ]]
-
-
-
-
-
-
- crm.case.history.select
- crm.case.history
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Histories
- crm.case.history
- form
- tree,form
-
-
-
diff --git a/addons/crm/i18n/es.po b/addons/crm/i18n/es.po
index aaf1103bcd8..d0b526f542e 100644
--- a/addons/crm/i18n/es.po
+++ b/addons/crm/i18n/es.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-18 05:15+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:11+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/i18n/it.po b/addons/crm/i18n/it.po
index 9a00ef01bb0..00d2f7958e5 100644
--- a/addons/crm/i18n/it.po
+++ b/addons/crm/i18n/it.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-02-24 10:59+0000\n"
-"Last-Translator: Carlo Vettore \n"
+"PO-Revision-Date: 2010-05-21 06:51+0000\n"
+"Last-Translator: eLBati - albatos.com \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:02+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
@@ -2506,7 +2506,7 @@ msgstr ""
#. module: crm
#: model:crm.case.categ,name:crm.categ_meet1
msgid "Customer Meeting"
-msgstr "Riunione del cliente"
+msgstr "Riunione con il cliente"
#. module: crm
#: wizard_field:crm.new.send.mail,init,doc2:0
diff --git a/addons/crm/i18n/pl.po b/addons/crm/i18n/pl.po
index 285b5cc25b8..a0d430695ac 100644
--- a/addons/crm/i18n/pl.po
+++ b/addons/crm/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-05-14 20:14+0000\n"
+"PO-Revision-Date: 2010-05-21 17:59+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-15 04:58+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
@@ -33,6 +33,7 @@ msgstr ""
msgid ""
"Check this if you want the rule to send an email to the responsible person."
msgstr ""
+"Zaznacz, jeśli chcesz aby reguła wysłała wiadomość do osoby odpowiedzialnej."
#. module: crm
#: view:crm.meeting:0
@@ -42,12 +43,12 @@ msgstr "Tytuł"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_categ2
msgid "Cases by section and category2"
-msgstr ""
+msgstr "Sprawy wg sekcji i kategorii"
#. module: crm
#: wizard_field:crm.lead.partner_create,init,close:0
msgid "Close Lead"
-msgstr "Zamknij ślad"
+msgstr "Zamknij sygnał"
#. module: crm
#: view:crm.job:0
@@ -60,12 +61,12 @@ msgstr " 7 Dni "
#. module: crm
#: help:crm.menu.config_wizard,helpdesk:0
msgid "Manages an Helpdesk service."
-msgstr ""
+msgstr "Zarządza usługą Helpdesku."
#. module: crm
#: view:crm.job:0
msgid "Pending Jobs"
-msgstr "Zadania Oczekujące"
+msgstr "Wstrzymane prace"
#. module: crm
#: field:crm.case.rule,trg_state_to:0
@@ -80,7 +81,7 @@ msgstr "Planowane koszty"
#. module: crm
#: wizard_field:crm.job.partner_create,init,close:0
msgid "Close job request"
-msgstr ""
+msgstr "Zamknij zgłoszenie pracy"
#. module: crm
#: field:crm.case.stage,name:0
@@ -95,7 +96,7 @@ msgstr "Nazwa etapu"
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act
#: model:ir.ui.menu,name:crm.next_id_51
msgid "Cases"
-msgstr "Przypadki"
+msgstr "Sprawy"
#. module: crm
#: help:crm.segmentation,categ_id:0
@@ -114,7 +115,7 @@ msgstr "Zasoby ludzkie"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_categ2
msgid "Cases by Opportunities, Category and Type"
-msgstr ""
+msgstr "Sprawy wg szans, kategorii i typów"
#. module: crm
#: help:crm.menu.config_wizard,claims:0
@@ -122,24 +123,24 @@ msgid ""
"Manages the supplier and customers claims, including your corrective or "
"preventive actions."
msgstr ""
-"Zarządza skargami dostawców i klientów, wliczając twoje działania naprawcze "
-"i prewencyjne."
+"Zarządza reklamacjami dostawców i klientów, oraz twoimi działaniami "
+"naprawczymi i prewencyjnymi."
#. module: crm
#: view:crm.fundraising:0
msgid "Amount"
-msgstr "Ilość"
+msgstr "Kwota"
#. module: crm
#: model:process.transition,note:crm.process_transition_opportunitymeeting0
msgid "Normal or phone meeting for opportunity"
-msgstr ""
+msgstr "Spotkanie albo rozmowa telefoniczna w sprawie szansy"
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim2
#: model:crm.case.stage,name:crm.stage_meet1
msgid "Fixed"
-msgstr ""
+msgstr "Naprawione"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -164,13 +165,13 @@ msgstr "Kampania"
#. module: crm
#: view:crm.opportunity:0
msgid "Search Opportunities"
-msgstr "Szukaj w Okazjach"
+msgstr "Szukaj szans"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_section_stage_tree
#: view:report.crm.case.section.stage:0
msgid "Cases by Section and Stage"
-msgstr "Przypadki w Sekcjach i Etapach"
+msgstr "Sprawy wg sekcji i etapów"
#. module: crm
#: wizard_field:crm.job.meeting_set,init,duration:0
@@ -198,8 +199,8 @@ msgid ""
"Section to which Case belongs to. Define Responsible user and Email account "
"for mail gateway."
msgstr ""
-"Sekcja do której należy Przypadek. Zdefiniuj odpowiedzialnego użytkownika "
-"oraz konto Email dla bramy pocztowej."
+"Sekcja do której należy Sprawa. Zdefiniuj odpowiedzialnego użytkownika oraz "
+"konto Email dla bramy pocztowej."
#. module: crm
#: view:crm.case:0
@@ -228,7 +229,7 @@ msgstr "Partner"
#: field:crm.case.stage,section_id:0
#: model:ir.model,name:crm.model_crm_case_section
msgid "Case Section"
-msgstr ""
+msgstr "Sekcja sprawy"
#. module: crm
#: view:crm.job:0
@@ -238,7 +239,7 @@ msgstr "Proponowane wynagrodzenie"
#. module: crm
#: help:crm.case.section,sequence:0
msgid "Gives the sequence order when displaying a list of case sections."
-msgstr ""
+msgstr "Ustala kolejność wyświetlania listy sekcji spraw."
#. module: crm
#: code:addons/crm/wizard/crm_job_wizard.py:0
@@ -251,12 +252,12 @@ msgstr "Rozmowa telefoniczna"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_stage
msgid "Cases by section and stage"
-msgstr "Zdarzenia wg sekcji i etapów"
+msgstr "Sprawy wg sekcji i etapów"
#. module: crm
#: field:crm.case.rule,act_mail_to_email:0
msgid "Mail to these emails"
-msgstr ""
+msgstr "Wyślij wiadomości do tych adresów email."
#. module: crm
#: selection:crm.case.rule,trg_date_type:0
@@ -298,7 +299,7 @@ msgstr "Sekcje"
#: help:crm.menu.config_wizard,opportunity:0
msgid "Tracks identified business opportunities for your sales pipeline."
msgstr ""
-"Ścieżki zidentyfikowanych okazji biznesowych dla twoich kanałów sprzedaży."
+"Śledzi zidentyfikowane szanse biznesowe dla twoich kanałów sprzedaży."
#. module: crm
#: view:crm.meeting:0
@@ -313,7 +314,7 @@ msgstr "Data ostatniej akcji"
#. module: crm
#: view:crm.job:0
msgid "Appreciation"
-msgstr ""
+msgstr "Ocena"
#. module: crm
#: model:crm.case.stage,name:crm.stage_job3
@@ -335,7 +336,7 @@ msgstr "Kategorie"
#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Uwaga!"
#. module: crm
#: view:crm.case:0
@@ -377,7 +378,7 @@ msgstr "Połączenie do istniejącego partnera"
#. module: crm
#: field:crm.case.rule,trg_date_range_type:0
msgid "Delay type"
-msgstr ""
+msgstr "Typ opóźnienia"
#. module: crm
#: view:crm.claim:0
@@ -397,7 +398,7 @@ msgstr "Następna rozmowa kwalifikacyjna"
#. module: crm
#: field:crm.case.rule,regex_history:0
msgid "Regular Expression on Case History"
-msgstr ""
+msgstr "Wyrażenie regularne dla historii sprawy"
#. module: crm
#: model:ir.model,name:crm.model_crm_email_add_cc
@@ -407,7 +408,7 @@ msgstr ""
#. module: crm
#: model:process.transition,name:crm.process_transition_opportunitymeeting0
msgid "Opportunity Meeting"
-msgstr ""
+msgstr "Spotkanie szansy"
#. module: crm
#: help:crm.case,canal_id:0
@@ -416,22 +417,24 @@ msgid ""
"customer. With each commercial opportunity, you can indicate the canall "
"which is this opportunity source."
msgstr ""
+"Kanały są różnymi, dostępnymi trybami komunikacji z klientem. Do każdej "
+"szansy możesz dowiązać kanał, który jest jej źródłem."
#. module: crm
#: view:crm.meeting:0
msgid "Exception Rules"
-msgstr ""
+msgstr "Reguły wyjątku"
#. module: crm
#: field:crm.menu.config_wizard,opportunity:0
#: model:ir.actions.report.xml,name:crm.crm_business_opportunities_report
msgid "Business Opportunities"
-msgstr ""
+msgstr "Szanse biznesowe"
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim1
msgid "Accepted as Claim"
-msgstr ""
+msgstr "Zaakceptowano jako reklamację"
#. module: crm
#: view:crm.case.rule:0
@@ -439,6 +442,8 @@ msgid ""
"The rule use a AND operator. The case must match all non empty fields so "
"that the rule execute the action described in the 'Actions' tab."
msgstr ""
+"Reguła stosuje operator I. Sprawa musi pasować do wszystkich niepustych pól, "
+"aby została wykonana akcja zapisana w zakładce 'Akcje'."
#. module: crm
#: field:crm.case,history_line:0
@@ -488,7 +493,7 @@ msgstr "Kategoria"
#: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_stage_tree
#: view:report.crm.case.section.categ.stage:0
msgid "Cases by Section, Category and Stage"
-msgstr ""
+msgstr "Sprawy wg sekcji, kategorii i etapów"
#. module: crm
#: help:crm.case.rule,act_mail_to_watchers:0
@@ -520,7 +525,7 @@ msgstr "Informacja o akcji"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_user_phone)s = Responsible phone"
-msgstr ""
+msgstr "%(case_user_phone)s = Telefon odpowiedzialnego"
#. module: crm
#: constraint:ir.model:0
@@ -543,7 +548,7 @@ msgstr "Warunki"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_open
msgid "Open Cases"
-msgstr "Otwarte przypadki"
+msgstr "Otwarte sprawy"
#. module: crm
#: field:crm.case.log,name:0
@@ -560,7 +565,7 @@ msgstr "Stan"
#: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity
#: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity1
msgid "Create Opportunity"
-msgstr ""
+msgstr "Utwórz szansę"
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -585,7 +590,7 @@ msgstr "Drzewo spotkań"
#: view:crm.opportunity:0
#, python-format
msgid "Escalate"
-msgstr ""
+msgstr "Przekaż"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_categ_meet
@@ -601,7 +606,7 @@ msgstr "Zarządzanie relacjami z klientami i dostawcami"
#: view:crm.email.add.cc:0
#: model:ir.actions.act_window,name:crm.action_view_crm_email_add_cc_wizard
msgid "Add CC"
-msgstr ""
+msgstr "Dodaj DW"
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -614,12 +619,12 @@ msgstr "Czerwiec"
#. module: crm
#: field:crm.segmentation,som_interval_default:0
msgid "Default (0=None)"
-msgstr ""
+msgstr "Domyślne (0=Nic)"
#. module: crm
#: model:crm.case.stage,name:crm.stage_job7
msgid "Refused by Company"
-msgstr ""
+msgstr "Odrzucone przez firmę"
#. module: crm
#: field:crm.case,planned_revenue:0
@@ -642,17 +647,17 @@ msgstr "Październik"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor3
msgid "Value Proposition"
-msgstr ""
+msgstr "Propozycja wartości"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_id)s = Case ID"
-msgstr ""
+msgstr "%(case_id)s = ID sprawy"
#. module: crm
#: model:crm.case.category2,name:crm.category_oppor2
msgid "New Business"
-msgstr ""
+msgstr "Nowy biznes"
#. module: crm
#: help:crm.case,email_from:0
@@ -681,7 +686,7 @@ msgstr "Opis rozmowy telefonicznej"
#. module: crm
#: view:crm.case.categ:0
msgid "Case Category"
-msgstr "Kategoria przypadku"
+msgstr "Kategoria sprawy"
#. module: crm
#: help:crm.segmentation,som_interval_default:0
@@ -696,7 +701,7 @@ msgstr ""
#. module: crm
#: model:crm.case.categ,name:crm.categ_claim3
msgid "Policy Claims"
-msgstr ""
+msgstr "Reklamacja postępowania"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -706,8 +711,8 @@ msgstr ""
msgid ""
"You must define a responsible user for this case in order to use this action!"
msgstr ""
-"Musisz zdefiniować użytkownika odpowiedzialnego za zdarzenie, aby zastosować "
-"tę akcję!"
+"Musisz zdefiniować użytkownika odpowiedzialnego za sprawę, aby zastosować tę "
+"akcję!"
#. module: crm
#: view:crm.phonecall:0
@@ -735,7 +740,7 @@ msgstr "Praca - proces zatrudnienia"
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Related Cases"
-msgstr "Zdarzenia związane"
+msgstr "Sprawy powiązane"
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -758,7 +763,7 @@ msgstr "Historia komunikacji"
#. module: crm
#: view:crm.claim:0
msgid "New Claims"
-msgstr ""
+msgstr "Nowe reklamacje"
#. module: crm
#: view:crm.meeting:0
@@ -768,23 +773,23 @@ msgstr "Formularz spotkań"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor5
msgid "Negotiation/Review"
-msgstr ""
+msgstr "Negocjacje/Przegląd"
#. module: crm
#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
#, python-format
msgid "A partner is already defined on this phonecall."
-msgstr ""
+msgstr "Partner jest już zdefiniowany dla tej rozmowy."
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_stage
msgid "Cases by Opportunities and Stage"
-msgstr "Zdarzenia wg szans i etapów"
+msgstr "Sprawy wg szans i etapów"
#. module: crm
#: view:crm.claim:0
msgid "Date of Claim"
-msgstr ""
+msgstr "Data reklamacji"
#. module: crm
#: view:crm.segmentation.line:0
@@ -820,7 +825,7 @@ msgstr ""
#. module: crm
#: model:crm.case.category2,name:crm.category_oppor1
msgid "Existing Business"
-msgstr ""
+msgstr "Istniejący biznes"
#. module: crm
#: field:crm.case,probability:0
@@ -831,7 +836,7 @@ msgstr "Prawdopodobieństwo (%)"
#. module: crm
#: model:ir.model,name:crm.model_crm_lead
msgid "Leads Cases"
-msgstr "Zdarzenia - sygnały"
+msgstr "Sprawy - sygnały"
#. module: crm
#: help:crm.case.section,reply_to:0
@@ -839,12 +844,14 @@ msgid ""
"The email address put in the 'Reply-To' of all emails sent by Open ERP about "
"cases in this section"
msgstr ""
+"Adres umieszczony w 'Reply-To' ('Odpowiedz na adres') dla wszystkich "
+"wiadomości wysłanych przez OpenERP w sprawach z tej sekcji"
#. module: crm
#: view:crm.case.rule:0
#: model:ir.model,name:crm.model_crm_case_rule
msgid "Case Rule"
-msgstr "Reguła zdarzenia"
+msgstr "Reguła sprawy"
#. module: crm
#: code:addons/crm/crm_opportunity.py:0
@@ -856,7 +863,7 @@ msgstr "Reguła zdarzenia"
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor
#, python-format
msgid "Opportunity"
-msgstr ""
+msgstr "Szansa"
#. module: crm
#: view:crm.case:0
@@ -866,7 +873,7 @@ msgstr ""
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Emails"
-msgstr ""
+msgstr "Wiadomości e-mail"
#. module: crm
#: model:crm.case.category2,name:crm.category_lead7
@@ -881,18 +888,18 @@ msgstr "Zatrzymaj proces"
#. module: crm
#: model:crm.case.categ,name:crm.categ_claim1
msgid "Factual Claims"
-msgstr ""
+msgstr "Reklamacja rzeczowa"
#. module: crm
#: view:crm.phonecall:0
msgid "Search Phonecalls"
-msgstr ""
+msgstr "Przeszukaj rozmowy"
#. module: crm
#: wizard_button:crm.lead.opportunity_set,create_partner,create:0
#: wizard_button:crm.phonecall.opportunity_set,create_partner,create:0
msgid "Continue"
-msgstr ""
+msgstr "Dalej"
#. module: crm
#: field:crm.segmentation,som_interval:0
@@ -907,13 +914,13 @@ msgstr "Wartość"
#. module: crm
#: help:caldav.crm.export,init,name:0
msgid "Save in .ics format"
-msgstr ""
+msgstr "Zapisz w formacie .ics"
#. module: crm
#: wizard_field:crm.new.send.mail,init,text:0
#: wizard_field:crm.send.mail,init,text:0
msgid "Message"
-msgstr ""
+msgstr "Wiadomość"
#. module: crm
#: help:crm.segmentation,exclusif:0
@@ -922,6 +929,9 @@ msgid ""
"criterions. If checked, remove the category from partners that doesn't match "
"segmentation criterions"
msgstr ""
+"Zaznacz to, jeśli kategoria ma być ograniczona do partnerów odpowiadających "
+"kryteriom segmentacji. Jeśli zaznaczone, to usuń kategorię z partnerów, "
+"którzy nie odpowiadają kryteriom segmentacji."
#. module: crm
#: field:crm.segmentation,exclusif:0
@@ -959,7 +969,7 @@ msgstr ""
#. module: crm
#: view:crm.case.rule:0
msgid "Conditions on States"
-msgstr ""
+msgstr "Warunki stanów"
#. module: crm
#: field:crm.case.rule,trg_date_type:0
@@ -969,12 +979,12 @@ msgstr "Data wyzwolenia"
#. module: crm
#: view:crm.case.history:0
msgid "Search Histories"
-msgstr ""
+msgstr "Przeszukuj historie"
#. module: crm
#: help:crm.case.stage,sequence:0
msgid "Gives the sequence order when displaying a list of case stages."
-msgstr ""
+msgstr "Ustala kolejność wyświetlania listy etapów spraw."
#. module: crm
#: model:crm.case.section,name:crm.section_support3
@@ -982,7 +992,7 @@ msgstr ""
#: model:ir.ui.menu,name:crm.menu_crm_case_opp
#: model:process.node,name:crm.process_node_opportunities0
msgid "Opportunities"
-msgstr ""
+msgstr "Szanse"
#. module: crm
#: help:crm.segmentation,name:0
@@ -1008,7 +1018,7 @@ msgstr "Kwota zakupów"
#. module: crm
#: view:crm.phonecall:0
msgid "Direction"
-msgstr ""
+msgstr "Kierunek"
#. module: crm
#: help:crm.case,email_cc:0
@@ -1024,12 +1034,12 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "March"
-msgstr ""
+msgstr "Marzec"
#. module: crm
#: view:crm.case.rule:0
msgid "Server Action to be Triggered"
-msgstr ""
+msgstr "Akcja serwera do wykonania"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_rule-act
@@ -1041,18 +1051,18 @@ msgstr "Reguły"
#: wizard_view:crm.job.meeting_set,init:0
#: wizard_view:crm.phonecall.meeting_set,init:0
msgid "Plan Meeting"
-msgstr ""
+msgstr "Zaplanuj spotkanie"
#. module: crm
#: wizard_field:crm.new.send.mail,init,state:0
msgid "Set State to"
-msgstr ""
+msgstr "Ustaw stan na"
#. module: crm
#: code:addons/crm/wizard/wizard_crm_send_email.py:0
#, python-format
msgid "There is no mail to reply!"
-msgstr ""
+msgstr "Nie ma wiadomości do odpowiedzi"
#. module: crm
#: wizard_button:crm.job.partner_create,init,confirm:0
@@ -1062,7 +1072,7 @@ msgstr ""
#: model:ir.actions.wizard,name:crm.wizard_crm_lead_partner_create
#: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_partner_create
msgid "Create Partner"
-msgstr ""
+msgstr "Utwórz partnera"
#. module: crm
#: selection:crm.segmentation.line,expr_operator:0
@@ -1072,17 +1082,17 @@ msgstr ""
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_description)s = Case description"
-msgstr ""
+msgstr "%(case_description)s = Opis sprawy"
#. module: crm
#: view:crm.fundraising:0
msgid "My Funds"
-msgstr ""
+msgstr "Moje fundusze"
#. module: crm
#: field:crm.case,partner_mobile:0
msgid "Mobile"
-msgstr ""
+msgstr "Tel. komórkowy"
#. module: crm
#: field:crm.case.rule,name:0
@@ -1098,27 +1108,27 @@ msgstr "Planowane koszty"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_history
msgid "Case history"
-msgstr ""
+msgstr "Historia sprawy"
#. module: crm
#: model:crm.case.categ,name:crm.categ_job2
msgid "Junior Developer"
-msgstr ""
+msgstr "Młodszy inżynier"
#. module: crm
#: view:crm.meeting:0
msgid "My Meetings"
-msgstr ""
+msgstr "Moje spotkania"
#. module: crm
#: field:crm.case.categ,name:0
msgid "Case Category Name"
-msgstr ""
+msgstr "Nazwa kategorii sprawy"
#. module: crm
#: model:crm.case.category2,name:crm.category_claim2
msgid "Preventive"
-msgstr ""
+msgstr "Prewencyjnie"
#. module: crm
#: field:crm.case.rule,act_email_cc:0
@@ -1128,7 +1138,7 @@ msgstr "Dodaj obserwatorów (DW)"
#. module: crm
#: wizard_view:caldav.crm.export,init:0
msgid "Export ICS"
-msgstr ""
+msgstr "Eksportuj ICS"
#. module: crm
#: code:addons/crm/crm_claim.py:0
@@ -1138,13 +1148,14 @@ msgstr ""
#: code:addons/crm/crm_phonecall.py:0
#, python-format
msgid "You can not assign Closed Case."
-msgstr ""
+msgstr "Nie możesz przypisać do zamkniętej sprawy"
#. module: crm
#: help:crm.case.rule,act_remind_partner:0
msgid ""
"Check this if you want the rule to send a reminder by email to the partner."
msgstr ""
+"Zaznacz, jeśli chcesz aby reguła wysyłała przypomnienie mailem do partnera."
#. module: crm
#: code:addons/crm/crm_meeting.py:0
@@ -1154,12 +1165,12 @@ msgstr ""
#: view:crm.meeting:0
#, python-format
msgid "Meetings"
-msgstr ""
+msgstr "Spotkania"
#. module: crm
#: view:crm.case.rule:0
msgid "Conditions on Case Fields"
-msgstr ""
+msgstr "Warunki na pola sprawy"
#. module: crm
#: field:crm.case,date_action_next:0
@@ -1179,27 +1190,27 @@ msgstr "Ostateczny czas ukończenia"
#: wizard_button:caldav.crm.import,init,end:0
#: wizard_button:caldav.crm.subscribe,init,end:0
msgid "_Cancel"
-msgstr ""
+msgstr "_Anuluj"
#. module: crm
#: field:crm.case,category2_id:0
msgid "Category Name"
-msgstr ""
+msgstr "Nazwa kategorii"
#. module: crm
#: view:crm.segmentation:0
msgid "Partner Segmentations"
-msgstr ""
+msgstr "Segmentacja partnera"
#. module: crm
#: view:crm.meeting:0
msgid "Recurrency Rule"
-msgstr ""
+msgstr "Reguła rekurencyjna"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_categ
msgid "Category of case"
-msgstr "Kategoria przypadku"
+msgstr "Kategoria sprawy"
#. module: crm
#: field:crm.email.add.cc,subject:0
@@ -1208,12 +1219,12 @@ msgstr "Kategoria przypadku"
#: view:crm.phonecall:0
#: wizard_field:crm.send.mail,init,subject:0
msgid "Subject"
-msgstr ""
+msgstr "Temat"
#. module: crm
#: field:crm.meeting,attendees:0
msgid "Attendees"
-msgstr ""
+msgstr "Uczestnicy"
#. module: crm
#: model:ir.module.module,description:crm.module_meta_information
@@ -1243,31 +1254,50 @@ msgid ""
"The CRM module has a email gateway for the synchronisation interface\n"
"between mails and Open ERP."
msgstr ""
+"Podstawowy moduł Zarządzania Relacjami z Klientami (CRM) Open ERP\n"
+"pozwala grupie ludzi inteligentnie i efektywnie zarządzać sygnałami, "
+"szansami,\n"
+"zadaniami, problemami, zgłoszeniami, błędami, reklamacjami, kampaniami itp.\n"
+"Moduł zarządza kluczowymi dziedzinami jak komunikacja, identyfikacja, \n"
+"priorytezacja, powiązania i powiadamianie.\n"
+"\n"
+"OpenERP zapewnia, że sprawy są skutecznie obsługiwane przez \n"
+"użytkowników, klientów i dostawców. System automatycznie wysyła \n"
+"przypomnienia, przekazuje odpowiedzialność, wysyła zgłoszenia, wyzwala\n"
+"specjalne metody i wykonuje inne akcje na podstawie twoich własnych reguł.\n"
+"\n"
+"Najważniejszą cechą systemu jest, że klient nie musi wykonywać żadnych \n"
+"specjalnych czynności. Wystarczy, że wyśle wiadomość do centrum zgłoszeń.\n"
+"OpenERP podziękuje za wiadomość, przekieruje ją do odpowiednich osób i \n"
+"zapewni, że cała przyszła korespondencja trafi w odpowiednie miejsce.\n"
+"\n"
+"Moduł CRM zawiera bramę korespondencyjną do łączenia OpenERP z \n"
+"systemem pocztowym."
#. module: crm
#: model:process.transition,note:crm.process_transition_leadpartner0
msgid "Prospect is converting to business partner"
-msgstr ""
+msgstr "Partner potencjalny jest konwertowany do partnera biznesowego."
#. module: crm
#: view:crm.case.rule:0
msgid "Regex on Case Name"
-msgstr ""
+msgstr "Wyrażenie regularne dla nazwy sprawy"
#. module: crm
#: view:crm.claim:0
msgid "Pending Claims"
-msgstr ""
+msgstr "Oczekujące reklamacje"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_stage
msgid "Cases by Opportunities, Category and Stage"
-msgstr ""
+msgstr "Sprawy wg szans, kategorii i etapów"
#. module: crm
#: model:crm.case.category2,name:crm.category_lead4
msgid "Print"
-msgstr ""
+msgstr "Drukuj"
#. module: crm
#: field:crm.case,som:0
@@ -1282,12 +1312,12 @@ msgstr "Stan emocji"
#: field:report.crm.case.section.categ.categ2,category2_id:0
#: field:report.crm.case.section.categ2,category2_id:0
msgid "Type"
-msgstr ""
+msgstr "Typ"
#. module: crm
#: view:crm.job:0
msgid "Candidate Refused"
-msgstr ""
+msgstr "Kandydat odrzucony"
#. module: crm
#: view:crm.segmentation:0
@@ -1317,7 +1347,7 @@ msgstr "Data utworzenia"
#: view:crm.phonecall:0
#: model:process.node,name:crm.process_node_meeting0
msgid "Meeting"
-msgstr ""
+msgstr "Spotkanie"
#. module: crm
#: view:crm.case.rule:0
@@ -1338,12 +1368,12 @@ msgstr "Przywróć do projektu"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_categ_categ2
msgid "Cases by section, Category and Category2"
-msgstr ""
+msgstr "Sprawy wg sekcji, kategorii i kategorii2"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor6
msgid "Closed Won"
-msgstr ""
+msgstr "Zamknięte z sukcesem"
#. module: crm
#: model:ir.actions.act_window,name:crm.act_crm_case_categ_crm_case_opened
@@ -1352,7 +1382,7 @@ msgstr ""
#: model:ir.actions.act_window,name:crm.act_res_partner_canal_2_crm_case_opened
#: model:ir.actions.act_window,name:crm.act_res_users_2_crm_case_opened
msgid "Open cases"
-msgstr "Otwarte praypadki"
+msgstr "Otwarte sprawy"
#. module: crm
#: field:crm.case,stage_id:0
@@ -1362,7 +1392,7 @@ msgstr "Otwarte praypadki"
#: field:report.crm.case.section.categ2,stage_id:0
#: field:report.crm.case.section.stage,stage_id:0
msgid "Stage"
-msgstr ""
+msgstr "Etap"
#. module: crm
#: constraint:ir.ui.view:0
@@ -1375,48 +1405,51 @@ msgid ""
"If the active field is set to true, it will allow you to hide the case "
"section without removing it."
msgstr ""
+"Jeśli pole aktywne jest ustawione na true (prawda), to będziesz mógł ukryć "
+"sekcję sprawy bez jej usuwania."
#. module: crm
#: model:crm.case.categ,name:crm.categ_fund2
msgid "Learning And Education"
-msgstr ""
+msgstr "Nauka i edukacja"
#. module: crm
#: wizard_view:crm.phonecall.opportunity_set,create_partner:0
#: wizard_view:crm.phonecall.partner_create,init:0
msgid "Are you sure you want to create a partner based on this phonecall ?"
msgstr ""
+"Jesteś pewien, że chcesz utworzyć partnera na podstawie tej rozmowy ?"
#. module: crm
#: view:crm.case.stage:0
#: model:ir.actions.act_window,name:crm.crm_case_stage_act
#: model:ir.ui.menu,name:crm.menu_crm_case_stage_act
msgid "Stages"
-msgstr ""
+msgstr "Etapy"
#. module: crm
#: wizard_field:crm.case.opportunity.partner_opportunity,init,planned_revenue:0
#: wizard_field:crm.lead.opportunity_set,opportunity,planned_revenue:0
#: wizard_field:crm.phonecall.opportunity_set,opportunity,planned_revenue:0
msgid "Expected Revenue"
-msgstr ""
+msgstr "Spodziewany dochód"
#. module: crm
#: view:crm.meeting:0
msgid "Meeting Date"
-msgstr ""
+msgstr "Data spotkania"
#. module: crm
#: view:crm.job:0
#: view:crm.lead:0
#: view:crm.phonecall:0
msgid "Convert to Partner"
-msgstr ""
+msgstr "Konwertuj do partnera"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_category_act_meetall3
msgid "Next Meetings"
-msgstr ""
+msgstr "Następne spotkania"
#. module: crm
#: field:crm.segmentation,partner_id:0
@@ -1427,32 +1460,32 @@ msgstr ""
#: code:addons/crm/crm.py:0
#, python-format
msgid "You can not delete this case. You should better cancel it."
-msgstr ""
+msgstr "Nie możesz usunąć tej sprawy. Powinieneś ją raczej anulować."
#. module: crm
#: wizard_button:caldav.crm.subscribe,init,open:0
msgid "_Subscribe"
-msgstr ""
+msgstr "_Subskrybuj"
#. module: crm
#: field:crm.case.rule,trg_priority_from:0
msgid "Minimum Priority"
-msgstr ""
+msgstr "Minimalny priorytet"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_meeting_generic_wizard_act
msgid "Meeting Generic Wizard"
-msgstr ""
+msgstr "Podstawowy kreator spotkań"
#. module: crm
#: model:crm.case.categ,name:crm.categ_claim2
msgid "Value Claims"
-msgstr ""
+msgstr "Reklamacje wartości"
#. module: crm
#: wizard_view:caldav.crm.subscribe,display:0
msgid "Message..."
-msgstr ""
+msgstr "Wiadomość..."
#. module: crm
#: model:ir.model,name:crm.model_crm_phonecall_assign_wizard
@@ -1462,19 +1495,19 @@ msgstr ""
#. module: crm
#: view:report.crm.case.section.categ2:0
msgid "Cases by Section and Category2"
-msgstr ""
+msgstr "Sprawy wg sekcji i kategorii2"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "done"
-msgstr "wykonano"
+msgstr ""
#. module: crm
#: view:crm.meeting:0
#: view:crm.phonecall:0
msgid "Reminder"
-msgstr ""
+msgstr "Przypomnienie"
#. module: crm
#: help:crm.segmentation,sales_purchase_active:0
@@ -1482,28 +1515,30 @@ msgid ""
"Check if you want to use this tab as part of the segmentation rule. If not "
"checked, the criteria beneath will be ignored"
msgstr ""
+"Zaznacz, jeśli chcesz stosować tę zakładkę jako część reguły segmentacji. "
+"Jeśli nie zaznaczone, to kryteria poniżej zostaną zignorowane."
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "open"
-msgstr "otwarty"
+msgstr ""
#. module: crm
#: field:crm.case.rule,act_remind_attach:0
msgid "Remind with attachment"
-msgstr ""
+msgstr "Przpomnij z załącznikiem"
#. module: crm
#: model:crm.case.categ,name:crm.categ_lead6
#: model:crm.case.categ,name:crm.categ_oppor6
msgid "Website"
-msgstr ""
+msgstr "Strona WWW"
#. module: crm
#: field:crm.case.rule,act_remind_user:0
msgid "Remind responsible"
-msgstr ""
+msgstr "Przpomnij odpowiedzialnym"
#. module: crm
#: field:crm.segmentation,state:0
@@ -1516,23 +1551,25 @@ msgid ""
"Helps you to organise the jobs hiring process: evaluation, meetings, email "
"integration..."
msgstr ""
+"Pomaga organizować proces zatrudniania: ocena, spotkania, integracja "
+"wiadomości..."
#. module: crm
#: view:crm.fundraising:0
msgid "Funds"
-msgstr ""
+msgstr "Fundusze"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "draft"
-msgstr "projekt"
+msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim5
#: model:crm.case.stage,name:crm.stage_meet4
msgid "Awaiting Response"
-msgstr ""
+msgstr "Oczekuje na odpowiedź"
#. module: crm
#: field:crm.case,date:0
@@ -1546,23 +1583,23 @@ msgstr "Data"
#. module: crm
#: view:crm.job:0
msgid "Candidate Name"
-msgstr ""
+msgstr "Nazwisko kandydata"
#. module: crm
#: model:crm.case.categ,name:crm.categ_lead2
#: model:crm.case.categ,name:crm.categ_oppor2
msgid "Self Generated"
-msgstr ""
+msgstr "Samogenerowane"
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim3
msgid "Won't fix"
-msgstr ""
+msgstr "Nie do naprawienia"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead4
msgid "Converted"
-msgstr ""
+msgstr "Skonwertowano"
#. module: crm
#: view:crm.case:0
@@ -1572,7 +1609,7 @@ msgstr ""
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Reply to Last Email"
-msgstr ""
+msgstr "Odpowiedz na ostatnią wiadomość"
#. module: crm
#: view:crm.segmentation:0
@@ -1582,7 +1619,7 @@ msgstr "Opis segmentacji"
#. module: crm
#: help:crm.meeting,location:0
msgid "Gives Location of Meeting"
-msgstr ""
+msgstr "Ustala miejsce spotkania"
#. module: crm
#: view:crm.case:0
@@ -1597,17 +1634,17 @@ msgstr "Historia"
#. module: crm
#: model:ir.model,name:crm.model_crm_job
msgid "Job Cases"
-msgstr ""
+msgstr "Sprawy rekrutacji"
#. module: crm
#: view:crm.job:0
msgid "Jobs - Recruitment Tree"
-msgstr ""
+msgstr "Praca - Drzewo rekrutacji"
#. module: crm
#: field:crm.case.rule,regex_name:0
msgid "Regular Expression on Case Name"
-msgstr ""
+msgstr "Wyrażenie regularne dla nazwy sprawy"
#. module: crm
#: field:crm.case,state:0
@@ -1616,7 +1653,7 @@ msgstr ""
#: field:report.crm.case.section.categ2,state:0
#: field:report.crm.case.section.stage,state:0
msgid "State"
-msgstr ""
+msgstr "Stan"
#. module: crm
#: view:crm.case:0
@@ -1667,22 +1704,22 @@ msgstr "Anuluj"
#: code:addons/crm/crm.py:0
#, python-format
msgid "No E-Mail ID Found for your Company address!"
-msgstr ""
+msgstr "Brak ID email dla adresu twojej firmy !"
#. module: crm
#: view:crm.fundraising:0
msgid "Search Funds"
-msgstr ""
+msgstr "Przeszukaj fundusze"
#. module: crm
#: view:crm.claim:0
msgid "Type of claim"
-msgstr ""
+msgstr "Typ reklamacji"
#. module: crm
#: view:crm.case:0
msgid "Helpdesk Support Tree"
-msgstr ""
+msgstr "Drzewo wsparcia helpdesku"
#. module: crm
#: view:res.partner.events:0
@@ -1692,33 +1729,33 @@ msgstr "Ogólny opis"
#. module: crm
#: view:crm.meeting:0
msgid "Other Info"
-msgstr ""
+msgstr "Inne informacje"
#. module: crm
#: view:crm.claim:0
msgid "Claim Cost"
-msgstr ""
+msgstr "Koszt reklamacji"
#. module: crm
#: view:crm.job:0
#: view:crm.opportunity:0
msgid "Schedule a Phone Call"
-msgstr ""
+msgstr "Zaplanuj rozmowę"
#. module: crm
#: field:crm.case,ref:0
msgid "Reference"
-msgstr "Odnośnik"
+msgstr "Numer"
#. module: crm
#: field:crm.meeting,exrule:0
msgid "Exception Rule"
-msgstr ""
+msgstr "Reguła wyjątku"
#. module: crm
#: help:crm.case.rule,act_mail_to_partner:0
msgid "Check this if you want the rule to send an email to the partner."
-msgstr ""
+msgstr "Zaznacz to, jeśli chcesz aby reguła wysyłała wiadomość do partnera."
#. module: crm
#: model:crm.case.category2,name:crm.category_lead2
@@ -1733,22 +1770,22 @@ msgstr "Ustaw priorytet na"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor2
msgid "Needs Analysis"
-msgstr ""
+msgstr "Wymaga analizy"
#. module: crm
#: view:crm.claim:0
msgid "Search Claims"
-msgstr ""
+msgstr "Przeszukaj reklamacje"
#. module: crm
#: field:crm.case.rule,act_mail_body:0
msgid "Mail body"
-msgstr ""
+msgstr "Treść wiadomości"
#. module: crm
#: help:crm.menu.config_wizard,meeting:0
msgid "Manages the calendar of meetings of the users."
-msgstr ""
+msgstr "Zarządza kalendarzem spotkań użytkownika"
#. module: crm
#: selection:crm.segmentation.line,expr_name:0
@@ -1763,7 +1800,7 @@ msgstr "Kwota sprzedaży"
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Add a CC"
-msgstr ""
+msgstr "Dodaj DW"
#. module: crm
#: selection:crm.segmentation.line,expr_operator:0
@@ -1781,7 +1818,7 @@ msgstr "Nazwa"
#. module: crm
#: view:crm.opportunity:0
msgid "Sales Stage"
-msgstr ""
+msgstr "Etap sprzedaży"
#. module: crm
#: field:crm.meeting,alarm_id:0
@@ -1791,13 +1828,13 @@ msgstr ""
#. module: crm
#: field:crm.case.rule,act_mail_to_watchers:0
msgid "Mail to watchers (CC)"
-msgstr ""
+msgstr "Wiadomość dla obserwatorów (DW)"
#. module: crm
#: view:crm.fundraising:0
#: view:crm.meeting:0
msgid "Next Meeting"
-msgstr ""
+msgstr "Następne spotkanie"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -1806,21 +1843,23 @@ msgid ""
"No E-Mail ID Found for your Company address or missing reply address in "
"section!"
msgstr ""
+"Nie znaleziono ID email dla adresu twojej firmy lub brak adresu zwrotnego w "
+"sekcji!"
#. module: crm
#: help:crm.case.section,allow_unlink:0
msgid "Allows to delete non draft cases"
-msgstr "Pozwala usuwać przypadki inne niż projekty"
+msgstr "Pozwala usuwać sprawy inne niż w stanie projekt"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor7
msgid "Closed Lost"
-msgstr ""
+msgstr "Zamknięte z porażką"
#. module: crm
#: field:crm.menu.config_wizard,bugs:0
msgid "Bug Tracking"
-msgstr ""
+msgstr "Obsługa błędów"
#. module: crm
#: view:crm.case:0
@@ -1844,7 +1883,7 @@ msgstr "Wysoki"
#. module: crm
#: model:process.node,note:crm.process_node_partner0
msgid "Convert to prospect to business partner"
-msgstr ""
+msgstr "Konwertuj potencjalnego do partnera biznesowego"
#. module: crm
#: view:crm.claim:0
@@ -1859,22 +1898,22 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor4
msgid "Proposal/Price Quote"
-msgstr ""
+msgstr "Propozycja/Oferta ceny"
#. module: crm
#: view:crm.case.rule:0
msgid "Delay After Trigger Date:"
-msgstr ""
+msgstr "Opóźnienie po dacie wyzwolenia"
#. module: crm
#: model:crm.case.category2,name:crm.category_lead5
msgid "Web"
-msgstr ""
+msgstr "WWW"
#. module: crm
#: view:crm.lead:0
msgid "Campaign Type"
-msgstr ""
+msgstr "Typ kampanii"
#. module: crm
#: view:crm.segmentation:0
@@ -1886,7 +1925,7 @@ msgstr "Obliczanie stanu emocji"
#: code:addons/crm/wizard/wizard_crm_send_email.py:0
#, python-format
msgid "Error"
-msgstr ""
+msgstr "Błąd"
#. module: crm
#: model:ir.model,name:crm.model_crm_meeting_generic_wizard
@@ -1896,12 +1935,12 @@ msgstr ""
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_history-act
msgid "Histories"
-msgstr ""
+msgstr "Historie"
#. module: crm
#: model:crm.case.category2,name:crm.category_job1
msgid "Graduate"
-msgstr ""
+msgstr "Wykształcenie"
#. module: crm
#: wizard_view:crm.job.meeting_set,init:0
@@ -1910,6 +1949,7 @@ msgid ""
"Note that you can also use the calendar view to graphically schedule your "
"next meeting."
msgstr ""
+"Zauważ, że możesz stosować kalendarz do graficznego planowania spotkań."
#. module: crm
#: view:crm.lead:0
@@ -1924,13 +1964,13 @@ msgstr ""
#. module: crm
#: view:crm.meeting:0
msgid "Attendee"
-msgstr ""
+msgstr "Uczestnik"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "Email Fail!"
-msgstr ""
+msgstr "Błąd wiadomości"
#. module: crm
#: model:crm.case.categ,name:crm.categ_phone1
@@ -1938,12 +1978,12 @@ msgstr ""
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_incoming0
#: model:ir.ui.menu,name:crm.menu_crm_case_phone_inbound
msgid "Inbound"
-msgstr ""
+msgstr "Przychodzące"
#. module: crm
#: constraint:crm.case.section:0
msgid "Error ! You cannot create recursive sections."
-msgstr ""
+msgstr "Błąd ! Nie możesz tworzyć rekurencyjnych sekcji."
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm
@@ -1956,6 +1996,8 @@ msgid ""
" Will allow you to synchronise your Open ERP calendars with your phone, "
"outlook, Sunbird, ical, ..."
msgstr ""
+" Pozwoli ci synchronizować kalendarze OpenERP z twoim telefonem, outlook, "
+"Sunbird, ical, ..."
#. module: crm
#: view:report.crm.case.section.categ.categ2:0
@@ -1963,7 +2005,7 @@ msgstr ""
#: view:report.crm.case.section.categ2:0
#: view:report.crm.case.section.stage:0
msgid "This Year"
-msgstr ""
+msgstr "Ten rok"
#. module: crm
#: field:crm.case.rule,act_remind_partner:0
@@ -1981,7 +2023,7 @@ msgstr "Najwyższy"
#. module: crm
#: view:crm.job:0
msgid "Contract Data"
-msgstr ""
+msgstr "Data umowy"
#. module: crm
#: selection:crm.case.rule,trg_date_range_type:0
@@ -1992,11 +2034,13 @@ msgstr "Dni"
#: help:crm.menu.config_wizard,bugs:0
msgid "Used by companies to track bugs and support requests on software"
msgstr ""
+"Stosowane przez firmy do śledzenia błędów i zgłoszeń do wsparcia dla "
+"oprogramowania"
#. module: crm
#: field:crm.menu.config_wizard,document_ics:0
msgid "Shared Calendar"
-msgstr ""
+msgstr "Współdzielony kalendarz"
#. module: crm
#: field:crm.case.section,reply_to:0
@@ -2006,7 +2050,7 @@ msgstr "Odpowiedz do"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ
msgid "Cases by Leads and Type"
-msgstr ""
+msgstr "Sprawy wg sygnałów i typów"
#. module: crm
#: selection:crm.case.rule,trg_date_range_type:0
@@ -2017,12 +2061,12 @@ msgstr "Minuty"
#: field:report.crm.case.section.categ2,amount_revenue:0
#: field:report.crm.case.section.stage,amount_revenue:0
msgid "Est.Revenue"
-msgstr ""
+msgstr "Szac. dochód"
#. module: crm
#: model:crm.case.stage,name:crm.stage_job1
msgid "Initial Jobs Demand"
-msgstr ""
+msgstr "Potrzeba stanowiska"
#. module: crm
#: field:crm.case.rule,trg_priority_to:0
@@ -2037,12 +2081,12 @@ msgstr ""
#. module: crm
#: view:crm.claim:0
msgid "Claims Info"
-msgstr ""
+msgstr "Informacja o reklamacji"
#. module: crm
#: field:crm.case.category2,name:0
msgid "Case Category2 Name"
-msgstr ""
+msgstr "Nazwa kategorii2 sprawy"
#. module: crm
#: wizard_view:crm.lead.opportunity_set,opportunity:0
@@ -2050,29 +2094,29 @@ msgstr ""
#: model:ir.actions.wizard,name:crm.wizard_crm_lead_opportunity_set
#: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_opportunity_set
msgid "Convert To Opportunity"
-msgstr ""
+msgstr "Konwertuj do szansy"
#. module: crm
#: model:crm.case.stage,name:crm.stage_phone2
#: view:crm.phonecall:0
msgid "Held"
-msgstr ""
+msgstr "Odebrane"
#. module: crm
#: view:crm.case:0
msgid "Helpdesk Supports"
-msgstr ""
+msgstr "Wsparcie helpdesk"
#. module: crm
#: model:crm.case.section,name:crm.section_support4
#: model:ir.ui.menu,name:crm.menu_crm_case_fund_raise
msgid "Fund Raising"
-msgstr ""
+msgstr "Zwiększenie funduszu"
#. module: crm
#: selection:crm.new.send.mail,init,state:0
msgid "Unchanged"
-msgstr ""
+msgstr "Niezmienione"
#. module: crm
#: wizard_view:crm.job.partner_create,init:0
@@ -2081,12 +2125,12 @@ msgstr ""
#: wizard_view:crm.phonecall.opportunity_set,create_partner:0
#: wizard_view:crm.phonecall.partner_create,init:0
msgid "Convert To Partner"
-msgstr ""
+msgstr "Konwertuj do partnera"
#. module: crm
#: field:crm.case.rule,trg_state_from:0
msgid "Case State"
-msgstr "Stan przypadku"
+msgstr "Stan sprawy"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -2107,17 +2151,17 @@ msgstr "Priorytet"
#. module: crm
#: view:crm.opportunity:0
msgid "Source"
-msgstr ""
+msgstr "Źródło"
#. module: crm
#: field:crm.meeting,location:0
msgid "Location"
-msgstr ""
+msgstr "Lokalizacja"
#. module: crm
#: view:crm.fundraising:0
msgid "Payment Mode"
-msgstr ""
+msgstr "Sposób zapłaty"
#. module: crm
#: help:crm.case.rule,trg_date_range:0
@@ -2132,17 +2176,17 @@ msgstr ""
#: view:crm.job:0
#: view:crm.lead:0
msgid "Stage: "
-msgstr ""
+msgstr "Etap: "
#. module: crm
#: view:crm.case.section:0
msgid "Case section"
-msgstr "Sekcja przypadku"
+msgstr "Sekcja sprawy"
#. module: crm
#: model:process.node,note:crm.process_node_meeting0
msgid "Schedule a normal or phone meeting"
-msgstr ""
+msgstr "Zaplanuj zwykłe spotkanie albo telefoniczne"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -2163,12 +2207,12 @@ msgstr "Pola do zmiany"
#. module: crm
#: model:crm.case.category2,name:crm.category_lead1
msgid "Telesales"
-msgstr ""
+msgstr "Telesprzedaż"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_history-act_main
msgid "Cases Histories"
-msgstr "Historie przypadków"
+msgstr "Historie spraw"
#. module: crm
#: field:crm.case,create_date:0
@@ -2190,7 +2234,7 @@ msgstr "Pozycja segmentacji"
#: wizard_field:crm.opportunity.reschedule_phone_call,init,deadline:0
#: view:crm.phonecall:0
msgid "Planned Date"
-msgstr ""
+msgstr "Planowana data"
#. module: crm
#: selection:crm.case.rule,trg_date_range_type:0
@@ -2203,16 +2247,17 @@ msgid ""
"Helps you to encode the result of a phone call or to plan a list of phone "
"calls to process."
msgstr ""
+"Pomaga wprowadzić rezultat rozmowy lub zaplanować rozmowy do wykonania."
#. module: crm
#: model:ir.actions.wizard,name:crm.wizard_crm_cal_import
msgid "Import ICS File"
-msgstr ""
+msgstr "Importuj plik ICS"
#. module: crm
#: view:crm.meeting:0
msgid "Attendee Detail"
-msgstr ""
+msgstr "Szczegóły uczestnika"
#. module: crm
#: model:crm.case.category2,name:crm.category_job3
@@ -2225,58 +2270,58 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "July"
-msgstr ""
+msgstr "Lipiec"
#. module: crm
#: model:crm.case.stage,name:crm.stage_oppor1
msgid "Prospecting"
-msgstr ""
+msgstr "Ocenianie"
#. module: crm
#: field:crm.case,partner_name2:0
msgid "Employee Email"
-msgstr ""
+msgstr "Email pracownika"
#. module: crm
#: model:ir.model,name:crm.model_crm_meeting
msgid "Meeting Cases"
-msgstr ""
+msgstr "Sprawy spotkań"
#. module: crm
#: view:crm.job:0
msgid "Job Info"
-msgstr ""
+msgstr "Informacja o stanowisko"
#. module: crm
#: view:crm.meeting:0
msgid "Cancel Meeting"
-msgstr ""
+msgstr "Anuluj spotkanie"
#. module: crm
#: model:crm.case.section,name:crm.section_support0
msgid "Jobs"
-msgstr ""
+msgstr "Stanowiska"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_date)s = Creation date"
-msgstr ""
+msgstr "%(case_date)s = Data utworzenia"
#. module: crm
#: model:crm.case.stage,name:crm.stage_phone3
#: view:crm.phonecall:0
msgid "Not Held"
-msgstr ""
+msgstr "Nie odebrane"
#. module: crm
#: field:crm.case.rule,act_mail_to_user:0
msgid "Mail to responsible"
-msgstr ""
+msgstr "Mail do odpowiedzialnych"
#. module: crm
#: view:crm.job:0
msgid "Jobs - Recruitment Form"
-msgstr ""
+msgstr "Praca - Formularz rekrutacji"
#. module: crm
#: model:crm.case.category2,name:crm.category_claim1
@@ -2286,12 +2331,12 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_opportunity
msgid "Opportunity Cases"
-msgstr ""
+msgstr "Sprawy szans"
#. module: crm
#: view:crm.case:0
msgid "Support Query"
-msgstr ""
+msgstr "Zapytanie o wsparcie"
#. module: crm
#: view:crm.case.rule:0
@@ -2304,7 +2349,7 @@ msgstr "Szablon emaila do wysłania"
#: field:report.crm.case.section.categ2,month:0
#: field:report.crm.case.section.stage,month:0
msgid "Month"
-msgstr ""
+msgstr "Miesiąc"
#. module: crm
#: model:crm.case.section,name:crm.section_support2
@@ -2314,23 +2359,23 @@ msgstr ""
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_leads
#: model:process.node,name:crm.process_node_leads0
msgid "Leads"
-msgstr ""
+msgstr "Sygnały"
#. module: crm
#: wizard_button:crm.new.send.mail,init,send:0
#: wizard_button:crm.send.mail,init,send:0
msgid "Send Email"
-msgstr ""
+msgstr "Wyślij e-mail"
#. module: crm
#: wizard_view:crm.new.send.mail,init:0
msgid "Set case state to"
-msgstr ""
+msgstr "Ustaw stan sprawy na"
#. module: crm
#: model:crm.case.category2,name:crm.categ2_fund3
msgid "Credit Card"
-msgstr ""
+msgstr "Karta kredytowa"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -2343,7 +2388,7 @@ msgstr ""
#. module: crm
#: view:crm.job:0
msgid "Search Jobs"
-msgstr ""
+msgstr "Przeszukuj stanowiska"
#. module: crm
#: field:crm.case.history,log_id:0
@@ -2354,17 +2399,17 @@ msgstr "Log"
#: help:crm.menu.config_wizard,fund:0
msgid ""
"This may help associations in their fund raising process and tracking."
-msgstr ""
+msgstr "To może pomóc stowarzyszeniom w poszukiwaniu funduszy."
#. module: crm
#: view:crm.meeting:0
msgid "Reset to Unconfirmed"
-msgstr ""
+msgstr "Przywróć do niepotwierdzonych"
#. module: crm
#: view:crm.case:0
msgid "Helpdesk Support"
-msgstr ""
+msgstr "Wsparcie helpdesku"
#. module: crm
#: field:crm.case,email_cc:0
@@ -2382,7 +2427,7 @@ msgstr "Uwaga"
#: field:report.crm.case.section.categ2,delay_close:0
#: field:report.crm.case.section.stage,delay_close:0
msgid "Delay Close"
-msgstr ""
+msgstr "Zamknij opóźnienie"
#. module: crm
#: selection:crm.case,priority:0
@@ -2408,18 +2453,18 @@ msgstr "Zamknięty"
#. module: crm
#: view:crm.job:0
msgid "Candidate Name2"
-msgstr ""
+msgstr "Nazwa 2 kandydata"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "cancel"
-msgstr "anuluj"
+msgstr ""
#. module: crm
#: model:crm.case.categ,name:crm.categ_meet2
msgid "Internal Meeting"
-msgstr ""
+msgstr "Spotkanie wewnętrzne"
#. module: crm
#: view:crm.case:0
@@ -2428,7 +2473,7 @@ msgstr ""
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Events"
-msgstr ""
+msgstr "Wydarzenia"
#. module: crm
#: help:crm.menu.config_wizard,lead:0
@@ -2455,27 +2500,27 @@ msgstr ""
#. module: crm
#: model:crm.case.categ,name:crm.categ_meet1
msgid "Customer Meeting"
-msgstr ""
+msgstr "Spotkanie z klientem"
#. module: crm
#: wizard_field:crm.new.send.mail,init,doc2:0
msgid "Attachment2"
-msgstr ""
+msgstr "Załącznik2"
#. module: crm
#: wizard_field:crm.new.send.mail,init,doc3:0
msgid "Attachment3"
-msgstr ""
+msgstr "Załącznik3"
#. module: crm
#: view:crm.job:0
msgid "Degree"
-msgstr ""
+msgstr "Stopień"
#. module: crm
#: wizard_field:crm.new.send.mail,init,doc1:0
msgid "Attachment1"
-msgstr ""
+msgstr "Załącznik1"
#. module: crm
#: code:addons/crm/crm_phonecall.py:0
@@ -2486,7 +2531,7 @@ msgstr ""
#: model:ir.ui.menu,name:crm.menu_crm_case_phone
#, python-format
msgid "Phone Calls"
-msgstr ""
+msgstr "Rozmowy telefoniczne"
#. module: crm
#: help:crm.case,active:0
@@ -2494,6 +2539,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the case "
"without removing it."
msgstr ""
+"Jeśli aktywne pole jest ustawione na true (prawda), to będziesz mógł ukryć "
+"sprawę bez jej usuwania."
#. module: crm
#: model:ir.model,name:crm.model_crm_menu_config_wizard
@@ -2503,24 +2550,24 @@ msgstr ""
#. module: crm
#: view:crm.case.history:0
msgid "Case History"
-msgstr "Historia przypadku"
+msgstr "Historia sprawy"
#. module: crm
#: field:crm.case,partner_phone:0
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
#. module: crm
#: model:crm.case.category2,name:crm.categ2_fund2
msgid "Cheque"
-msgstr ""
+msgstr "Czek"
#. module: crm
#: field:crm.case,active:0
#: field:crm.case.rule,active:0
#: field:crm.case.section,active:0
msgid "Active"
-msgstr "Aktywny"
+msgstr "Aktywne"
#. module: crm
#: help:crm.case.rule,act_remind_attach:0
@@ -2528,6 +2575,8 @@ msgid ""
"Check this if you want that all documents attached to the case be attached "
"to the reminder email sent."
msgstr ""
+"Zaznacz to, jeśli chcesz aby wszystkie dokumenty załączone do sprawy zostały "
+"dołączone do przypomnień."
#. module: crm
#: selection:crm.segmentation.line,operator:0
@@ -2542,12 +2591,12 @@ msgstr ""
#. module: crm
#: view:crm.job:0
msgid "Candidate Phone"
-msgstr ""
+msgstr "Telefon kandydata"
#. module: crm
#: model:ir.actions.wizard,name:crm.wizard_crm_send_mail
msgid "Send Mail"
-msgstr ""
+msgstr "Wyślij wiadomość"
#. module: crm
#: selection:crm.case.rule,trg_date_range_type:0
@@ -2564,23 +2613,25 @@ msgstr "Miesiące"
#: model:ir.actions.act_window,name:crm.action_crm_opportunity_assign_wizard
#: model:ir.actions.act_window,name:crm.action_crm_phonecall_assign_wizard
msgid "To Assign"
-msgstr ""
+msgstr "Do przypisania"
#. module: crm
#: code:addons/crm/wizard/wizard_cal_subscribe.py:0
#, python-format
msgid "Please provide Proper URL !"
-msgstr ""
+msgstr "Podaj poprawny URL !"
#. module: crm
#: model:process.node,note:crm.process_node_opportunities0
msgid "When a real project/opportunity is detected"
-msgstr ""
+msgstr "Kiedy rzeczywisty projekt/szansa została wykryta"
#. module: crm
#: wizard_view:crm.job.partner_create,init:0
msgid "Are you sure you want to create a partner based on this job request ?"
msgstr ""
+"Jesteś pewien, że chcesz utworzyć partnera na podstawie tego zgłoszenia do "
+"pracy ?"
#. module: crm
#: wizard_field:crm.lead.opportunity_set,create_partner,action:0
@@ -2597,7 +2648,7 @@ msgstr "Akcja"
#: model:ir.ui.menu,name:crm.menu_crm_case_claims
#, python-format
msgid "Claims"
-msgstr ""
+msgstr "Reklamacje"
#. module: crm
#: field:crm.segmentation,som_interval_decrease:0
@@ -2607,28 +2658,28 @@ msgstr ""
#. module: crm
#: model:ir.actions.wizard,name:crm.wizard_case_history_event
msgid "History of Events"
-msgstr ""
+msgstr "Historia wydarzeń"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_category2
msgid "Category2 of case"
-msgstr ""
+msgstr "Kategoria2 sprawy"
#. module: crm
#: wizard_field:crm.new.send.mail,init,to:0
#: wizard_field:crm.send.mail,init,to:0
msgid "To"
-msgstr ""
+msgstr "Do"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_user_email)s = Responsible email"
-msgstr ""
+msgstr "%(case_user_email)s = email odpowiedzialnego"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_presale
msgid "Sales"
-msgstr ""
+msgstr "Sprzedaż"
#. module: crm
#: view:crm.case:0
@@ -2639,18 +2690,18 @@ msgstr "Ogólne"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead2
msgid "Assigned"
-msgstr ""
+msgstr "Przydzielony"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead5
msgid "Recycled"
-msgstr ""
+msgstr "Usunięty"
#. module: crm
#: model:crm.case.categ,name:crm.categ_lead8
#: model:crm.case.categ,name:crm.categ_oppor8
msgid "Other"
-msgstr ""
+msgstr "Inne"
#. module: crm
#: view:crm.case:0
@@ -2660,17 +2711,17 @@ msgstr ""
#: selection:crm.new.send.mail,init,state:0
#: view:crm.opportunity:0
msgid "Done"
-msgstr ""
+msgstr "Wykonano"
#. module: crm
#: field:crm.segmentation,som_interval_max:0
msgid "Max Interval"
-msgstr "Maks. interwału"
+msgstr "Maks. interwał"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_category_act_oppor11
msgid "All Opportunities"
-msgstr ""
+msgstr "Wszystkie sprawy"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -2704,17 +2755,17 @@ msgstr ""
#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
#, python-format
msgid "A partner is already existing with the same name."
-msgstr ""
+msgstr "Istnieje już partner z tą samą nazwą"
#. module: crm
#: model:ir.model,name:crm.model_crm_phonecall
msgid "Phonecall Cases"
-msgstr ""
+msgstr "Sprawy telefoniczne"
#. module: crm
#: help:crm.case.rule,sequence:0
msgid "Gives the sequence order when displaying a list of case rules."
-msgstr ""
+msgstr "Ustala kolejność wyświetlania listy reguł spraw"
#. module: crm
#: field:crm.menu.config_wizard,helpdesk:0
@@ -2741,23 +2792,23 @@ msgstr "Odpowiedzialny"
#: model:crm.case.stage,name:crm.stage_claim4
#: model:crm.case.stage,name:crm.stage_meet3
msgid "Invalid"
-msgstr ""
+msgstr "Niepoprawny"
#. module: crm
#: wizard_button:crm.job.meeting_set,init,order:0
#: wizard_button:crm.phonecall.meeting_set,init,order:0
msgid "Set Meeting"
-msgstr ""
+msgstr "Ustal spotkanie"
#. module: crm
#: field:crm.menu.config_wizard,meeting:0
msgid "Calendar of Meetings"
-msgstr ""
+msgstr "Kalendarz spotkań"
#. module: crm
#: view:crm.case:0
msgid "Cases By Stage and Estimates"
-msgstr ""
+msgstr "Sprawy wg etapów i szacunków"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -2766,6 +2817,8 @@ msgid ""
"You can not escalate this case.\n"
"You are already at the top level."
msgstr ""
+"Nie możesz przekazać tej sprawy.\n"
+"Jesteś na najwyższym poziomie."
#. module: crm
#: view:crm.lead:0
@@ -2775,7 +2828,7 @@ msgstr "Nazwa sygnału"
#. module: crm
#: view:crm.claim:0
msgid "Claim/Action Description"
-msgstr ""
+msgstr "Reklamacja/Opis akcji"
#. module: crm
#: field:crm.case.rule,trg_max_history:0
@@ -2797,17 +2850,17 @@ msgstr ""
#. module: crm
#: model:crm.case.stage,name:crm.stage_job6
msgid "Refused by Employee"
-msgstr ""
+msgstr "Odmowa pracownika"
#. module: crm
#: field:crm.case,partner_name:0
msgid "Employee's Name"
-msgstr ""
+msgstr "Nazwisko pracownika"
#. module: crm
#: model:crm.case.stage,name:crm.stage_job2
msgid "First Interview"
-msgstr ""
+msgstr "Pierwsza rozmowa"
#. module: crm
#: view:report.crm.case.section.categ.categ2:0
@@ -2815,17 +2868,17 @@ msgstr ""
#: view:report.crm.case.section.categ2:0
#: view:report.crm.case.section.stage:0
msgid "This Month"
-msgstr ""
+msgstr "Bieżący miesiąc"
#. module: crm
#: view:crm.job:0
msgid "Availability (weeks)"
-msgstr ""
+msgstr "Dostępność (tygodnie)"
#. module: crm
#: view:crm.opportunity:0
msgid "Opportunities Tree"
-msgstr ""
+msgstr "Drzewo szans"
#. module: crm
#: help:crm.case,state:0
@@ -2838,16 +2891,23 @@ msgid ""
" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
+"Stan jest ustawiony na 'Projekt', gdy sprawa jest tworzona. "
+" \n"
+"Jeśli sprawa jest w toku, to stan jest ustawiony na 'Otwarte'. "
+" \n"
+"Kiedy sprawa jest zakończona, stan jest 'Wykonano'. "
+" \n"
+"Jeśli sprawa wymaga interwencji, to stan jest 'Oczekiwanie'."
#. module: crm
#: view:crm.job:0
msgid "Open Jobs"
-msgstr ""
+msgstr "Otwarte stanowiska"
#. module: crm
#: selection:crm.email.add.cc,name:0
msgid "Email Address"
-msgstr ""
+msgstr "Adres email"
#. module: crm
#: help:crm.segmentation,som_interval_max:0
@@ -2855,16 +2915,18 @@ msgid ""
"The computation is made on all events that occured during this interval, the "
"past X periods."
msgstr ""
+"Obliczenia są wykonywane na wszystkich zdarzeniach, które wystąpiły w "
+"trakcie tego interwału, w ostatnich X okresach."
#. module: crm
#: field:crm.case,case_id:0
msgid "Related Case"
-msgstr ""
+msgstr "Sprawa związana"
#. module: crm
#: field:crm.case.rule,server_action_id:0
msgid "Server Action"
-msgstr ""
+msgstr "Akcja serwera"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_categ_claim0
@@ -2874,33 +2936,33 @@ msgstr "Wszystkie reklamacje"
#. module: crm
#: field:crm.case.log,user_id:0
msgid "User Responsible"
-msgstr ""
+msgstr "Użytkownik odpowiedzialny"
#. module: crm
#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
#, python-format
msgid "Email not sent !"
-msgstr ""
+msgstr "Wiadomość nie wysłana !"
#. module: crm
#: wizard_field:crm.phonecall.partner_create,init,close:0
msgid "Close Phonecall"
-msgstr ""
+msgstr "Zamknij rozmowę"
#. module: crm
#: field:crm.case,email_last:0
msgid "Latest E-Mail"
-msgstr ""
+msgstr "Ostatni email"
#. module: crm
#: view:crm.case.rule:0
msgid "Regex on Communication History"
-msgstr ""
+msgstr "Wyrażenia reg. dla historii komunikacji"
#. module: crm
#: model:crm.case.category2,name:crm.categ2_fund4
msgid "Demand Draft"
-msgstr ""
+msgstr "Wymagaj projektu"
#. module: crm
#: field:crm.case,id:0
@@ -2910,18 +2972,18 @@ msgstr ""
#. module: crm
#: field:crm.case,log_ids:0
msgid "Logs History"
-msgstr ""
+msgstr "Zapisuje historię"
#. module: crm
#: wizard_field:crm.lead.opportunity_set,opportunity,name:0
#: wizard_field:crm.phonecall.opportunity_set,opportunity,name:0
msgid "Opportunity Summary"
-msgstr ""
+msgstr "Podsumowanie szans"
#. module: crm
#: view:crm.case:0
msgid "Search Case"
-msgstr ""
+msgstr "Przeszukaj sprawę"
#. module: crm
#: view:crm.segmentation:0
@@ -2931,13 +2993,13 @@ msgstr "Kontynuuj proces"
#. module: crm
#: view:crm.case.history:0
msgid "Case Description"
-msgstr "Opis przypadku"
+msgstr "Opis sprawy"
#. module: crm
#: wizard_field:crm.job.reschedule_phone_call,init,user_id:0
#: wizard_field:crm.opportunity.reschedule_phone_call,init,user_id:0
msgid "Assign To"
-msgstr ""
+msgstr "Przypisz do"
#. module: crm
#: field:crm.case,date_action_last:0
@@ -2947,27 +3009,27 @@ msgstr "Ostatnia akcja"
#. module: crm
#: field:crm.case,duration:0
msgid "Duration"
-msgstr ""
+msgstr "Czas trwania"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_categ_stage
msgid "Cases by section, Category and stage"
-msgstr ""
+msgstr "Sprawy wg sekcji, kategorii i etapu"
#. module: crm
#: view:crm.job:0
msgid "Candidate Hired"
-msgstr ""
+msgstr "Kandydat zatrudniony"
#. module: crm
#: field:crm.menu.config_wizard,jobs:0
msgid "Jobs Hiring Process"
-msgstr ""
+msgstr "Proces zatrudniania"
#. module: crm
#: model:ir.ui.menu,name:crm.next_id_52
msgid "All Cases"
-msgstr "Wszystkie przypadki"
+msgstr "Wszystkie sprawy"
#. module: crm
#: code:addons/crm/wizard/crm_lead_wizard.py:0
@@ -2986,7 +3048,7 @@ msgstr "Źródło sygnału"
#: field:report.crm.case.section.categ2,nbr:0
#: field:report.crm.case.section.stage,nbr:0
msgid "# of Cases"
-msgstr ""
+msgstr "# spraw"
#. module: crm
#: selection:crm.meeting,class:0
@@ -2996,7 +3058,7 @@ msgstr ""
#. module: crm
#: wizard_view:caldav.crm.subscribe,init:0
msgid "Provide path for Remote Calendar"
-msgstr ""
+msgstr "Wprowadź ścieżkę dla zdalnego kalendarza"
#. module: crm
#: view:crm.segmentation:0
@@ -3007,28 +3069,28 @@ msgstr "Segmentacja"
#. module: crm
#: view:crm.fundraising:0
msgid "Funds Form"
-msgstr ""
+msgstr "Formularz funduszy"
#. module: crm
#: view:crm.meeting:0
msgid "Search Meetings"
-msgstr ""
+msgstr "Przeszukuj spotkania"
#. module: crm
#: selection:crm.lead.opportunity_set,create_partner,action:0
#: selection:crm.phonecall.opportunity_set,create_partner,action:0
msgid "Create a new partner"
-msgstr ""
+msgstr "Utwórz nowego partnera"
#. module: crm
#: field:crm.case,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Firma"
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead3
msgid "In Process"
-msgstr ""
+msgstr "W toku"
#. module: crm
#: selection:crm.segmentation,state:0
@@ -3038,24 +3100,24 @@ msgstr "Uruchomione"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_user)s = Responsible name"
-msgstr ""
+msgstr "%(case_user)s = Nazwa odpowiedzialnego"
#. module: crm
#: wizard_field:crm.job.reschedule_phone_call,init,note:0
#: wizard_field:crm.opportunity.reschedule_phone_call,init,note:0
msgid "Goals"
-msgstr ""
+msgstr "Cele"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_tree
#: view:report.crm.case.section.categ2:0
msgid "Cases by Section and Type"
-msgstr ""
+msgstr "Sprawy wg sekcji i typu"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_aftersale
msgid "After-Sale Services"
-msgstr ""
+msgstr "Obsługa posprzedażna"
#. module: crm
#: wizard_button:caldav.crm.export,init,end:0
@@ -3068,12 +3130,12 @@ msgstr ""
#. module: crm
#: wizard_field:caldav.crm.export,init,name:0
msgid "File name"
-msgstr ""
+msgstr "Nazwa pliku"
#. module: crm
#: view:crm.lead:0
msgid "Search Leads"
-msgstr "Szukaj sygnału"
+msgstr "Przeszukuj sygnały"
#. module: crm
#: help:crm.case.rule,active:0
@@ -3081,6 +3143,8 @@ msgid ""
"If the active field is set to true, it will allow you to hide the case rule "
"without removing it."
msgstr ""
+"Jeśli aktywne pole jest ustawione na true (prawda), to będziesz mógł ukryć "
+"regułę sprawy bez jej usuwania."
#. module: crm
#: code:addons/crm/crm.py:0
@@ -3098,7 +3162,7 @@ msgstr ""
#: model:ir.actions.act_window,name:crm.crm_case_categ0_act_job
#: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_job
msgid "All Jobs Requests"
-msgstr ""
+msgstr "Wszystkie zgłoszenia na stanowisko"
#. module: crm
#: selection:crm.case,state:0
@@ -3110,7 +3174,7 @@ msgstr ""
#: selection:report.crm.case.section.categ2,state:0
#: selection:report.crm.case.section.stage,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Anulowano"
#. module: crm
#: view:crm.job:0
@@ -3127,27 +3191,27 @@ msgstr ""
#. module: crm
#: view:crm.phonecall:0
msgid "Relevant"
-msgstr ""
+msgstr "Odpowiedni"
#. module: crm
#: wizard_field:crm.case.opportunity.partner_opportunity,init,name:0
msgid "Opportunity Name"
-msgstr ""
+msgstr "Nazwa szansy"
#. module: crm
#: field:crm.meeting,rrule:0
msgid "Recurrent Rule"
-msgstr ""
+msgstr "Reguła rekurencyjna"
#. module: crm
#: wizard_view:caldav.crm.import,init:0
msgid "Import ICS"
-msgstr ""
+msgstr "Importuj ICS"
#. module: crm
#: view:crm.phonecall:0
msgid "Call Summary"
-msgstr ""
+msgstr "Podsumowanie rozmowy"
#. module: crm
#: field:crm.segmentation.line,expr_operator:0
@@ -3157,17 +3221,17 @@ msgstr "Operator"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_log
msgid "Case Communication History"
-msgstr "Historia komunikacji przypadku"
+msgstr "Historia komunikacji sprawy"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ
msgid "Cases by Opportunities and Type"
-msgstr ""
+msgstr "Sprawy wg szans i typów"
#. module: crm
#: view:crm.case.rule:0
msgid "%(case_subject)s = Case subject"
-msgstr ""
+msgstr "%(case_subject)s = Temat sprawy"
#. module: crm
#: field:crm.case,section_id:0
@@ -3201,12 +3265,12 @@ msgstr ""
#: code:addons/crm/wizard/crm_job_wizard.py:0
#, python-format
msgid "A partner is already defined on this job request."
-msgstr ""
+msgstr "Dla tego zgłoszenia do pracy partner jest juz zdefiniowany."
#. module: crm
#: model:crm.case.stage,name:crm.stage_lead1
msgid "New"
-msgstr ""
+msgstr "Nowe"
#. module: crm
#: field:crm.case,description:0
@@ -3235,27 +3299,27 @@ msgstr ""
#. module: crm
#: model:ir.model,name:crm.model_crm_claim
msgid "Claim Cases"
-msgstr ""
+msgstr "Sprawy reklamacji"
#. module: crm
#: view:crm.case.rule:0
msgid "E-Mail Reminders (includes the content of the case)"
-msgstr ""
+msgstr "Przypomnienie email (zawiera sprawę)"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_stage
msgid "Cases by Leads and Stage"
-msgstr "Zdarzenia wg sygnałów i etapów"
+msgstr "Sprawy wg sygnałów i etapów"
#. module: crm
#: field:crm.meeting,exdate:0
msgid "Exception Date/Times"
-msgstr ""
+msgstr "Daty/Czasy wyjątków"
#. module: crm
#: view:crm.meeting.generic_wizard:0
msgid "Generic Wizard"
-msgstr ""
+msgstr "Podstawowy kreator"
#. module: crm
#: model:process.transition,note:crm.process_transition_leadopportunity0
@@ -3265,7 +3329,7 @@ msgstr "Tworzenie szansy z sygnału"
#. module: crm
#: model:ir.ui.menu,name:crm.next_id_64
msgid "Reporting"
-msgstr ""
+msgstr "Raportowanie"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -3286,17 +3350,17 @@ msgstr ""
#: selection:report.crm.case.section.stage,state:0
#, python-format
msgid "Pending"
-msgstr "Oczekuje"
+msgstr "Oczekiwanie"
#. module: crm
#: model:process.transition,name:crm.process_transition_leadopportunity0
msgid "Prospect Opportunity"
-msgstr ""
+msgstr "Potencjalna szansa"
#. module: crm
#: view:crm.job:0
msgid "Expected Salary"
-msgstr ""
+msgstr "Oczekiwane wynagrodzenie"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_configuration
@@ -3306,28 +3370,28 @@ msgstr "Konfiguracja"
#. module: crm
#: model:ir.actions.wizard,name:crm.wizard_crm_new_send_mail
msgid "Send New Mail"
-msgstr ""
+msgstr "Wyślij nową wiadomość"
#. module: crm
#: constraint:ir.cron:0
msgid "Invalid arguments"
-msgstr ""
+msgstr "Niepoprawne argumenty"
#. module: crm
#: field:crm.meeting,transparent:0
msgid "Trensparent"
-msgstr ""
+msgstr "Przezroczysty"
#. module: crm
#: view:crm.case:0
msgid "My Cases"
-msgstr ""
+msgstr "Moje sprawy"
#. module: crm
#: model:crm.case.categ,name:crm.categ_lead7
#: model:crm.case.categ,name:crm.categ_oppor7
msgid "Word of mouth"
-msgstr ""
+msgstr "Ustna wiadomość"
#. module: crm
#: view:crm.lead:0
@@ -3338,32 +3402,32 @@ msgstr "Temat sygnału"
#: view:crm.lead:0
#: view:crm.phonecall:0
msgid "Convert to Opportunity"
-msgstr ""
+msgstr "Konwertuj do szansy"
#. module: crm
#: model:crm.case.stage,name:crm.stage_phone1
msgid "Planned"
-msgstr ""
+msgstr "Planowane"
#. module: crm
#: model:crm.case.category2,name:crm.category_meet3
msgid "Customer Office"
-msgstr ""
+msgstr "Biuro klienta"
#. module: crm
#: view:crm.job:0
msgid "Candidate Email"
-msgstr ""
+msgstr "Email kandydata"
#. module: crm
#: view:crm.opportunity:0
msgid "Sales Stage: "
-msgstr ""
+msgstr "Etap sprzedaży: "
#. module: crm
#: view:crm.claim:0
msgid "Type of Action"
-msgstr ""
+msgstr "Typ akcji"
#. module: crm
#: field:crm.case.rule,act_user_id:0
@@ -3373,7 +3437,7 @@ msgstr "Ustaw odpowiedzialnego na"
#. module: crm
#: view:crm.job:0
msgid "Meeting With Candidates"
-msgstr ""
+msgstr "Spotkanie z kandydatami"
#. module: crm
#: help:crm.segmentation,som_interval:0
@@ -3384,6 +3448,11 @@ msgid ""
"has decreased because he probably bought goods to another supplier. Use this "
"functionality for recurring businesses."
msgstr ""
+"Okres jest średnią (w dniach) pomiędzy dwiema sprzedażami lub dwoma zakupami "
+"dla tej segmentacji. To jest stosowane głównie do wykrycia, czy partner nie "
+"kupował u nas zbyt długo, co może oznaczać, że jego stan emocji obniżył się, "
+"ponieważ prawdopodobnie dokonał zakupów u innego dostawcy. Stosuj te "
+"funkcjonalność do biznesów powtarzalnych."
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -3391,27 +3460,27 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "December"
-msgstr ""
+msgstr "Grudzień"
#. module: crm
#: view:report.crm.case.section.categ.categ2:0
msgid "Search Cases by User"
-msgstr ""
+msgstr "Przeszukuj sprawy wg użytkownika"
#. module: crm
#: view:crm.case.rule:0
msgid "Condition on Communication History"
-msgstr ""
+msgstr "Warunki dla historii komunikacji"
#. module: crm
#: field:crm.case.rule,act_mail_to_partner:0
msgid "Mail to partner"
-msgstr ""
+msgstr "Mail do partnera"
#. module: crm
#: view:crm.fundraising:0
msgid "Funds Tree"
-msgstr ""
+msgstr "Drzewo funduszy"
#. module: crm
#: field:crm.case.rule,act_method:0
@@ -3421,7 +3490,7 @@ msgstr ""
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_category_act_fund_all1
msgid "All Funds"
-msgstr ""
+msgstr "Wszystkie fundusze"
#. module: crm
#: field:crm.case.section,calendar:0
@@ -3433,7 +3502,7 @@ msgstr "Kalendarz"
#. module: crm
#: model:crm.case.categ,name:crm.categ_job1
msgid "Salesman"
-msgstr ""
+msgstr "Sprzedawca"
#. module: crm
#: model:crm.case.section,name:crm.section_support_help
@@ -3455,12 +3524,12 @@ msgstr ""
#: model:ir.actions.wizard,name:crm.wizard_crm_job_meeting_set
#: model:ir.actions.wizard,name:crm.wizard_crm_phonecall_meeting_set
msgid "Schedule Meeting"
-msgstr ""
+msgstr "Zaplanuj spotkanie"
#. module: crm
#: model:crm.case.categ,name:crm.categ_fund4
msgid "Arts And Culture"
-msgstr ""
+msgstr "Kultura i sztuka"
#. module: crm
#: model:crm.case.categ,name:crm.categ_phone2
@@ -3468,18 +3537,18 @@ msgstr ""
#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_outgoing0
#: model:ir.ui.menu,name:crm.menu_crm_case_phone_outbound
msgid "Outbound"
-msgstr ""
+msgstr "Ruch wychodzący"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid "Historize"
-msgstr ""
+msgstr "Zapisz do historii"
#. module: crm
#: view:crm.meeting:0
msgid "Confirmed"
-msgstr ""
+msgstr "Potwierdzone"
#. module: crm
#: selection:crm.segmentation,state:0
@@ -3491,7 +3560,7 @@ msgstr "Nie uruchomiony"
#: wizard_field:crm.lead.opportunity_set,opportunity,probability:0
#: wizard_field:crm.phonecall.opportunity_set,opportunity,probability:0
msgid "Success Probability"
-msgstr ""
+msgstr "Prawdopodobieństwo sukcesu"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -3511,7 +3580,7 @@ msgstr "Projekt"
#. module: crm
#: field:crm.case.rule,trg_date_range:0
msgid "Delay after trigger date"
-msgstr ""
+msgstr "Opóźnienie po dacie wyzwolenia"
#. module: crm
#: view:crm.lead:0
@@ -3537,7 +3606,7 @@ msgstr "Normalny"
#: code:addons/crm/wizard/wizard_crm_send_email.py:0
#, python-format
msgid "You must put a Partner eMail to use this action!"
-msgstr ""
+msgstr "Musisz podac email pertnera, aby zastosować tę akcję!"
#. module: crm
#: wizard_view:crm.job.partner_create,init:0
@@ -3546,17 +3615,17 @@ msgstr ""
#: wizard_view:crm.phonecall.opportunity_set,create_partner:0
#: wizard_view:crm.phonecall.partner_create,init:0
msgid "You may have to verify that this partner does not exist already."
-msgstr ""
+msgstr "Powinieneś sprawdzić, czy ten partner już istnieje."
#. module: crm
#: view:crm.job:0
msgid "Qualication"
-msgstr ""
+msgstr "Kwalifikacje"
#. module: crm
#: view:crm.meeting:0
msgid "Change RRule"
-msgstr ""
+msgstr "Zmień regułę"
#. module: crm
#: selection:crm.email.add.cc,name:0
@@ -3566,14 +3635,14 @@ msgstr ""
#: field:report.crm.case.section.categ2,user_id:0
#: field:report.crm.case.section.stage,user_id:0
msgid "User"
-msgstr ""
+msgstr "Użytkownik"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ_categ2
#: model:ir.ui.menu,name:crm.menu_crm_case_section_categ_categ2_tree
#: view:report.crm.case.section.categ.categ2:0
msgid "Cases by Section, Category and Type"
-msgstr ""
+msgstr "Sprawy wg sekcji, kategorii i typu"
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -3581,7 +3650,7 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "November"
-msgstr ""
+msgstr "Listopad"
#. module: crm
#: model:crm.case.category2,name:crm.category_job2
@@ -3602,14 +3671,14 @@ msgstr "Sekcja nadrzędna"
#: model:ir.actions.wizard,name:crm.wizard_crm_job_reschedule_phone_call
#: model:ir.actions.wizard,name:crm.wizard_crm_opportunity_reschedule_phone_call
msgid "Schedule Phone Call"
-msgstr ""
+msgstr "Zaplanuj rozmowę telefoniczną"
#. module: crm
#: code:addons/crm/crm.py:0
#, python-format
msgid ""
"Can not send mail with empty body,you should have description in the body"
-msgstr ""
+msgstr "Nie można wysłać wiadomości z pustą treścią."
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -3617,12 +3686,12 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "January"
-msgstr ""
+msgstr "Styczeń"
#. module: crm
#: model:process.process,name:crm.process_process_contractprocess0
msgid "Contract"
-msgstr ""
+msgstr "Umowa"
#. module: crm
#: field:crm.case.section,child_ids:0
@@ -3637,7 +3706,7 @@ msgstr "Planowany dochód"
#. module: crm
#: model:crm.case.categ,name:crm.categ_fund3
msgid "Healthcare"
-msgstr ""
+msgstr "Służba zdrowia"
#. module: crm
#: view:crm.case:0
@@ -3651,7 +3720,7 @@ msgstr ""
#: view:crm.phonecall:0
#: view:crm.phonecall.assign_wizard:0
msgid "Assign"
-msgstr ""
+msgstr "Przydziel"
#. module: crm
#: field:crm.case,partner_address_id:0
@@ -3661,17 +3730,17 @@ msgstr "Kontakt do partnera"
#. module: crm
#: model:crm.case.category2,name:crm.category_meet1
msgid "Office"
-msgstr ""
+msgstr "Biuro"
#. module: crm
#: model:ir.model,name:crm.model_crm_fundraising
msgid "Fund Raising Cases"
-msgstr ""
+msgstr "Sprawy podwyższania funduszy"
#. module: crm
#: model:ir.model,name:crm.model_crm_case_stage
msgid "Stage of case"
-msgstr ""
+msgstr "Etap sprawy"
#. module: crm
#: view:crm.case:0
@@ -3700,49 +3769,49 @@ msgstr ""
#. module: crm
#: view:crm.case.rule:0
msgid "Conditions on Case Partner"
-msgstr ""
+msgstr "Warunki na partnera sprawy"
#. module: crm
#: field:crm.case.section,code:0
msgid "Section Code"
-msgstr ""
+msgstr "Kod sekcji"
#. module: crm
#: wizard_field:crm.job.meeting_set,init,date:0
#: wizard_field:crm.phonecall.meeting_set,init,date:0
msgid "Meeting date"
-msgstr ""
+msgstr "Data spotkania"
#. module: crm
#: selection:crm.meeting,class:0
msgid "CONFIDENTIAL"
-msgstr ""
+msgstr "POUFNE"
#. module: crm
#: help:crm.case.rule,act_mail_body:0
msgid "Content of mail"
-msgstr ""
+msgstr "Treść wiaodmości"
#. module: crm
#: model:crm.case.stage,name:crm.stage_meet2
msgid "Not fixed"
-msgstr ""
+msgstr "Nie ustalone"
#. module: crm
#: model:crm.case.categ,name:crm.categ_lead3
#: model:crm.case.categ,name:crm.categ_oppor3
msgid "Employee"
-msgstr ""
+msgstr "Pracownik"
#. module: crm
#: field:crm.case,email_from:0
msgid "Partner Email"
-msgstr ""
+msgstr "Email partnera"
#. module: crm
#: view:crm.case.rule:0
msgid "% = The '%' Character"
-msgstr ""
+msgstr "% = Znak '%'"
#. module: crm
#: view:crm.case:0
@@ -3763,18 +3832,20 @@ msgstr "Opis"
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "May"
-msgstr ""
+msgstr "Maj"
#. module: crm
#: view:crm.job:0
msgid "Internal Notes"
-msgstr ""
+msgstr "Wiadomości wewnętrzne"
#. module: crm
#: help:crm.case.rule,act_remind_user:0
msgid ""
"Check this if you want the rule to send a reminder by email to the user."
msgstr ""
+"Zaznacz to, jeśli chcesz aby reguła wysłała przypomnienie mailem do "
+"użytkownika."
#. module: crm
#: view:crm.case:0
@@ -3786,7 +3857,7 @@ msgstr ""
#: view:crm.opportunity:0
#: wizard_field:crm.send.mail,init,cc:0
msgid "CC"
-msgstr ""
+msgstr "DW"
#. module: crm
#: field:crm.segmentation.line,operator:0
@@ -3796,7 +3867,7 @@ msgstr "Obowiązkowe / Opcjonalne"
#. module: crm
#: wizard_button:caldav.crm.import,init,open:0
msgid "_Import"
-msgstr ""
+msgstr "_Importuj"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -3813,7 +3884,7 @@ msgstr ""
#: model:res.request.link,name:crm.req_link_case
#, python-format
msgid "Case"
-msgstr "Przypadek"
+msgstr "Sprawa"
#. module: crm
#: selection:crm.case,priority:0
@@ -3829,19 +3900,19 @@ msgstr "Najniższy"
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "February"
-msgstr ""
+msgstr "Luty"
#. module: crm
#: view:crm.phonecall:0
#: model:ir.actions.act_window,name:crm.crm_case_categ_meet_case
#: model:ir.actions.act_window,name:crm.crm_case_categ_meet_create_partner
msgid "Schedule a Meeting"
-msgstr ""
+msgstr "Zaplanuj spotkanie"
#. module: crm
#: view:crm.case.rule:0
msgid "Conditions on Priority Range"
-msgstr ""
+msgstr "Warunki na zakres priorytetu"
#. module: crm
#: help:crm.segmentation,som_interval_decrease:0
@@ -3849,17 +3920,19 @@ msgid ""
"If the partner has not purchased (or buied) during a period, decrease the "
"state of mind by this factor. It's a multiplication"
msgstr ""
+"Jeśli partner nie zakupił nic przez ten okres, to zmniejsz jego stan emocji "
+"o ten współczynnik. To jest dzielenie."
#. module: crm
#: wizard_view:crm.new.send.mail,init:0
#: wizard_view:crm.send.mail,init:0
msgid "Mass Mailing"
-msgstr ""
+msgstr "Poczta masowa"
#. module: crm
#: view:crm.case.rule:0
msgid "E-Mail Actions"
-msgstr ""
+msgstr "Akcje email"
#. module: crm
#: field:report.crm.case.section.categ.categ2,name:0
@@ -3867,22 +3940,22 @@ msgstr ""
#: field:report.crm.case.section.categ2,name:0
#: field:report.crm.case.section.stage,name:0
msgid "Year"
-msgstr ""
+msgstr "Rok"
#. module: crm
#: model:crm.case.category2,name:crm.categ2_fund1
msgid "Cash"
-msgstr ""
+msgstr "Gotówka"
#. module: crm
#: view:crm.fundraising:0
msgid "Funds by Categories"
-msgstr ""
+msgstr "Fundusze wg kategorii"
#. module: crm
#: model:process.node,note:crm.process_node_leads0
msgid "Very first contact with new prospect"
-msgstr ""
+msgstr "Pierwszy kontakt z tą okazją"
#. module: crm
#: selection:report.crm.case.section.categ.categ2,month:0
@@ -3890,42 +3963,42 @@ msgstr ""
#: selection:report.crm.case.section.categ2,month:0
#: selection:report.crm.case.section.stage,month:0
msgid "April"
-msgstr ""
+msgstr "Kwiecień"
#. module: crm
#: model:crm.case.stage,name:crm.stage_meet5
msgid "Future"
-msgstr ""
+msgstr "Przyszłe"
#. module: crm
#: wizard_field:caldav.crm.export,init,file_path:0
msgid "Save ICS file"
-msgstr ""
+msgstr "Zapisz plik ICS"
#. module: crm
#: wizard_field:caldav.crm.subscribe,init,url_path:0
msgid "Provide path for remote calendar"
-msgstr ""
+msgstr "Wprowadź ścieżkę dla zdalnego kalendarza"
#. module: crm
#: view:crm.case.log:0
msgid "Case logs"
-msgstr ""
+msgstr "Log sprawy"
#. module: crm
#: view:crm.case.rule:0
msgid "Conditions on Timing"
-msgstr ""
+msgstr "Warunki na czas"
#. module: crm
#: model:ir.model,name:crm.model_crm_helpdesk
msgid "Helpdesk Cases"
-msgstr ""
+msgstr "Sprawy helpdesku"
#. module: crm
#: model:ir.actions.wizard,name:crm.wizard_crm_cal_export
msgid "Export ICS File"
-msgstr ""
+msgstr "Eksportuj plik ICS"
#. module: crm
#: field:crm.case.rule,sequence:0
@@ -3938,38 +4011,38 @@ msgstr "Numeracja"
#: wizard_view:caldav.crm.import,init:0
#: wizard_field:caldav.crm.import,init,file_path:0
msgid "Select ICS file"
-msgstr ""
+msgstr "Wybierz plik ICS"
#. module: crm
#: wizard_view:caldav.crm.import,display:0
msgid "Import Message"
-msgstr ""
+msgstr "Importuj wiadomość"
#. module: crm
#: field:crm.segmentation.line,expr_name:0
msgid "Control Variable"
-msgstr ""
+msgstr "Zmienna kontrolna"
#. module: crm
#: model:ir.actions.act_window,name:crm.crm_case_section_act_tree
#: model:ir.ui.menu,name:crm.menu_crm_case_section_act_tree
msgid "Cases by section"
-msgstr "Przypadki wg sekcji"
+msgstr "Sprawy wg sekcji"
#. module: crm
#: view:crm.job:0
msgid "New Jobs"
-msgstr ""
+msgstr "Nowe stanowiska"
#. module: crm
#: field:crm.menu.config_wizard,fund:0
msgid "Fund Raising Operations"
-msgstr ""
+msgstr "Operacje zwiększania funduszy"
#. module: crm
#: model:crm.case.category2,name:crm.category_lead8
msgid "Newsletter"
-msgstr ""
+msgstr "Biuletyn"
#~ msgid "My "
#~ msgstr "Moje "
diff --git a/addons/crm/i18n/pt_BR.po b/addons/crm/i18n/pt_BR.po
index 22ee8947778..d848e510234 100644
--- a/addons/crm/i18n/pt_BR.po
+++ b/addons/crm/i18n/pt_BR.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-02-02 17:06+0000\n"
-"Last-Translator: pedrobom \n"
+"PO-Revision-Date: 2010-05-22 04:53+0000\n"
+"Last-Translator: Guilherme Santos \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:02+0000\n"
+"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
@@ -111,7 +111,7 @@ msgstr ""
#. module: crm
#: model:ir.ui.menu,name:crm.menu_hr
msgid "Human Resources"
-msgstr ""
+msgstr "Recursos Humanos"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_categ2
@@ -229,7 +229,7 @@ msgstr "Seção de caso"
#. module: crm
#: view:crm.job:0
msgid "Proposed Salary"
-msgstr "Salário proposto"
+msgstr "Salário Proposto"
#. module: crm
#: help:crm.case.section,sequence:0
@@ -272,7 +272,7 @@ msgstr "Palavras-chave especiais a serem utilizadas no corpo"
#: view:crm.lead:0
#: view:crm.opportunity:0
msgid "Send New Email"
-msgstr "Envia Novo Email"
+msgstr "Enviar Novo Email"
#. module: crm
#: view:crm.case.history:0
diff --git a/addons/crm/report/crm_lead_report_view.xml b/addons/crm/report/crm_lead_report_view.xml
index 78a5ffa34c8..c1d64ee332c 100644
--- a/addons/crm/report/crm_lead_report_view.xml
+++ b/addons/crm/report/crm_lead_report_view.xml
@@ -63,7 +63,7 @@
-
+
crm.lead.report.selectcrm.lead.report
@@ -119,7 +119,7 @@
-
+
@@ -144,14 +144,14 @@
-
+
-
+
@@ -180,9 +180,9 @@
-
+
-
+
@@ -220,7 +220,7 @@
-
+
Opportunitiescrm.lead.report
@@ -244,7 +244,7 @@
-
+
diff --git a/addons/crm/security/ir.model.access.csv b/addons/crm/security/ir.model.access.csv
index f78044ea38e..1f90f74f281 100644
--- a/addons/crm/security/ir.model.access.csv
+++ b/addons/crm/security/ir.model.access.csv
@@ -6,12 +6,8 @@
"access_crm_meeting","crm.meeting","model_crm_meeting","crm.group_crm_manager",1,1,1,1
"access_crm_lead","crm.lead","model_crm_lead","crm.group_crm_manager",1,1,1,1
"access_crm_phonecall","crm.phonecall","model_crm_phonecall","crm.group_crm_manager",1,1,1,1
-"access_crm_case_log","crm.case.log","model_crm_case_log","crm.group_crm_user",1,1,1,1
-"access_crm_case_history","crm.case.history","model_crm_case_history","crm.group_crm_user",1,1,1,1
-"o","crm.case.section.manager","model_crm_case_section","crm.group_crm_manager",1,1,1,1
+"access_crm_case_section_manager","crm.case.section.manager","model_crm_case_section","crm.group_crm_manager",1,1,1,1
"access_crm_case_categ_manager","crm.case.categ.manager","model_crm_case_categ","crm.group_crm_manager",1,1,1,1
-"access_crm_case_log_manager","crm.case.log manager","model_crm_case_log","crm.group_crm_manager",1,1,1,1
-"access_crm_case_history_manager","crm.case.history manager","model_crm_case_history","crm.group_crm_manager",1,1,1,1
"access_crm_case_stage","crm.case.stage","model_crm_case_stage","crm.group_crm_user",1,0,0,0
"access_crm_case_stage_manager","crm.case.stage","model_crm_case_stage","crm.group_crm_manager",1,1,1,1
"access_crm_case_resource_type_user","crm_case_resource_type user","model_crm_case_resource_type","crm.group_crm_user",1,0,0,0
diff --git a/addons/crm/test/test_crm_lead.yml b/addons/crm/test/test_crm_lead.yml
index 0a051d2310d..bfdbe912fed 100644
--- a/addons/crm/test/test_crm_lead.yml
+++ b/addons/crm/test/test_crm_lead.yml
@@ -16,7 +16,6 @@
login: user_crm
name: user_crm
password: user_crm
-
- |
I start by creating a new lead "New Customer" and I provide an address to this
@@ -25,7 +24,7 @@
!record {model: crm.lead, id: crm_lead_newcustomer0}:
email_from: info@mycustomer.com
name: New Customer
- partner_name: Sandip zala
+ partner_name: Capegemini
phone: (855) 924-4364
mobile: (333) 715-1450
section_id: crm.section_sales_department
@@ -41,6 +40,11 @@
-
!python {model: crm.lead}: |
self.case_open(cr, uid, [ref("crm_lead_newcustomer0")])
+- |
+ I check that lead is now in 'open' state.
+-
+ !assert {model: crm.lead, id: crm_lead_newcustomer0, string: Lead in open state}:
+ - state == "open"
- |
As the lead seems to be a real business opportunity, I will convert it to a
@@ -49,8 +53,8 @@
-
!python {model: crm.lead}: |
lead = self.browse(cr, uid, ref('crm_lead_newcustomer0'))
- if not lead.partner_id:
- self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]})
+ action = self.convert_opportunity(cr, uid, [ref("crm_lead_newcustomer0")], {'active_ids': [ref("crm_lead_newcustomer0")]})
+ assert action['res_model'] == 'crm.lead2opportunity.partner'
-
|
Now, select "create a new partner" option in this wizard.
@@ -66,7 +70,7 @@
Now, I give value to this wizard field.
-
!record {model: crm.lead2opportunity, id: crm_lead2opportunity_stonage_0}:
- name: Sandip zala
+ name: Capegemini
planned_revenue: 0.00
probability: 0.00
-
@@ -79,8 +83,8 @@
I can check that a lead and a business opportunity is now assigned to this
lead.
-
- # !python {model: crm.lead, id: crm_lead_newcustomer0}:
- # - opportunity_id.id != False
+ # !python {model: crm.lead, id: crm_lead_newcustomer0}:
+ # - opportunity_id == False
- |
I check that the partner associated to this lead as the same country, phone number
@@ -109,4 +113,4 @@
- |
I Reply to last Email to lead with some document attached.and check that communication history generated or not.
-
\ No newline at end of file
+
diff --git a/addons/crm/test/test_crm_phonecall.yml b/addons/crm/test/test_crm_phonecall.yml
index feb87e0a879..f2020659aed 100644
--- a/addons/crm/test/test_crm_phonecall.yml
+++ b/addons/crm/test/test_crm_phonecall.yml
@@ -4,44 +4,55 @@
!record {model: crm.phonecall, id: crm_phonecall_interviewcall0}:
date: '2010-04-21 18:59:00'
name: Interview call
- partner_address_id: base.res_partner_address_1
- partner_id: base.res_partner_9
- partner_mobile: (+32)2 211 34 83
section_id: crm.section_sales_department
+- |
+ Now , I select partner by click on "Create a Partner" button.
+
+-
+ !record {model: crm.phonecall2partner, id: crm_phonecall2partner_1}:
+ action: exist
+ partner_id: base.res_partner_9
+
+-
+ Now, click on "Continue" button of this wizard.
+-
+ !python {model: crm.phonecall2partner}: |
+ self.make_partner(cr, uid, [ref("crm_phonecall2partner_1")], {"active_ids": [ref("crm_phonecall_interviewcall0")]})
- |
As the success of phonecall seems to be a real business opportunity, I will convert
it to opportunity by clicking on the "Convert to Opportunity" button.
+-
+ !record {model: crm.phonecall2opportunity, id: crm_phonecall2opportunity_interviewcall0}:
+ name: Interview call
+ partner_id: base.res_partner_9
+ planned_revenue: 0.0
+ probability: 0.0
+-
+ Now, I click on "Convert" button of this wizard.
-
-# !python {model: crm.phonecall2opportunity}: |
-# self.action_apply(cr, uid, [1], {'active_id': ref('crm_phonecall_interviewcall0')})
-
+ !python {model: crm.phonecall2opportunity}: |
+ self.action_apply(cr, uid, [ref("crm_phonecall2opportunity_interviewcall0")], {"active_id": ref("crm_phonecall_interviewcall0")})
-
# This is not working, find a way to do that in YAML
-
+
- |
I can see that a business opportunity is now assigned to this phonecall
-- |
- I check that the partner associated to this as the same country, phone number
- and name than the phonecall.
-- |
- In order to avoid the duplication of similar partner, OpenERP should be able to
- detect if the partner exists or if it should be created from the phonecall during the
- conversion.
-- |
- In order to test this, I log as the user "user_crm2"
-- |
- Then, I create the same phonecall than the preceeding one but I change the name
- of the phonecall. But this customer keeps the same email.
-- |
- This time OpenERP should detect that this customer already exists in the
- partner base and I check that in the wizard, proposes me to link to this existing
- partner instead of creating another one.
-- |
- I confirm the conversion wizard.
+-
+ !assert {model: crm.phonecall, id: crm_phonecall_interviewcall0}:
+ - opportunity_id == True
+
- |
And I check that the phonecall and the newly created business opportunity is linked
- to the partner
+ to same partner
+-
+ !python {model: crm.phonecall}: |
+ xid= ref('crm_phonecall_interviewcall0')
+ obj_phonecall = self.browse(cr, uid, xid)
+ ids = self.pool.get('crm.lead').search(cr, uid, [('name', '=', obj_phonecall.opportunity_id.name)])
+ obj_opp = self.pool.get('crm.lead').browse(cr, uid, ids)[0]
+ assert obj_phonecall.partner_id == obj_opp.partner_id
+
- |
I schedule Meeting on this current phonecall by clicking on "schedule
Meeting"
diff --git a/addons/crm/wizard/crm_forward_to_partner.py b/addons/crm/wizard/crm_forward_to_partner.py
index 98d5392faa3..153f136cfb2 100644
--- a/addons/crm/wizard/crm_forward_to_partner.py
+++ b/addons/crm/wizard/crm_forward_to_partner.py
@@ -176,7 +176,6 @@ class crm_lead_forward_to_partner(osv.osv_memory):
this = self.browse(cr, uid, ids[0], context=context)
- hist_obj = self.pool.get('crm.case.history')
smtp_pool = self.pool.get('email.smtpclient')
case_pool = self.pool.get(model)
case = case_pool.browse(cr, uid, res_id, context=context)
diff --git a/addons/crm/wizard/crm_lead_to_opportunity.py b/addons/crm/wizard/crm_lead_to_opportunity.py
index f4cecbe508f..12edf5edc6d 100644
--- a/addons/crm/wizard/crm_lead_to_opportunity.py
+++ b/addons/crm/wizard/crm_lead_to_opportunity.py
@@ -57,7 +57,6 @@ class crm_lead2opportunity(osv.osv_memory):
lead_obj = self.pool.get('crm.lead')
data_obj = self.pool.get('ir.model.data')
- history_obj = self.pool.get('crm.case.history')
model_obj = self.pool.get('ir.model')
# Get Opportunity views
diff --git a/addons/crm/wizard/crm_lead_to_partner_view.xml b/addons/crm/wizard/crm_lead_to_partner_view.xml
index ee6c1522e22..2f7f8540e7f 100644
--- a/addons/crm/wizard/crm_lead_to_partner_view.xml
+++ b/addons/crm/wizard/crm_lead_to_partner_view.xml
@@ -42,12 +42,15 @@
-
-
+
+
+ Create a Partner
+ ir.actions.act_window
+ crm.lead2partner
+ form
+
+ new
+
diff --git a/addons/crm/wizard/crm_partner_to_opportunity_view.xml b/addons/crm/wizard/crm_partner_to_opportunity_view.xml
index 41c32a9fa42..7bda631e032 100644
--- a/addons/crm/wizard/crm_partner_to_opportunity_view.xml
+++ b/addons/crm/wizard/crm_partner_to_opportunity_view.xml
@@ -39,7 +39,8 @@
key2="client_action_multi" name="Create Opportunity"
res_model="crm.partner2opportunity" src_model="res.partner"
view_id="view_crm_lead2partner_create"
- view_mode="form" target="new" view_type="form" />
+ view_mode="form" target="new" view_type="form"
+ groups="base.group_extended"/>
diff --git a/addons/crm/wizard/crm_phonecall_to_partner_view.xml b/addons/crm/wizard/crm_phonecall_to_partner_view.xml
index 524384328f3..c7da406f687 100644
--- a/addons/crm/wizard/crm_phonecall_to_partner_view.xml
+++ b/addons/crm/wizard/crm_phonecall_to_partner_view.xml
@@ -43,11 +43,15 @@
-
+
+ Create a Partner
+ ir.actions.act_window
+ crm.phonecall2partner
+ form
+
+ new
+
+
diff --git a/addons/crm/wizard/crm_send_email.py b/addons/crm/wizard/crm_send_email.py
index 87537ebc240..8458172104a 100644
--- a/addons/crm/wizard/crm_send_email.py
+++ b/addons/crm/wizard/crm_send_email.py
@@ -98,7 +98,9 @@ class crm_send_new_email(osv.osv_memory):
message_id = hist.message_id
model = hist.model_id.model
model_pool = self.pool.get(model)
- case = model_pool.browse(cr, uid, hist.res_id)
+ res_ids = model_pool.search(cr, uid, [('thread_id','=', hist.thread_id.id)])
+ res_id = res_ids and res_ids[0] or False
+ case = model_pool.browse(cr, uid, res_id)
emails = [obj.email_to] + (obj.email_cc or '').split(',')
emails = filter(None, emails)
body = obj.text
@@ -197,7 +199,9 @@ class crm_send_new_email(osv.osv_memory):
return {}
model_pool = self.pool.get(model)
- case = model_pool.browse(cr, uid, hist.res_id)
+ res_ids = model_pool.search(cr, uid, [('thread_id','=', hist.thread_id.id)])
+ res_id = res_ids and res_ids[0] or False
+ case = model_pool.browse(cr, uid, res_id)
if 'email_to' in fields:
res.update({'email_to': case.email_from or hist.email_from or False})
if 'email_from' in fields:
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index a535efbdb81..d9a7a2b34c0 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -29,10 +29,15 @@ class crm_claim(osv.osv, crm.crm_case):
_name = "crm.claim"
_description = "Claim Cases"
_order = "id desc"
- _inherit = 'mailgate.thread'
+ _inherits = {'mailgate.thread': 'thread_id'}
+
_columns = {
+ 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
'id': fields.integer('ID', readonly=True),
'name': fields.char('Name', size=128, required=True),
+ 'active': fields.boolean('Active', required=False),
+ 'date_action_last': fields.datetime('Last Action', readonly=1),
+ 'date_action_next': fields.datetime('Next Action', readonly=1),
'description': fields.text('Description'),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Update Date' , readonly=True),
diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml
index b0d17495dee..7fb1c08f84b 100644
--- a/addons/crm_claim/crm_claim_menu.xml
+++ b/addons/crm_claim/crm_claim_menu.xml
@@ -14,7 +14,7 @@
formtree,calendar,form,graph
- {"search_default_section_id":section_id,"search_default_current":1,"search_default_my_claims":1}
+ {"search_default_section_id":section_id,"search_default_current":1,"search_default_user_id":uid}
diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml
index 4228096e670..7a3dd4cc829 100644
--- a/addons/crm_claim/crm_claim_view.xml
+++ b/addons/crm_claim/crm_claim_view.xml
@@ -246,8 +246,8 @@
search
-
-
-
-
+ widget="selection"/>
Fundscrm.fundraisingtree,form,graph
- {"search_default_current":1}
+ {"search_default_user_id":uid,"search_default_current":1}
diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml
index 9a2b3b4c524..68fcd768d74 100644
--- a/addons/crm_fundraising/crm_fundraising_view.xml
+++ b/addons/crm_fundraising/crm_fundraising_view.xml
@@ -249,8 +249,7 @@
-
-
+
CRM - Funds Searchcrm.fundraising
@@ -269,12 +268,6 @@
domain="[('state','=','pending')]"
help="Pending Funds" />
-
-
@@ -306,6 +299,5 @@
-
diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py
index 4329ef7d73b..d07d2261013 100644
--- a/addons/crm_helpdesk/crm_helpdesk.py
+++ b/addons/crm_helpdesk/crm_helpdesk.py
@@ -28,11 +28,15 @@ class crm_helpdesk(osv.osv, crm.crm_case):
_name = "crm.helpdesk"
_description = "Helpdesk Cases"
_order = "id desc"
- _inherit = 'mailgate.thread'
+ _inherits = {'mailgate.thread': 'thread_id'}
_columns = {
+ 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
'id': fields.integer('ID', readonly=True),
'name': fields.char('Name', size=128, required=True),
+ 'active': fields.boolean('Active', required=False),
+ 'date_action_last': fields.datetime('Last Action', readonly=1),
+ 'date_action_next': fields.datetime('Next Action', readonly=1),
'description': fields.text('Description'),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Update Date' , readonly=True),
diff --git a/addons/crm_helpdesk/crm_helpdesk_menu.xml b/addons/crm_helpdesk/crm_helpdesk_menu.xml
index 5030fd65506..f671e3b77e0 100644
--- a/addons/crm_helpdesk/crm_helpdesk_menu.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_menu.xml
@@ -11,6 +11,7 @@
crm.helpdesktree,calendar,form
+ {"search_default_user_id":uid}
diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml
index 93311395510..27ccee6ef0d 100644
--- a/addons/crm_helpdesk/crm_helpdesk_view.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_view.xml
@@ -236,11 +236,7 @@
-
-
-
+ \n"
+"PO-Revision-Date: 2010-05-21 20:20+0000\n"
+"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:17+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_profiling
@@ -49,7 +49,7 @@ msgstr ""
#. module: crm_profiling
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nieprawidłowa nazwa modelu w definicji akcji."
#. module: crm_profiling
#: field:crm_profiling.answer,name:0
@@ -70,7 +70,7 @@ msgstr "Opis"
#. module: crm_profiling
#: field:crm.segmentation,answer_no:0
msgid "Excluded Answers"
-msgstr ""
+msgstr "Wyłączone odpowiedzi"
#. module: crm_profiling
#: view:crm_profiling.answer:0
@@ -111,12 +111,12 @@ msgstr "Kwestionariusz"
#. module: crm_profiling
#: constraint:crm.segmentation:0
msgid "Error ! You can not create recursive profiles."
-msgstr ""
+msgstr "Błąd ! Nie możesz tworzyć profilów rekurencyjnych."
#. module: crm_profiling
#: field:crm.segmentation,profiling_active:0
msgid "Use The Profiling Rules"
-msgstr ""
+msgstr "Stosuj reguły profili"
#. module: crm_profiling
#: view:crm_profiling.question:0
@@ -127,7 +127,7 @@ msgstr "Dostępne odpowiedzi"
#. module: crm_profiling
#: field:crm.segmentation,answer_yes:0
msgid "Included Answers"
-msgstr ""
+msgstr "Włączone odpowiedzi"
#. module: crm_profiling
#: help:crm.segmentation,profiling_active:0
@@ -147,7 +147,7 @@ msgstr "Pytania"
#. module: crm_profiling
#: field:crm.segmentation,parent_id:0
msgid "Parent Profile"
-msgstr ""
+msgstr "Profil nadrzędny"
#. module: crm_profiling
#: wizard_button:open_questionnaire,init,end:0
@@ -158,12 +158,12 @@ msgstr "Anuluj"
#. module: crm_profiling
#: view:crm.segmentation:0
msgid "Partner Segmentations"
-msgstr ""
+msgstr "Segmentacja partnera"
#. module: crm_profiling
#: model:ir.actions.wizard,name:crm_profiling.wizard_open_questionnaire
msgid "Using a questionnaire"
-msgstr "Uzywanie kwestionariusza"
+msgstr "Używanie kwestionariusza"
#. module: crm_profiling
#: wizard_button:open_questionnaire,open,compute:0
diff --git a/addons/crm_vertical/i18n/id.po b/addons/crm_vertical/i18n/id.po
index 78fa6ce730c..2001657f4ab 100644
--- a/addons/crm_vertical/i18n/id.po
+++ b/addons/crm_vertical/i18n/id.po
@@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-09 13:48+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2010-05-18 10:59+0000\n"
+"Last-Translator: Pandu Pradana \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:20+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_vertical
#: model:ir.module.module,description:crm_vertical.module_meta_information
msgid "Simplification of the interface for CRM."
-msgstr ""
+msgstr "Penyederhanaan dari antar-muka CRM."
diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py
index 35b3ed481e9..4b87e4c790e 100644
--- a/addons/delivery/delivery.py
+++ b/addons/delivery/delivery.py
@@ -26,7 +26,7 @@ from tools.translate import _
class delivery_carrier(osv.osv):
_name = "delivery.carrier"
- _description = "Carrier and delivery grids"
+ _description = "Carrier"
def name_get(self, cr, uid, ids, context={}):
if not len(ids):
@@ -144,7 +144,7 @@ delivery_grid()
class delivery_grid_line(osv.osv):
_name = "delivery.grid.line"
- _description = "Delivery line of grid"
+ _description = "Delivery Grid Line"
_columns = {
'name': fields.char('Name', size=32, required=True),
'grid_id': fields.many2one('delivery.grid', 'Grid',required=True),
diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml
index 6a8058ff8bc..427f5bfd6f2 100644
--- a/addons/delivery/delivery_view.xml
+++ b/addons/delivery/delivery_view.xml
@@ -128,7 +128,7 @@
-
+
diff --git a/addons/delivery/security/ir.model.access.csv b/addons/delivery/security/ir.model.access.csv
index 948a85c35c7..e459c423b59 100644
--- a/addons/delivery/security/ir.model.access.csv
+++ b/addons/delivery/security/ir.model.access.csv
@@ -7,3 +7,5 @@
"access_delivery_grid_line_manager","delivery.grid.line","model_delivery_grid_line","sale.group_sale_manager",1,1,1,1
"access_delivery_carrier_partner_manager","delivery.carrier partner_manager","model_delivery_carrier","base.group_partner_manager",1,0,0,0
"access_delivery_carrier_stock_worker","delivery.carrier stock_worker","model_delivery_carrier","stock.group_stock_user",1,0,0,0
+"access_delivery_sale_order_manager","delivery.sale.order","model_delivery_sale_order","sale.group_sale_manager",1,1,1,1
+"access_delivery_sale_order","delivery.sale.order","model_delivery_sale_order","sale.group_sale_user",1,0,0,0
diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py
index 6d8d5a17bd1..91dfed96f11 100644
--- a/addons/delivery/stock.py
+++ b/addons/delivery/stock.py
@@ -29,7 +29,7 @@ import decimal_precision as dp
# Overloaded stock_picking to manage carriers :
class stock_picking(osv.osv):
_name = "stock.picking"
- _description = "Picking list"
+ _description = "Packing List"
_inherit = 'stock.picking'
def _cal_weight(self, cr, uid, ids, name, args, context=None):
@@ -55,7 +55,7 @@ class stock_picking(osv.osv):
'weight': fields.function(_cal_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'),
store={
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20),
- 'stock.move': (_get_picking_line, ['product_id','product_uos_qty'], 20),
+ 'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20),
}),
}
diff --git a/addons/delivery/test/delivery_test.yml b/addons/delivery/test/delivery_test.yml
index cbc30822368..9225cbca66b 100644
--- a/addons/delivery/test/delivery_test.yml
+++ b/addons/delivery/test/delivery_test.yml
@@ -3,9 +3,8 @@
And there are two methods for doing that
Delivery based on order quantities,
Delivery based on delivered quantities.
-
-
- I create the partner associated with the transport.
+ I create the partner associated with the transport.
-
I create partner.
-
@@ -17,8 +16,6 @@
name: The Post
property_account_payable: account.a_pay
property_account_receivable: account.a_recv
-
-
-
I create associated product for delivery.
@@ -34,9 +31,7 @@
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
warranty: 0.0
-
-
-
I create the Delivery Method.
-
!record {model: delivery.carrier, id: delivery_carrier_theopenerpexperss0}:
@@ -74,7 +69,6 @@
name: Weight
sequence: 1
-
-
To check the Delivery based on order quantities , I have created sale order and picking_policy is direct .
-
@@ -101,14 +95,13 @@
picking_policy: direct
pricelist_id: product.list0
shop_id: sale.shop
-
-
- Creating a delivery.sale.order record
+ I create delivery.sale.order record.
-
!record {model: delivery.sale.order, id: delivery_sale_order_0}:
carrier_id: delivery_carrier_theopenerpexperss0
-
- To add the delivery charges on the quotation, I click on Delivery costs button and select the carrier.
+ To add the delivery charges on the quotation, I click on Delivery costs button and select the carrier.
-
!python {model: delivery.sale.order}: |
self.delivery_set(cr, uid, [ref("delivery_sale_order_0")], {"lang": "en_US", "active_model":
@@ -118,9 +111,8 @@
I confirm the sale order.
-
!workflow {model: sale.order, action: order_confirm, ref: sale_order_so0}
-
-
- To check the Invoicing based on deliveries.I create new sale order and picking_policy is Complete Delivery.
+ To check the Invoicing based on deliveries.I create new sale order and picking_policy is Complete Delivery.
-
!record {model: sale.order, id: sale_order_test_complete0}:
name: Test/Complete Deliver
@@ -143,8 +135,6 @@
partner_shipping_id: base.res_partner_address_7
pricelist_id: product.list0
order_policy: picking
-
-
-
I confirm the sale order.
-
@@ -162,6 +152,4 @@
so=self.pool.get('sale.order').browse(cr,uid,ref('sale_order_test_complete0'))
self.create_invoice(cr, uid, [ref("stock_invoice_onshipping_0")], {"lang": "en_US",
"tz": False, "active_model": "stock.picking", "contact_display": "partner",
- "active_ids": [so.picking_ids[0].id], "active_id": so.picking_ids[0].id })
-
-
+ "active_ids": [so.picking_ids[0].id], "active_id": so.picking_ids[0].id })
diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py
index 25e172d2817..56e52aa9b69 100644
--- a/addons/document/document_directory.py
+++ b/addons/document/document_directory.py
@@ -31,7 +31,7 @@ from tools.translate import _
class document_directory(osv.osv):
_name = 'document.directory'
- _description = 'Document directory'
+ _description = 'Directory'
_order = 'name desc'
_columns = {
'name': fields.char('Name', size=64, required=True, select=1),
@@ -286,7 +286,7 @@ class document_directory_dctx(osv.osv):
appended to all children down the tree.
"""
_name = 'document.directory.dctx'
- _description = 'Directory dynamic context'
+ _description = 'Directory Dynamic Context'
_columns = {
'dir_id': fields.many2one('document.directory', 'Directory', required=True),
'field': fields.char('Field', size=20, required=True, select=1, help="The name of the field. Note that the prefix \"dctx_\" will be prepended to what is typed here."),
diff --git a/addons/document/document_storage.py b/addons/document/document_storage.py
index 421c423b900..d20870ff825 100644
--- a/addons/document/document_storage.py
+++ b/addons/document/document_storage.py
@@ -95,7 +95,7 @@ class document_storage(osv.osv):
the same tree of filesystem storage.
"""
_name = 'document.storage'
- _description = 'Document storage media'
+ _description = 'Storage Media'
_columns = {
'name': fields.char('Name', size=64, required=True, select=1),
'write_date': fields.datetime('Date Modified', readonly=True),
diff --git a/addons/document/report/document_report_view.xml b/addons/document/report/document_report_view.xml
index b8bee399f82..c6d59fa3d29 100644
--- a/addons/document/report/document_report_view.xml
+++ b/addons/document/report/document_report_view.xml
@@ -42,7 +42,6 @@
-
@@ -65,6 +64,7 @@
report.document.userformtree
+ {"search_default_user":uid}
diff --git a/addons/document_ftp/doc_conf_wizard.py b/addons/document_ftp/doc_conf_wizard.py
index 72011c39759..1399bc276b5 100644
--- a/addons/document_ftp/doc_conf_wizard.py
+++ b/addons/document_ftp/doc_conf_wizard.py
@@ -30,7 +30,7 @@ import os
class document_configuration_wizard(osv.osv_memory):
_name='document.configuration.wizard'
- _description = 'Auto Directory configuration'
+ _description = 'Auto Directory Configuration'
_inherit = 'res.config'
_rec_name = 'host'
_columns = {
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index 58fe3cc358b..70870b50783 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -123,7 +123,7 @@ class abstracted_fs:
def db_list(self):
#return pooler.pool_dic.keys()
s = netsvc.ExportService.getService('db')
- result = s.exp_list()
+ result = s.exp_list(document=True)
self.db_name_list = []
for db_name in result:
db, cr = None, None
diff --git a/addons/document_ics/document_demo.xml b/addons/document_ics/document_demo.xml
index 06c72022fe7..a0e35563857 100644
--- a/addons/document_ics/document_demo.xml
+++ b/addons/document_ics/document_demo.xml
@@ -23,32 +23,32 @@
dtstart
-
+ dtend
-
+ summary
-
+ uid
-
+ description
-
+ url
-
+
diff --git a/addons/document_ics/document_ics.py b/addons/document_ics/document_ics.py
index 00f8927eb18..56998a9408a 100644
--- a/addons/document_ics/document_ics.py
+++ b/addons/document_ics/document_ics.py
@@ -177,7 +177,6 @@ class document_directory_content(osv.osv):
fexprs[n.name] = n.expr
if 'uid' not in fields:
- print "uid not in ", fields
# FIXME: should pass
return True
for child in parsedCal.getChildren():
@@ -189,7 +188,6 @@ class document_directory_content(osv.osv):
if enl =='uid':
uuid = event.value
if not enl in fields:
- # print "skip", enl
continue
if fields[enl] and funcs[enl] == 'field':
if ICS_TAGS[enl]=='normal':
@@ -216,7 +214,6 @@ class document_directory_content(osv.osv):
# end for
if not uuid:
- print "Skipping cal", child
# FIXME: should pass
continue
diff --git a/addons/document_ics/document_view.xml b/addons/document_ics/document_view.xml
index 0cbfb6f81e2..39b6908dc76 100644
--- a/addons/document_ics/document_view.xml
+++ b/addons/document_ics/document_view.xml
@@ -45,7 +45,7 @@
form
-
+
diff --git a/addons/document_ics/i18n/fr.po b/addons/document_ics/i18n/fr.po
index 829e71f8bb1..79a9107259d 100644
--- a/addons/document_ics/i18n/fr.po
+++ b/addons/document_ics/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-09 17:33+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-21 20:29+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:18+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document_ics
@@ -37,17 +37,17 @@ msgstr "Erreur ! Vous ne pouvez pas créer de Répertoires récursivement."
#. module: document_ics
#: field:document.ics.crm.wizard,jobs:0
msgid "Jobs Hiring Process"
-msgstr ""
+msgstr "Procédure de recrutement"
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Configure Calendars for CRM Sections"
-msgstr ""
+msgstr "Configure les calendriers pour les sections de la CRM"
#. module: document_ics
#: field:document.ics.crm.wizard,helpdesk:0
msgid "Helpdesk"
-msgstr ""
+msgstr "Support"
#. module: document_ics
#: field:document.directory.ics.fields,field_id:0
@@ -57,7 +57,7 @@ msgstr "Champ Open ERP"
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Next"
-msgstr ""
+msgstr "Suivant"
#. module: document_ics
#: field:document.directory.ics.fields,content_id:0
@@ -67,7 +67,7 @@ msgstr "Contenu"
#. module: document_ics
#: field:document.ics.crm.wizard,meeting:0
msgid "Calendar of Meetings"
-msgstr ""
+msgstr "Calendrier des Rendez Vous"
#. module: document_ics
#: model:crm.case.section,name:document_ics.section_meeting
@@ -82,12 +82,14 @@ msgstr "url"
#. module: document_ics
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nom de modèle invalide pour la définition de l'action"
#. module: document_ics
#: help:document.ics.crm.wizard,bugs:0
msgid "Used by companies to track bugs and support requests on softwares"
msgstr ""
+"Utilisé par les sociétés pour suivre des anomalies et des demandes de "
+"supports sur les logiciels"
#. module: document_ics
#: model:ir.actions.todo,note:document_ics.config_wizard_step_case_section_menu
@@ -95,6 +97,8 @@ msgid ""
"This Configuration step use to create Calendars in document for all Case "
"Sections"
msgstr ""
+"Cette étape de configuration est utilisé pour créer un calendrier dans la "
+"GED pour toutes les sections"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -107,6 +111,8 @@ msgid ""
"Help you to organise the jobs hiring process: evaluation, meetings, email "
"integration..."
msgstr ""
+"Aide à organiser le processus d'embauche: évaluation, rendez vous, gestion "
+"des emails"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -116,28 +122,30 @@ msgstr "description"
#. module: document_ics
#: model:ir.actions.act_window,name:document_ics.action_view_document_ics_config_directories
msgid "Configure Calendars for Sections "
-msgstr ""
+msgstr "Configurer les Calendriers pour ces Sections "
#. module: document_ics
#: help:document.ics.crm.wizard,opportunity:0
msgid "Tracks identified business opportunities for your sales pipeline."
-msgstr ""
+msgstr "Suivi des occasions identifiées d'affaires pour vos canaux de vente."
#. module: document_ics
#: help:document.ics.crm.wizard,fund:0
msgid ""
"This may help associations in their fund raising process and tracking."
msgstr ""
+"Ceci peut aider les associations dans leur procédure de collecte de fonds et "
+"de suivi."
#. module: document_ics
#: help:document.ics.crm.wizard,helpdesk:0
msgid "Manages an Helpdesk service."
-msgstr ""
+msgstr "Diriger un service d'assistance"
#. module: document_ics
#: field:document.ics.crm.wizard,fund:0
msgid "Fund Raising Operations"
-msgstr ""
+msgstr "Opérations de levée de fonds"
#. module: document_ics
#: field:document.directory.content,ics_object_id:0
@@ -147,12 +155,12 @@ msgstr "Objet"
#. module: document_ics
#: constraint:crm.case.section:0
msgid "Error ! You cannot create recursive sections."
-msgstr ""
+msgstr "Erreur ! Vous ne pouvez pas créer de sections récursives."
#. module: document_ics
#: model:ir.module.module,shortdesc:document_ics.module_meta_information
msgid "Support for iCal based on Document Management System"
-msgstr ""
+msgstr "Support iCal basé sur la gestion documentaire"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -173,6 +181,7 @@ msgstr "Valeur ICS"
#: model:ir.module.module,description:document_ics.module_meta_information
msgid "Allows to synchronise calendars with others applications."
msgstr ""
+"Autorise la syncrhonisation des calendriers avec les autres applications."
#. module: document_ics
#: constraint:ir.ui.view:0
@@ -189,12 +198,12 @@ msgstr ""
#. module: document_ics
#: field:document.ics.crm.wizard,name:0
msgid "Name"
-msgstr ""
+msgstr "Nom"
#. module: document_ics
#: help:document.ics.crm.wizard,meeting:0
msgid "Manages the calendar of meetings of the users."
-msgstr ""
+msgstr "Gère le calendrier des rendez-vous des utilisateurs"
#. module: document_ics
#: field:document.directory.content,ics_domain:0
@@ -207,6 +216,8 @@ msgid ""
"Manages the supplier and customers claims, including your corrective or "
"preventive actions."
msgstr ""
+"Gérér les réclamations fournisseurs et clients, incluant vos actions "
+"correctives ou préventives."
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -221,17 +232,17 @@ msgstr "Correspondance ICS"
#. module: document_ics
#: view:crm.case:0
msgid "Duration(In Hour)"
-msgstr ""
+msgstr "Durée (en heure)"
#. module: document_ics
#: field:document.ics.crm.wizard,document_ics:0
msgid "Shared Calendar"
-msgstr ""
+msgstr "Calendrier partagé"
#. module: document_ics
#: field:document.ics.crm.wizard,claims:0
msgid "Claims"
-msgstr ""
+msgstr "Réclamations"
#. module: document_ics
#: help:document.ics.crm.wizard,phonecall:0
@@ -239,6 +250,8 @@ msgid ""
"Help you to encode the result of a phone call or to planify a list of phone "
"calls to process."
msgstr ""
+"Aide à encoder le résultat d'une conversation téléphonique ou à plannifier "
+"une liste"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -248,12 +261,12 @@ msgstr "dtstart"
#. module: document_ics
#: field:document.ics.crm.wizard,phonecall:0
msgid "Phone Calls"
-msgstr ""
+msgstr "Appels téléphoniques"
#. module: document_ics
#: field:document.ics.crm.wizard,bugs:0
msgid "Bug Tracking"
-msgstr ""
+msgstr "Suivi des Bugs"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -263,12 +276,12 @@ msgstr "catégories"
#. module: document_ics
#: field:document.ics.crm.wizard,lead:0
msgid "Prospect"
-msgstr ""
+msgstr "Prospect"
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Create Pre-Configured Calendars"
-msgstr ""
+msgstr "Création de calendriers pré-configurer"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -278,7 +291,7 @@ msgstr "créé"
#. module: document_ics
#: field:crm.case,code:0
msgid "Calendar Code"
-msgstr ""
+msgstr "Code Calendrier"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -288,7 +301,7 @@ msgstr "résumé"
#. module: document_ics
#: model:ir.model,name:document_ics.model_document_ics_crm_wizard
msgid "document.ics.crm.wizard"
-msgstr ""
+msgstr "document.ics.crm.wizard"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
@@ -308,14 +321,14 @@ msgstr "Correspondance des champs"
#. module: document_ics
#: view:document.ics.crm.wizard:0
msgid "Cancel"
-msgstr ""
+msgstr "Annuler"
#. module: document_ics
#: field:document.ics.crm.wizard,opportunity:0
msgid "Business Opportunities"
-msgstr ""
+msgstr "Opportunités d'affaire"
#. module: document_ics
#: selection:document.directory.ics.fields,name:0
msgid "dtstamp"
-msgstr ""
+msgstr "dtstamp"
diff --git a/addons/event/event.py b/addons/event/event.py
index ffdeb84d15d..1985cf9cc7d 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -27,23 +27,12 @@ import tools
from tools.translate import _
from crm import crm
-class crm_case_log(osv.osv):
- _inherit = 'crm.case.log'
- _description = 'crm.case.log'
- def create(self, cr, uid, vals, *args, **kwargs):
- if not 'name' in vals:
- vals['name']='Historize'
- return super(osv.osv,self).create(cr, uid, vals, *args, **kwargs)
- _defaults = {
- 'user_id': lambda self,cr,uid,context: uid,
- }
-crm_case_log()
class event_type(osv.osv):
_name = 'event.type'
_description= 'Event type'
_columns = {
- 'name': fields.char('Event type', size=64, required=True),
+ 'name': fields.char('Event type', size=64, required=True),
}
event_type()
@@ -54,58 +43,53 @@ class event(osv.osv):
_order = 'date_begin'
def copy(self, cr, uid, id, default=None, context=None):
- return super(event, self).copy(cr, uid,id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'),'state':'draft'})
+ return super(event, self).copy(cr, uid, id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'), 'state': 'draft'})
def button_draft(self, cr, uid, ids, context={}):
- return self.write(cr, uid, ids, {'state':'draft'})
+ return self.write(cr, uid, ids, {'state': 'draft'})
def button_cancel(self, cr, uid, ids, context={}):
- return self.write(cr, uid, ids, {'state':'cancel'})
+ return self.write(cr, uid, ids, {'state': 'cancel'})
def button_done(self, cr, uid, ids, context={}):
- return self.write(cr, uid, ids, {'state':'done'})
+ return self.write(cr, uid, ids, {'state': 'done'})
def button_confirm(self, cr, uid, ids, context={}):
for eve in self.browse(cr, uid, ids):
if eve.mail_auto_confirm:
#send reminder that will confirm the event for all the people that were already confirmed
- reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id),('state','not in',['draft','cancel'])])
+ reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id), ('state', 'not in', ['draft', 'cancel'])])
if reg_ids:
self.pool.get('event.registration').mail_user_confirm(cr, uid, reg_ids)
- return self.write(cr, uid, ids, {'state':'confirm'})
+ return self.write(cr, uid, ids, {'state': 'confirm'})
def _get_register(self, cr, uid, ids, name, args, context=None):
res={}
for event in self.browse(cr, uid, ids, context):
- query = """select sum(nb_register) from crm_case c left join crm_case_section s on (c.section_id=s.id) right join event_event e on (e.section_id=s.id) right join event_registration r on (r.case_id=c.id) where e.section_id = %s and c.state in ('open','done')"""
- cr.execute(query,(event.section_id.id,))
+ res[event.id] = {}
+ state = 'draft'
+ if name[0] == 'register_current':
+ state = 'open'
+ query = """SELECT sum(r.nb_register)
+ from event_registration r
+ where state=%s and event_id=%s"""
+
+ cr.execute(query, (state, event.id, ))
res2 = cr.fetchone()
if res2 and res2[0]:
- res[event.id] = res2[0]
+ res[event.id][name[0]] = res2[0]
else:
- res[event.id] = 0
+ res[event.id][name[0]] = 0
return res
- def _get_prospect(self, cr, uid, ids, name, args, context=None):
- res={}
- for event in self.browse(cr, uid, ids, context):
- query = """select sum(nb_register) from crm_case c left join crm_case_section s on (c.section_id=s.id) right join event_event e on (e.section_id=s.id) right join event_registration r on (r.case_id=c.id) where e.section_id = %s and c.state = 'draft'"""
- cr.execute(query,(event.section_id.id,))
- res2 = cr.fetchone()
- if res2 and res2[0]:
- res[event.id] = res2[0]
- else:
- res[event.id] = 0
- return res
-
- def write(self, cr, uid, ids,vals, *args, **kwargs):
- res = super(event,self).write(cr, uid, ids,vals, *args, **kwargs)
+ def write(self, cr, uid, ids, vals, *args, **kwargs):
+ res = super(event, self).write(cr, uid, ids, vals, *args, **kwargs)
if 'date_begin' in vals and vals['date_begin']:
for eve in self.browse(cr, uid, ids):
#change the deadlines of the registration linked to this event
- reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)])
+ reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id)])
if reg_ids:
- self.pool.get('event.registration').write(cr, uid, reg_ids, {'date_deadline':vals['date_begin']})
+ self.pool.get('event.registration').write(cr, uid, reg_ids, {'date_deadline': vals['date_begin']})
#change the description of the registration linked to this event
if 'mail_auto_confirm' in vals:
@@ -117,36 +101,36 @@ class event(osv.osv):
vals['mail_confirm']=False
if 'mail_confirm' in vals:
for eve in self.browse(cr, uid, ids):
- reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)])
+ reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id', '=', eve.id)])
if reg_ids:
- self.pool.get('event.registration').write(cr, uid, reg_ids, {'description':vals['mail_confirm']})
+ self.pool.get('event.registration').write(cr, uid, reg_ids, {'description': vals['mail_confirm']})
return res
_columns = {
- 'type': fields.many2one('event.type', 'Type'),
- 'section_id': fields.many2one('crm.case.section', 'Case section', required=True),
- 'register_max': fields.integer('Maximum Registrations'),
- 'register_min': fields.integer('Minimum Registrations'),
- 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations'),
- 'register_prospect': fields.function(_get_prospect, method=True, string='Unconfirmed Registrations'),
- 'date_begin': fields.datetime('Beginning date', required=True),
- 'date_end': fields.datetime('Ending date', required=True),
- 'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Cancelled')], 'State', readonly=True, required=True,
+ 'type': fields.many2one('event.type', 'Type'),
+ 'section_id': fields.many2one('crm.case.section', 'Case section', required=True),
+ 'register_max': fields.integer('Maximum Registrations'),
+ 'register_min': fields.integer('Minimum Registrations'),
+ 'register_current': fields.function(_get_register, method=True, string='Confirmed Registrations', multi='register_current'),
+ 'register_prospect': fields.function(_get_register, method=True, string='Unconfirmed Registrations', multi='register_prospect'),
+ 'date_begin': fields.datetime('Beginning date', required=True),
+ 'date_end': fields.datetime('Ending date', required=True),
+ 'state': fields.selection([('draft', 'Draft'), ('confirm', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, required=True,
help='If event is created, the state is \'Draft\'.\n If event is confirmed for the particular dates the state is set to \'Confirmed\'.\
- \nIf the event is over, the state is set to \'Done\'.\n If event is cancelled the state is set to \'Cancelled\'.'),
- 'mail_auto_registr':fields.boolean('Mail Auto Register',help='Check this box if you want to use the automatic mailing for new registration'),
- 'mail_auto_confirm':fields.boolean('Mail Auto Confirm',help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
- 'mail_registr':fields.text('Registration Email',help='This email will be sent when someone subscribes to the event.'),
- 'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."),
- 'product_id':fields.many2one('product.product','Product', required=True),
+ \nIf the event is over, the state is set to \'Done\'.\n If event is cancelled the state is set to \'Cancelled\'.'),
+ 'mail_auto_registr': fields.boolean('Mail Auto Register', help='Check this box if you want to use the automatic mailing for new registration'),
+ 'mail_auto_confirm': fields.boolean('Mail Auto Confirm', help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
+ 'mail_registr': fields.text('Registration Email', help='This email will be sent when someone subscribes to the event.'),
+ 'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."),
+ 'product_id': fields.many2one('product.product', 'Product', required=True),
}
_defaults = {
- 'state': lambda *args: 'draft',
- 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'event.event'),
- 'user_id': lambda self,cr,uid,ctx: uid,
-
+ 'state': lambda *args: 'draft',
+ 'code': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'event.event'),
+ 'user_id': lambda self, cr, uid, ctx: uid,
}
+
event()
class event_registration(osv.osv):
@@ -156,48 +140,45 @@ class event_registration(osv.osv):
current_registration = self.browse(cr, uid, [ids[0]])[0]
total_confirmed = current_registration.event_id.register_current + current_registration.nb_register
if total_confirmed <= current_registration.event_id.register_max or current_registration.event_id.register_max == 0:
- self.write(cr, uid, [ids[0]], {'state':'open'}, context=context)
+ self.write(cr, uid, [ids[0]], {'state': 'open'}, context=context)
self._history(cr, uid, [ids[0]], 'Open', history=True)
self.mail_user(cr, uid, [ids[0]])
return True
else:
- model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_event_confirm_registration')], context=context)
+ model_data_ids = mod_obj.search(cr, uid, [('model', '=', 'ir.ui.view'), ('name', '=', 'view_event_confirm_registration')], context=context)
resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'], context=context)[0]['res_id']
context.update({'reg_id': ids[0]})
return {
- 'name': _('Confirm Registration'),
- 'context': context,
- 'view_type': 'form',
- 'view_mode': 'tree,form',
- 'res_model': 'event.confirm.registration',
- 'views': [(resource_id,'form')],
- 'type': 'ir.actions.act_window',
- 'target': 'new',
+ 'name': _('Confirm Registration'),
+ 'context': context,
+ 'view_type': 'form',
+ 'view_mode': 'tree,form',
+ 'res_model': 'event.confirm.registration',
+ 'views': [(resource_id, 'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
'nodestroy': True
}
- def _history(self, cr, uid,ids,keyword, history=False, email=False, context={}):
+ def _history(self, cr, uid, ids, keyword, history=False, email=False, context={}):
for case in self.browse(cr, uid, ids):
- if not case.case_id:
- return True
data = {
- 'name': keyword,
- 'som': case.som.id,
- 'canal_id': case.canal_id.id,
- 'user_id': uid,
- 'case_id': case.case_id.id
+ 'name': keyword,
+ 'som': case.som.id,
+ 'canal_id': case.canal_id.id,
+ 'user_id': uid,
}
- obj = self.pool.get('crm.case.log')
- obj.create(cr, uid, data, context)
+ obj = self.pool.get('mailgate.message')
+ obj.create(cr, uid, data, context=context)
return True
def button_reg_close(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state':'done',})
+ self.write(cr, uid, ids, {'state': 'done', })
self._history(cr, uid, ids, 'Done', history=True)
return True
def button_reg_cancel(self, cr, uid, ids, *args):
- self.write(cr, uid, ids, {'state':'cancel',})
+ self.write(cr, uid, ids, {'state': 'cancel', })
self._history(cr, uid, ids, 'Cancel', history=True)
return True
@@ -207,7 +188,7 @@ class event_registration(osv.osv):
args[0]['date_deadline']= event.date_begin
args[0]['description']= event.mail_confirm
res = super(event_registration, self).create(cr, uid, *args, **argv)
- self._history(cr, uid,[res], 'Created', history=True)
+ self._history(cr, uid, [res], 'Created', history=True)
return res
def write(self, cr, uid, *args, **argv):
@@ -218,71 +199,76 @@ class event_registration(osv.osv):
args[1]['description']= event.mail_confirm
return super(event_registration, self).write(cr, uid, *args, **argv)
- def mail_user_confirm(self,cr,uid,ids):
- reg_ids=self.browse(cr,uid,ids)
+ def mail_user_confirm(self, cr, uid, ids):
+ reg_ids = self.browse(cr,uid,ids)
for reg_id in reg_ids:
src = reg_id.event_id.reply_to or False
- dest = [reg_id.email_from]
+ dest = []
+ if reg_id.email_from:
+ dest += [reg_id.email_from]
if reg_id.email_cc:
dest += [reg_id.email_cc]
if dest and src:
- tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id))
+ tools.email_send(src, dest, 'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.id))
if not src:
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
return False
- def mail_user(self,cr,uid,ids):
- reg_ids=self.browse(cr,uid,ids)
+ def mail_user(self, cr, uid, ids):
+ reg_ids = self.browse(cr, uid, ids)
for reg_id in reg_ids:
src = reg_id.event_id.reply_to or False
- dest = [reg_id.email_from]
+ dest = []
+ if reg_id.email_from:
+ dest += [reg_id.email_from]
if reg_id.email_cc:
dest += [reg_id.email_cc]
if reg_id.event_id.mail_auto_confirm or reg_id.event_id.mail_auto_registr:
if dest and src:
- if reg_id.event_id.state in ['draft', 'fixed', 'open','confirm','running'] and reg_id.event_id.mail_auto_registr:
- tools.email_send(src, dest,'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, openobject_id = str(reg_id.case_id.id))
- if (reg_id.event_id.state in ['confirm','running']) and reg_id.event_id.mail_auto_confirm:
- tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.case_id.id))
+ if reg_id.event_id.state in ['draft', 'fixed', 'open', 'confirm', 'running'] and reg_id.event_id.mail_auto_registr:
+ tools.email_send(src, dest, 'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, openobject_id = str(reg_id.id))
+ if (reg_id.event_id.state in ['confirm', 'running']) and reg_id.event_id.mail_auto_confirm:
+ tools.email_send(src, dest, 'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, openobject_id = str(reg_id.id))
if not src:
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
return False
def _create_invoice_lines(self, cr, uid, ids, vals):
- return self.pool.get('account.invoice.line').create(cr, uid,vals )
+ return self.pool.get('account.invoice.line').create(cr, uid, vals)
_name= 'event.registration'
_description = 'Event Registration'
- _inherits = {'crm.case': 'case_id'}
+ _inherit = 'crm.meeting'
+
_columns = {
- 'case_id':fields.many2one('crm.case','Case'),
- 'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft':[('readonly',False)]}),
- 'event_id':fields.many2one('event.event', 'Event Related', required=True),
- "partner_invoice_id":fields.many2one('res.partner', 'Partner Invoiced'),
- "contact_id":fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id
- "unit_price": fields.float('Unit Price'),
- "badge_title":fields.char('Badge Title',size=128),
- "badge_name":fields.char('Badge Name',size=128),
- "badge_partner":fields.char('Badge Partner',size=128),
- "invoice_label":fields.char("Label Invoice",size=128,required=True),
- "tobe_invoiced":fields.boolean("To be Invoiced"),
- "invoice_id":fields.many2one("account.invoice","Invoice"),
- 'date_closed': fields.datetime('Closed', readonly=True),
- 'ref' : fields.reference('Reference', selection=crm._links_get, size=128),
- 'ref2' : fields.reference('Reference 2', selection=crm._links_get, size=128),
- 'categ_id': fields.many2one('crm.case.categ','Category', domain="[('section_id','=',section_id)]"),
- 'canal_id': fields.many2one('res.partner.canal', 'Channel',help="The channels represent the different communication modes available with the customer." \
- " With each commercial opportunity, you can indicate the canall which is this opportunity source."),
+ 'email_cc': fields.text('Watchers Emails', size=252 , help="These \
+people will receive a copy of the future communication between partner \
+and users by email"),
+ 'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft': [('readonly', False)]}),
+ 'event_id': fields.many2one('event.event', 'Event Related', required=True),
+ "partner_invoice_id": fields.many2one('res.partner', 'Partner Invoiced'),
+ "contact_id": fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id
+ "unit_price": fields.float('Unit Price'),
+ "badge_title": fields.char('Badge Title', size=128),
+ "badge_name": fields.char('Badge Name', size=128),
+ "badge_partner": fields.char('Badge Partner', size=128),
+ "invoice_label": fields.char("Label Invoice", size=128, required=True),
+ "tobe_invoiced": fields.boolean("To be Invoiced"),
+ "invoice_id": fields.many2one("account.invoice", "Invoice"),
+ 'date_closed': fields.datetime('Closed', readonly=True),
+ 'ref': fields.reference('Reference', selection=crm._links_get, size=128),
+ 'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
+ 'canal_id': fields.many2one('res.partner.canal', 'Channel', help="The channels represent the different communication modes available with the customer." \
+ " With each commercial opportunity, you can indicate the canall which is this opportunity source."),
'som': fields.many2one('res.partner.som', 'State of Mind', help="The minds states allow to define a value scale which represents" \
"the partner mentality in relation to our services.The scale has" \
- "to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
-
+ "to be created with a factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."),
}
+
_defaults = {
- 'nb_register': lambda *a: 1,
- 'tobe_invoiced' : lambda *a: True,
- 'name': lambda *a: 'Registration',
- 'state': lambda *b: 'draft'
+ 'nb_register': lambda *a: 1,
+ 'tobe_invoiced': lambda *a: True,
+ 'name': lambda *a: 'Registration',
}
def onchange_badge_name(self, cr, uid, ids, badge_name):
@@ -290,7 +276,7 @@ class event_registration(osv.osv):
if not badge_name:
return data
data['name'] = 'Registration: ' + badge_name
- return {'value':data}
+ return {'value': data}
def onchange_contact_id(self, cr, uid, ids, contact, partner):
data ={}
@@ -300,109 +286,76 @@ class event_registration(osv.osv):
data['badge_name'] = contact_id.name
data['badge_title'] = contact_id.title
if partner:
- partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id','=',partner)])
- job_ids = self.pool.get('res.partner.job').search(cr, uid, [('contact_id','=',contact),('address_id','in',partner_addresses)])
+ partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id', '=', partner)])
+ job_ids = self.pool.get('res.partner.job').search(cr, uid, [('contact_id', '=', contact), ('address_id', 'in', partner_addresses)])
if job_ids:
data['email_from'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).email
- d = self.onchange_badge_name(cr, uid, ids,data['badge_name'])
+ d = self.onchange_badge_name(cr, uid, ids, data['badge_name'])
data.update(d['value'])
- return {'value':data}
+ return {'value': data}
def onchange_event(self, cr, uid, ids, event_id, partner_invoice_id):
context={}
if not event_id:
- return {'value':{'unit_price' : False ,'invoice_label' : False }}
- data_event = self.pool.get('event.event').browse(cr,uid,event_id)
+ return {'value': {'unit_price': False , 'invoice_label': False }}
+ data_event = self.pool.get('event.event').browse(cr, uid, event_id)
if data_event.product_id:
if not partner_invoice_id:
- unit_price=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id],context=context)[data_event.product_id.id]
- return {'value':{'unit_price' : unit_price , 'invoice_label' : data_event.product_id.name}}
- data_partner = self.pool.get('res.partner').browse(cr,uid,partner_invoice_id)
- context.update({'partner_id':data_partner})
- unit_price = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist':data_partner.property_product_pricelist.id})[data_event.product_id.id]
- return {'value':{'unit_price' :unit_price , 'invoice_label' : data_event.product_id.name}}
- return {'value':{'unit_price' : False,'invoice_label' : False}}
+ unit_price=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
+ return {'value': {'unit_price': unit_price , 'invoice_label': data_event.product_id.name}}
+ data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id)
+ context.update({'partner_id': data_partner})
+ unit_price = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
+ return {'value': {'unit_price': unit_price , 'invoice_label': data_event.product_id.name}}
+ return {'value': {'unit_price': False, 'invoice_label': False}}
def onchange_partner_id(self, cr, uid, ids, part, event_id, email=False):
data={}
data['badge_partner'] = data['contact_id'] = data['partner_invoice_id'] = data['email_from'] = data['badge_title'] = data['badge_name'] = False
if not part:
- return {'value':data}
+ return {'value': data}
data['partner_invoice_id']=part
# this calls onchange_partner_invoice_id
- d = self.onchange_partner_invoice_id(cr, uid, ids, event_id,part)
+ d = self.onchange_partner_invoice_id(cr, uid, ids, event_id, part)
# this updates the dictionary
data.update(d['value'])
addr = self.pool.get('res.partner').address_get(cr, uid, [part])
if addr:
if addr.has_key('default'):
- job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id','=',addr['default'])])
+ job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id', '=', addr['default'])])
if job_ids:
data['contact_id'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).contact_id.id
- d = self.onchange_contact_id(cr, uid, ids, data['contact_id'],part)
+ d = self.onchange_contact_id(cr, uid, ids, data['contact_id'], part)
data.update(d['value'])
partner_data = self.pool.get('res.partner').browse(cr, uid, part)
data['badge_partner'] = partner_data.name
- return {'value':data}
+ return {'value': data}
def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id):
data={}
context={}
data['unit_price']=False
if not event_id:
- return {'value':data}
- data_event = self.pool.get('event.event').browse(cr,uid,event_id)
+ return {'value': data}
+ data_event = self.pool.get('event.event').browse(cr, uid, event_id)
if data_event.product_id:
if not partner_invoice_id:
- data['unit_price']=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id],context=context)[data_event.product_id.id]
- return {'value':data}
- data_partner = self.pool.get('res.partner').browse(cr,uid,partner_invoice_id)
- context.update({'partner_id':data_partner})
- data['unit_price'] = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist':data_partner.property_product_pricelist.id})[data_event.product_id.id]
- return {'value':data}
- return {'value':data}
+ data['unit_price']=self.pool.get('product.product').price_get(cr, uid, [data_event.product_id.id], context=context)[data_event.product_id.id]
+ return {'value': data}
+ data_partner = self.pool.get('res.partner').browse(cr, uid, partner_invoice_id)
+ context.update({'partner_id': data_partner})
+ data['unit_price'] = self.pool.get('product.product')._product_price(cr, uid, [data_event.product_id.id], False, False, {'pricelist': data_partner.property_product_pricelist.id})[data_event.product_id.id]
+ return {'value': data}
+ return {'value': data}
def onchange_categ_id(self, cr, uid, ids, categ, context={}):
if not categ:
- return {'value':{}}
+ return {'value': {}}
cat = self.pool.get('crm.case.categ').browse(cr, uid, categ, context).probability
- return {'value':{'probability':cat}}
-
- def _map_ids(self,method,cr, uid, ids, *args, **argv):
- case_data = self.browse(cr,uid,ids)
- new_ids=[]
- for case in case_data:
- if case.case_id:
- new_ids.append(case.case_id.id)
- return getattr(self.pool.get('crm.case'),method)(cr, uid, new_ids, *args, **argv)
-
-
- def case_close(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_close',cr,uid,ids,*args,**argv)
- def case_escalate(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_escalate',cr,uid,ids,*args,**argv)
- def case_open(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_open',cr,uid,ids,*args,**argv)
- def case_cancel(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_cancel',cr,uid,ids,*args,**argv)
- def case_pending(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_pending',cr,uid,ids,*args,**argv)
- def case_reset(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_reset',cr,uid,ids,*args,**argv)
- def case_log(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_log',cr,uid,ids,*args,**argv)
- def case_log_reply(self,cr, uid, ids, *args, **argv):
- return self._map_ids('case_log_reply',cr,uid,ids,*args,**argv)
- def add_reply(self,cr, uid, ids, *args, **argv):
- return self._map_ids('add_reply',cr,uid,ids,*args,**argv)
- def remind_partner(self,cr, uid, ids, *args, **argv):
- return self._map_ids('remind_partner',cr,uid,ids,*args,**argv)
- def remind_user(self,cr, uid, ids, *args, **argv):
- return self._map_ids('remind_user',cr,uid,ids,*args,**argv)
-
+ return {'value': {'probability': cat}}
event_registration()
@@ -413,12 +366,12 @@ class report_event_registration(osv.osv):
_description = "Events on registrations"
_auto = False
_columns = {
- 'name': fields.char('Event',size=20),
- 'date_begin': fields.datetime('Beginning date', required=True),
- 'date_end': fields.datetime('Ending date', required=True),
- 'draft_state': fields.integer('Draft Registration',size=20),
- 'confirm_state': fields.integer('Confirm Registration',size=20),
- 'register_max': fields.integer('Maximum Registrations'),
+ 'name': fields.char('Event', size=20),
+ 'date_begin': fields.datetime('Beginning date', required=True),
+ 'date_end': fields.datetime('Ending date', required=True),
+ 'draft_state': fields.integer('Draft Registration', size=20),
+ 'confirm_state': fields.integer('Confirm Registration', size=20),
+ 'register_max': fields.integer('Maximum Registrations'),
}
def init(self, cr):
cr.execute("""
@@ -428,8 +381,8 @@ class report_event_registration(osv.osv):
c.name as name,
e.date_begin as date_begin,
e.date_end as date_end,
- (SELECT sum(nb_register) FROM event_registration x , crm_case c WHERE x.case_id=c.id and c.section_id=e.section_id and state in ('draft')) as draft_state,
- (SELECT sum(nb_register) FROM event_registration x , crm_case c WHERE x.case_id=c.id and c.section_id=e.section_id and state in ('open')) as confirm_state,
+ (SELECT sum(c.nb_register) FROM event_registration c WHERE c.section_id=e.section_id and state in ('draft')) as draft_state,
+ (SELECT sum(c.nb_register) FROM event_registration c WHERE c.section_id=e.section_id and state in ('open')) as confirm_state,
e.register_max as register_max
from
event_event e,crm_case_section c
@@ -444,19 +397,21 @@ class report_event_type_registration(osv.osv):
_description = "Event type on registration"
_auto = False
_columns = {
- 'name': fields.char('Event Type',size=20),
- 'nbevent':fields.integer('Number Of Events'),
- 'draft_state': fields.integer('Draft Registrations',size=20),
- 'confirm_state': fields.integer('Confirm Registrations',size=20),
+ 'name': fields.char('Event Type', size=20),
+ 'nbevent': fields.integer('Number Of Events'),
+ 'draft_state': fields.integer('Draft Registrations', size=20),
+ 'confirm_state': fields.integer('Confirm Registrations', size=20),
}
+
+
def init(self, cr):
cr.execute("""
create or replace view report_event_type_registration as (
select
count(t.id) as id,
t.name as name,
- (select sum(nb_register) from event_registration r , crm_case c , event_event e where c.section_id=e.section_id and r.case_id=c.id and c.state='draft' and e.type=t.id ) as draft_state ,
- (select sum(nb_register) from event_registration r , crm_case c , event_event e where c.section_id=e.section_id and r.case_id=c.id and c.state='open' and e.type=t.id ) as confirm_state,
+ (select sum(c.nb_register) from event_registration c, event_event e where c.section_id=e.section_id and c.state='draft' and e.type=t.id ) as draft_state ,
+ (select sum(c.nb_register) from event_registration c, event_event e where c.section_id=e.section_id and c.state='open' and e.type=t.id ) as confirm_state,
count(t.id) as nbevent
from
event_event e
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index cb13b0662a8..37ac26ac7b4 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -33,8 +33,8 @@
event.typeform
-
-
+
+
@@ -126,7 +126,6 @@
-
@@ -147,6 +146,7 @@
event.eventformtree,form
+ {"search_default_user_id":uid}
@@ -221,23 +221,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -271,7 +274,6 @@
-
@@ -292,6 +294,7 @@
formtree,form
+ {"search_default_user_id":uid}
-
+
-
+
diff --git a/addons/event/security/ir.model.access.csv b/addons/event/security/ir.model.access.csv
index 98b262ea5f3..9eccb065448 100644
--- a/addons/event/security/ir.model.access.csv
+++ b/addons/event/security/ir.model.access.csv
@@ -5,3 +5,8 @@
"access_event_registration","event.registration","model_event_registration","crm.group_crm_user",1,1,1,1
"access_report_event_registration","report.event.registration","model_report_event_registration","crm.group_crm_user",1,0,0,0
"access_report_event_type_registration","report.event.type.registration","model_report_event_type_registration","crm.group_crm_user",1,0,0,0
+"access_event_confirm_registration","event.confirm.registration","model_event_confirm_registration","crm.group_crm_user",1,0,0,0
+"access_event_confirm_registration_manager","event.confirm.registration manager","model_event_confirm_registration","crm.group_crm_manager",1,1,1,1
+"access_event_make_invoice","event.make.invoice","model_event_make_invoice","crm.group_crm_user",1,1,1,1
+"access_event_partners_list","event.partners.list","model_event_partners_list","crm.group_crm_user",1,0,0,0
+"access_event_registration_list","event.registration.list","model_event_registration_list","crm.group_crm_user",1,0,0,0
diff --git a/addons/event/wizard/event_confirm_registration.py b/addons/event/wizard/event_confirm_registration.py
index f8a9d02de7d..0e64c0abe53 100644
--- a/addons/event/wizard/event_confirm_registration.py
+++ b/addons/event/wizard/event_confirm_registration.py
@@ -27,21 +27,23 @@ class event_confirm_registration(osv.osv_memory):
"""
_name = "event.confirm.registration"
_description = "Event Registraion"
+
_columns = {
- 'msg': fields.text('Message', readonly=True),
+ 'msg': fields.text('Message', readonly=True),
}
_defaults={
- 'msg':lambda *a:'The event limit is reached. What do you want to do?'
+ 'msg':lambda *a:'The event limit is reached. What do you want to do?'
}
def confirm(self, cr, uid, ids, context):
registration_obj = self.pool.get('event.registration')
reg_id = context.get('reg_id', False) or context.get('active_id', False)
if reg_id:
- registration_obj.write(cr, uid, [reg_id], {'state':'open',})
+ registration_obj.write(cr, uid, [reg_id], {'state':'open', })
registration_obj._history(cr, uid, [reg_id], 'Open', history=True)
- registration_obj.mail_user(cr,uid,[reg_id])
+ registration_obj.mail_user(cr, uid, [reg_id])
return {}
event_confirm_registration()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/event/wizard/event_make_invoice.py b/addons/event/wizard/event_make_invoice.py
index 1df4d2f2277..1e8505a74e9 100644
--- a/addons/event/wizard/event_make_invoice.py
+++ b/addons/event/wizard/event_make_invoice.py
@@ -68,8 +68,11 @@ class event_make_invoice(osv.osv_memory):
inv_reject = inv_reject + 1
inv_rej_reason += "ID "+str(reg.id)+": Registration doesn't have any partner to invoice. \n"
continue
- partner_address_list = reg.partner_invoice_id and self.pool.get('res.partner').address_get(cr, uid, [reg.partner_invoice_id.id], adr_pref=['invoice'])
- partner_address_id = partner_address_list['invoice']
+ else:
+ val_invoice = pool_obj.get('account.invoice').onchange_partner_id(cr, uid, [], 'out_invoice', reg.partner_invoice_id.id, False, False)
+ val_invoice['value'].update({'partner_id': reg.partner_invoice_id.id})
+ partner_address_id = val_invoice['value']['address_invoice_id']
+
if not partner_address_id:
inv_reject = inv_reject + 1
inv_rej_reason += "ID "+str(reg.id)+": Registered partner doesn't have an address to make the invoice. \n"
@@ -82,8 +85,9 @@ class event_make_invoice(osv.osv_memory):
tax_ids.append(tax.id)
vals = value['value']
+ c_name = reg.contact_id and ('-' + self.pool.get('res.partner.contact').name_get(cr, uid, [reg.contact_id.id])[0][1]) or ''
vals.update({
- 'name': reg.name,
+ 'name': reg.invoice_label + '-' + c_name,
'price_unit': reg.unit_price,
'quantity': reg.nb_register,
'product_id':reg.event_id.product_id.id,
@@ -91,23 +95,14 @@ class event_make_invoice(osv.osv_memory):
})
inv_line_ids = obj_event_reg._create_invoice_lines(cr, uid, [reg.id], vals)
- inv = {
- 'name': reg.invoice_label,
+ val_invoice['value'].update({
'origin': reg.invoice_label,
- 'type': 'out_invoice',
'reference': False,
- 'account_id': reg.partner_invoice_id.property_account_receivable.id,
- 'partner_id': reg.partner_invoice_id.id,
- 'address_invoice_id':partner_address_id,
- 'address_contact_id':partner_address_id,
'invoice_line': [(6,0,[inv_line_ids])],
- 'currency_id' :reg.partner_invoice_id.property_product_pricelist.currency_id.id,
'comment': "",
- 'payment_term':reg.partner_invoice_id.property_payment_term.id,
- 'fiscal_position': reg.partner_invoice_id.property_account_position.id
- }
+ })
- inv_id = inv_obj.create(cr, uid, inv)
+ inv_id = inv_obj.create(cr, uid, val_invoice['value'])
list_inv.append(inv_id)
obj_event_reg.write(cr, uid, reg.id, {'invoice_id': inv_id, 'state': 'done'})
obj_event_reg._history(cr, uid, [reg.id], 'Invoiced', history=True)
diff --git a/addons/event/wizard/event_registration.py b/addons/event/wizard/event_registration.py
index d8087b7a569..4803d118610 100644
--- a/addons/event/wizard/event_registration.py
+++ b/addons/event/wizard/event_registration.py
@@ -36,10 +36,8 @@ class event_registration_list(osv.osv_memory):
'type': 'ir.actions.act_window'
}
- cr.execute('SELECT section_id FROM event_event WHERE id = %s', (context['active_id'],))
- res = cr.fetchone()
return {
- 'domain': [('section_id', '=', res[0])],
+ 'domain': [('section_id', '=', context['active_id'])],
'name': 'Event Registrations',
'view_type': 'form',
'view_mode': 'tree,form',
diff --git a/addons/event_project/i18n/fr.po b/addons/event_project/i18n/fr.po
index 356357e877b..1e87919bf74 100644
--- a/addons/event_project/i18n/fr.po
+++ b/addons/event_project/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 16:09+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-21 21:05+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:18+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: event_project
@@ -24,7 +24,7 @@ msgstr "XML non valide pour l'architecture de la vue"
#. module: event_project
#: model:ir.actions.wizard,name:event_project.wizard_event_task
msgid "Tasks"
-msgstr ""
+msgstr "Tâches"
#. module: event_project
#: wizard_button:event.project,init,done:0
@@ -39,6 +39,10 @@ msgid ""
" This module allow you to create retro planning for managing your "
"events.\n"
msgstr ""
+"Organisation et gestion des évènements.\n"
+"\n"
+" Ce module vous autorise à créer un rétro-planning pour gérer vos "
+"évènements.\n"
#. module: event_project
#: view:event.event:0
@@ -48,7 +52,7 @@ msgstr "Tâches Restantes"
#. module: event_project
#: model:ir.module.module,shortdesc:event_project.module_meta_information
msgid "Event - Project"
-msgstr ""
+msgstr "Évènement - Projet"
#. module: event_project
#: field:event.event,project_id:0
diff --git a/addons/fetchmail/__openerp__.py b/addons/fetchmail/__openerp__.py
index aad88a7ef50..7fd52a7fc8b 100644
--- a/addons/fetchmail/__openerp__.py
+++ b/addons/fetchmail/__openerp__.py
@@ -38,7 +38,8 @@
'init_xml': [],
'update_xml': [
"fetchmail_view.xml",
- "fetchmail_data.xml"
+ "fetchmail_data.xml",
+ 'security/ir.model.access.csv',
],
'demo_xml': [
diff --git a/addons/fetchmail/security/ir.model.access.csv b/addons/fetchmail/security/ir.model.access.csv
new file mode 100644
index 00000000000..907aa187913
--- /dev/null
+++ b/addons/fetchmail/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_email_server","email.server","model_email_server",,1,1,1,1
+"access_mail_server_history","mail.server.history","model_mail_server_history",,1,1,1,1
+"access_email_server_tools","email.server.tools","model_email_server_tools",,1,1,1,1
diff --git a/addons/hr/hr_department.py b/addons/hr/hr_department.py
index ef1160132a5..f31969129d8 100644
--- a/addons/hr/hr_department.py
+++ b/addons/hr/hr_department.py
@@ -101,7 +101,7 @@ ir_action_window()
class res_users(osv.osv):
_inherit = 'res.users'
- _description = 'res.users'
+ _description = 'User'
def _parent_compute(self, cr, uid, ids, name, args, context={}):
result = {}
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 47efc17825e..2b3dc6e4ea9 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -360,7 +360,7 @@
-
+
diff --git a/addons/hr/i18n/pl.po b/addons/hr/i18n/pl.po
index 11884c53d2f..35ec30cc260 100644
--- a/addons/hr/i18n/pl.po
+++ b/addons/hr/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-12 20:04+0000\n"
+"PO-Revision-Date: 2010-05-21 19:41+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-13 04:36+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr
@@ -42,7 +42,7 @@ msgstr ""
#: model:ir.module.module,shortdesc:hr.module_meta_information
#: model:ir.ui.menu,name:hr.menu_hr_root
msgid "Human Resources"
-msgstr "Zasoby ludzkie"
+msgstr "Zasoby kadrowe"
#. module: hr
#: selection:hr.timesheet,dayofweek:0
@@ -263,7 +263,7 @@ msgstr ""
#. module: hr
#: field:hr.employee,user_id:0
msgid "Related User"
-msgstr ""
+msgstr "Powiązany użytkownik"
#. module: hr
#: field:hr.employee,category_id:0
diff --git a/addons/hr_attendance/hr_attendance.py b/addons/hr_attendance/hr_attendance.py
index 27458ac2e85..043941eed88 100644
--- a/addons/hr_attendance/hr_attendance.py
+++ b/addons/hr_attendance/hr_attendance.py
@@ -27,7 +27,7 @@ from tools.translate import _
class hr_action_reason(osv.osv):
_name = "hr.action.reason"
- _description = "Action reason"
+ _description = "Action Reason"
_columns = {
'name' : fields.char('Reason', size=64, required=True, help='Specifies the reason for Signing In/Signing Out.'),
'action_type' : fields.selection([('sign_in', 'Sign in'), ('sign_out', 'Sign out')], "Action's type"),
diff --git a/addons/hr_attendance/i18n/tr.po b/addons/hr_attendance/i18n/tr.po
index c29b97853ca..87b03b27557 100644
--- a/addons/hr_attendance/i18n/tr.po
+++ b/addons/hr_attendance/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-02-14 21:34+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-18 11:29+0000\n"
+"Last-Translator: Angel Spy \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:18+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_attendance
@@ -112,7 +112,7 @@ msgstr "Bir zaman aralığı seçiniz..."
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
msgid "Date Recorded"
-msgstr ""
+msgstr "Tarih Kaydedildi"
#. module: hr_attendance
#: selection:hr.attendance,action:0
@@ -123,7 +123,7 @@ msgstr "Giriş"
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
msgid "Total period:"
-msgstr ""
+msgstr "Toplam periyod:"
#. module: hr_attendance
#: field:hr.attendance,action_desc:0
@@ -139,12 +139,12 @@ msgstr "Mart"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "August"
-msgstr "Agustos"
+msgstr "Ağustos"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "May"
-msgstr "Mayis"
+msgstr "Mayıs"
#. module: hr_attendance
#: wizard_field:hr.si_so,so_ask_si,last_time:0
@@ -175,7 +175,7 @@ msgstr "Personel Devam Kontrolü"
#. module: hr_attendance
#: field:hr.action.reason,name:0
msgid "Reason"
-msgstr ""
+msgstr "Sebep"
#. module: hr_attendance
#: constraint:hr.attendance:0
@@ -218,17 +218,17 @@ msgstr "Başlangıç Tarihi"
#. module: hr_attendance
#: selection:hr.employee,state:0
msgid "Present"
-msgstr ""
+msgstr "Mevcut"
#. module: hr_attendance
#: selection:hr.employee,state:0
msgid "Absent"
-msgstr ""
+msgstr "Yok"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "February"
-msgstr "Subat"
+msgstr "Şubat"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
@@ -238,7 +238,7 @@ msgstr "Ekim"
#. module: hr_attendance
#: wizard_field:hr.si_so,si_ask_so,last_time:0
msgid "Your last sign out"
-msgstr "Son Çıkış imzanız"
+msgstr "Son çıkışınız"
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
@@ -248,7 +248,7 @@ msgstr "Min. Gecikme"
#. module: hr_attendance
#: field:hr.action.reason,action_type:0
msgid "Action's type"
-msgstr ""
+msgstr "Eylem türü"
#. module: hr_attendance
#: view:hr.action.reason:0
@@ -270,7 +270,7 @@ msgstr "Analiz Bilgisi"
#. module: hr_attendance
#: wizard_field:hr.si_so,init,state:0
msgid "Current state"
-msgstr "Güncel Durum"
+msgstr "Mevcut durum"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
@@ -298,7 +298,7 @@ msgstr ""
#: field:hr.attendance,action:0
#: selection:hr.attendance,action:0
msgid "Action"
-msgstr "İşlem"
+msgstr "Eylem"
#. module: hr_attendance
#: wizard_button:hr.attendance.report,init,print:0
@@ -314,7 +314,7 @@ msgstr ""
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "November"
-msgstr "Kasim"
+msgstr "Kasım"
#. module: hr_attendance
#: wizard_view:hr.attendance.report,init:0
@@ -347,12 +347,12 @@ msgstr ""
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "September"
-msgstr "Eylul"
+msgstr "Eylül"
#. module: hr_attendance
#: selection:hr.attendance.print_month,init,month:0
msgid "December"
-msgstr "Aralik"
+msgstr "Aralık"
#. module: hr_attendance
#: view:hr.attendance:0
@@ -362,7 +362,7 @@ msgstr "Personel Devam Süresi"
#. module: hr_attendance
#: wizard_view:hr.attendance.print_month,init:0
msgid "Select a month"
-msgstr "Bir Ay Seç"
+msgstr "Ay seçin"
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,month:0
@@ -382,7 +382,7 @@ msgstr "Devam Süresi Hata Raporu"
#. module: hr_attendance
#: wizard_field:hr.attendance.print_month,init,year:0
msgid "Year"
-msgstr ""
+msgstr "Yıl"
#. module: hr_attendance
#: wizard_button:hr.attendance.print_month,init,end:0
@@ -397,4 +397,4 @@ msgstr "İptal"
#. module: hr_attendance
#: rml:report.hr.timesheet.attendance.error:0
msgid "Operation"
-msgstr "Operasyon"
+msgstr "İşlem"
diff --git a/addons/hr_contract/hr_contract_view.xml b/addons/hr_contract/hr_contract_view.xml
index 9951a9e3982..74d1bcd8d7b 100644
--- a/addons/hr_contract/hr_contract_view.xml
+++ b/addons/hr_contract/hr_contract_view.xml
@@ -153,7 +153,7 @@
-
+
hr.contract.view.formhr.contract
diff --git a/addons/hr_contract/i18n/ar.po b/addons/hr_contract/i18n/ar.po
index de5ebc99fa0..4122d40f142 100644
--- a/addons/hr_contract/i18n/ar.po
+++ b/addons/hr_contract/i18n/ar.po
@@ -13,7 +13,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-18 05:15+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_contract
diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml
index e2b1532d17f..fe25cd7ab23 100644
--- a/addons/hr_evaluation/hr_evaluation_view.xml
+++ b/addons/hr_evaluation/hr_evaluation_view.xml
@@ -346,7 +346,6 @@
-
@@ -362,7 +361,7 @@
formtree,form[('is_evaluation' ,'=', True)]
- {"search_default_todo":1,"search_default_my":1}
+ {"search_default_todo":1,"search_default_user_id":uid}
diff --git a/addons/hr_evaluation/security/ir.model.access.csv b/addons/hr_evaluation/security/ir.model.access.csv
index 3f3948c00db..e43c73ed108 100644
--- a/addons/hr_evaluation/security/ir.model.access.csv
+++ b/addons/hr_evaluation/security/ir.model.access.csv
@@ -8,3 +8,5 @@
"access_hr_evaluation_interview","hr.evaluation.interview","model_hr_evaluation_interview","hr.group_hr_user",1,0,0,0
"access_hr_evaluation_interview_manager","hr.evaluation.interview","model_hr_evaluation_interview","hr.group_hr_manager",1,1,1,1
"access_hr_evaluation_report","hr.evaluation.report","model_hr_evaluation_report",,1,0,0,0
+"access_hr_evaluation_reminder_manager","hr.evaluation.reminder","model_hr_evaluation_reminder","hr.group_hr_manager",1,1,1,1
+"access_hr_evaluation_reminder","hr.evaluation.reminder","model_hr_evaluation_reminder","hr.group_hr_user",1,0,0,0
diff --git a/addons/hr_expense/hr_expense.py b/addons/hr_expense/hr_expense.py
index 4e1e3033a92..5e40e6e5773 100644
--- a/addons/hr_expense/hr_expense.py
+++ b/addons/hr_expense/hr_expense.py
@@ -50,7 +50,7 @@ class hr_expense_expense(osv.osv):
return self.pool.get('res.currency').search(cr, uid, [('rate','=',1.0)])[0]
_name = "hr.expense.expense"
- _description = "HR Expense"
+ _description = "Expense"
_columns = {
'name': fields.char('Expense Sheet', size=128, required=True),
'id': fields.integer('Sheet ID', readonly=True),
diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml
index ffd1792de77..14bc05b6454 100644
--- a/addons/hr_expense/hr_expense_view.xml
+++ b/addons/hr_expense/hr_expense_view.xml
@@ -131,11 +131,6 @@
domain="[('state','=','draft')]"
string="Draft"
help="Draft Expense"/>
-
-
@@ -172,6 +167,7 @@
Expenseshr.expense.expenseform
+ {"search_default_user_id":uid}
diff --git a/addons/hr_expense/report/hr_expense_report.py b/addons/hr_expense/report/hr_expense_report.py
index cc3f282e9fa..2b0f6b4addf 100644
--- a/addons/hr_expense/report/hr_expense_report.py
+++ b/addons/hr_expense/report/hr_expense_report.py
@@ -45,9 +45,13 @@ class hr_expense_report(osv.osv):
'department_id':fields.many2one('hr.department','Department',readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
+ 'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
'price_total':fields.float('Total Price', readonly=True),
+ 'analytic_account': fields.many2one('account.analytic.account','Analytic account',readonly=True),
'price_average':fields.float('Average Price', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True),
+ 'no_of_products':fields.integer('# of Products', readonly=True),
+ 'no_of_account':fields.integer('# of Accounts', readonly=True),
'state': fields.selection([
('draft', 'Draft'),
('confirm', 'Waiting confirmation'),
@@ -67,6 +71,7 @@ class hr_expense_report(osv.osv):
date_trunc('day',s.create_date) as date,
s.employee_id,
s.journal_id,
+ s.currency_id,
to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_confirm,
to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY') as date_valid,
s.invoice_id,
@@ -75,27 +80,33 @@ class hr_expense_report(osv.osv):
to_char(date_trunc('day',s.create_date), 'MM') as month,
to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD') as day,
l.product_id as product_id,
+ l.analytic_account as analytic_account,
sum(l.unit_quantity * u.factor) as product_qty,
s.user_id as user_id,
s.company_id as company_id,
sum(l.unit_quantity*l.unit_amount) as price_total,
(sum(l.unit_quantity*l.unit_amount)/sum(l.unit_quantity * u.factor))::decimal(16,2) as price_average,
count(*) as nbr,
+ (select unit_quantity from hr_expense_line where id=l.id and product_id is not null) as no_of_products,
+ (select count(analytic_account) from hr_expense_line where id=l.id and analytic_account is not null) as no_of_account,
s.state
- from
- hr_expense_line l
- left join
- hr_expense_expense s on (s.id=l.expense_id)
- left join product_uom u on (u.id=l.uom_id)
+ from hr_expense_line l
+ left join hr_expense_expense s on (s.id=l.expense_id)
+ left join product_uom u on (u.id=l.uom_id)
group by
date_trunc('day',s.create_date),
+ to_char(date_trunc('day',s.create_date), 'YYYY'),
+ to_char(date_trunc('day',s.create_date), 'MM'),
to_char(date_trunc('day',s.create_date), 'YYYY-MM-DD'),
to_date(to_char(s.date_confirm, 'dd-MM-YYYY'),'dd-MM-YYYY'),
to_date(to_char(s.date_valid, 'dd-MM-YYYY'),'dd-MM-YYYY'),
l.product_id,
+ l.analytic_account,
s.invoice_id,
+ s.currency_id,
s.department_id,
l.uom_id,
+ l.id,
s.user_id,
s.state,
s.journal_id,
diff --git a/addons/hr_expense/report/hr_expense_report_view.xml b/addons/hr_expense/report/hr_expense_report_view.xml
index c376df3e4d7..7a50cb71140 100644
--- a/addons/hr_expense/report/hr_expense_report_view.xml
+++ b/addons/hr_expense/report/hr_expense_report_view.xml
@@ -14,12 +14,16 @@
+
+
+
+
@@ -47,7 +51,7 @@
-
-
+
+
@@ -99,13 +101,11 @@
domain="[('state','=','cancelled')]"
help = "Cancelled Expenses"/>
-
-
-
+
-
+
@@ -115,13 +115,16 @@
+
+
+
-
+
@@ -133,7 +136,7 @@
hr.expense.reportformtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/hr_expense/security/ir.model.access.csv b/addons/hr_expense/security/ir.model.access.csv
index aa00dab4fa1..43ae736b9ff 100644
--- a/addons/hr_expense/security/ir.model.access.csv
+++ b/addons/hr_expense/security/ir.model.access.csv
@@ -1,3 +1,4 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_expense_expense","hr.expense.expense","model_hr_expense_expense","hr.group_hr_user",1,1,1,1
"access_hr_expense_line","hr.expense.line","model_hr_expense_line","hr.group_hr_user",1,1,1,1
+"access_hr_expense_report","hr.expense.report","model_hr_expense_report","hr.group_hr_user",1,0,0,0
diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py
index 3337c09ea13..1d99a417d34 100644
--- a/addons/hr_holidays/hr_holidays.py
+++ b/addons/hr_holidays/hr_holidays.py
@@ -21,7 +21,7 @@
#
##############################################################################
import time
-
+import datetime
import pooler
import netsvc
from osv import fields, osv
@@ -29,7 +29,7 @@ from tools.translate import _
class hr_holidays_status(osv.osv):
_name = "hr.holidays.status"
- _description = "Leave Types"
+ _description = "Leave Type"
def get_days_cat(self, cr, uid, ids, category_id, return_false, context={}):
res = {}
@@ -106,7 +106,7 @@ hr_holidays_status()
class hr_holidays(osv.osv):
_name = "hr.holidays"
- _description = "Holidays"
+ _description = "Leave"
_order = "type desc, date_from asc"
def _employee_get(obj, cr, uid, context=None):
@@ -182,14 +182,14 @@ class hr_holidays(osv.osv):
}
return result
- def _get_number_of_days(date_from, date_to):
+ def _get_number_of_days(self, date_from, date_to):
"""Returns a float equals to the timedelta between two dates given as string."""
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT)
to_dt = datetime.datetime.strptime(date_to, DATETIME_FORMAT)
timedelta = to_dt - from_dt
- diff_day = timedelta.days + float(timedelata.seconds) / 86400
+ diff_day = timedelta.days + float(timedelta.seconds) / 86400
return diff_day
def _update_user_holidays(self, cr, uid, ids):
@@ -204,14 +204,16 @@ class hr_holidays(osv.osv):
self.unlink(cr, uid, list_ids)
def _check_date(self, cr, uid, ids):
- if ids:
- cr.execute('select number_of_days_temp from hr_holidays where id in ('+','.join(map(str, ids))+')')
- res = cr.fetchall()
- if res and res[0][0] and res[0][0] < 0:
+ for rec in self.read(cr, uid, ids, ['number_of_days_temp','date_from','date_to']):
+ if rec['number_of_days_temp'] < 0:
+ return False
+ date_from = time.strptime(rec['date_from'], '%Y-%m-%d %H:%M:%S')
+ date_to = time.strptime(rec['date_to'], '%Y-%m-%d %H:%M:%S')
+ if date_from > date_to:
return False
return True
- _constraints = [(_check_date, 'Start date should not be larger than end date! ', ['number_of_days'])]
+ _constraints = [(_check_date, 'Start date should not be larger than end date!\nNumber of Days should be greater than 1!', ['number_of_days_temp'])]
def unlink(self, cr, uid, ids, context={}):
leave_obj = self.pool.get('resource.calendar.leaves')
@@ -235,7 +237,7 @@ class hr_holidays(osv.osv):
return result
def onchange_date_to(self, cr, uid, ids, date_from, date_to):
- return onchange_date_from(cr, uid, ids, date_to, date_from)
+ return self.onchange_date_from(cr, uid, ids, date_to, date_from)
def onchange_sec_id(self, cr, uid, ids, status, context={}):
warning = {}
@@ -430,7 +432,7 @@ class resource_calendar_leaves(osv.osv):
_description = "Leave Detail"
_columns = {
'holiday_id': fields.many2one("hr.holidays", "Holiday"),
- }
+ }
resource_calendar_leaves()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/hr_holidays/i18n/es.po b/addons/hr_holidays/i18n/es.po
index 9d0158f14b2..245cacc6dee 100644
--- a/addons/hr_holidays/i18n/es.po
+++ b/addons/hr_holidays/i18n/es.po
@@ -7,13 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-04-30 21:12+0000\n"
-"Last-Translator: Cristian Salamea (GnuThink) \n"
+"PO-Revision-Date: 2010-05-18 13:49+0000\n"
+"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
+"\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-05 03:48+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:12+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: hr_holidays
@@ -49,7 +50,7 @@ msgstr "Azul claro"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Brown"
-msgstr "Café"
+msgstr "Marrón"
#. module: hr_holidays
#: xsl:holidays.summary:0
@@ -89,7 +90,7 @@ msgstr "hasta"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Light Cyan"
-msgstr "Cian Claro"
+msgstr "Cian claro"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
@@ -185,12 +186,12 @@ msgstr "Estado Vacaciones"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_status
msgid "Holidays Status"
-msgstr "Estado de Vacaciones"
+msgstr "Estado de vacaciones"
#. module: hr_holidays
#: field:hr.holidays,date_to:0
msgid "Vacation end day"
-msgstr "Fecha Fin Vacaciones"
+msgstr "Fecha fin vacaciones"
#. module: hr_holidays
#: view:hr.holidays.per.user:0
@@ -261,7 +262,7 @@ msgstr "Empleado"
#. module: hr_holidays
#: selection:hr.holidays,state:0
msgid "Waiting Validation"
-msgstr "Esperando Validación"
+msgstr "Esperando validación"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_employeeholidays0
@@ -276,7 +277,7 @@ msgstr "Salmón claro"
#. module: hr_holidays
#: selection:hr.holidays.status,color_name:0
msgid "Wheat"
-msgstr "Abano"
+msgstr "Trigo"
#. module: hr_holidays
#: field:hr.holidays.log,nb_holidays:0
@@ -292,20 +293,20 @@ msgstr "Mis peticiones"
#: view:hr.holidays:0
#: view:hr.holidays.per.user:0
msgid "Number of Days"
-msgstr "Número de Días"
+msgstr "Número de días"
#. module: hr_holidays
#: field:hr.holidays.status,name:0
#: model:ir.actions.act_window,name:hr_holidays.open_view_holiday_status
#: model:ir.ui.menu,name:hr_holidays.menu_open_view_holiday_status
msgid "Holiday Status"
-msgstr "Estado de Vacaciones"
+msgstr "Estado vacaciones"
#. module: hr_holidays
#: wizard_view:hr.holidays.summary,init:0
#: wizard_view:hr.holidays.summary.employee,init:0
msgid "Report Options"
-msgstr "Opciones de Reporte"
+msgstr "Opciones del informe"
#. module: hr_holidays
#: constraint:ir.ui.view:0
@@ -368,7 +369,7 @@ msgstr "Lavanda"
#. module: hr_holidays
#: model:ir.model,name:hr_holidays.model_hr_holidays_log
msgid "hr.holidays.log"
-msgstr "Log de Vacaciones"
+msgstr "hr.holidays.log"
#. module: hr_holidays
#: model:ir.actions.wizard,name:hr_holidays.wizard_holidays_summary
@@ -383,7 +384,7 @@ msgstr "Calendario"
#. module: hr_holidays
#: field:hr.holidays,date_from:0
msgid "Vacation start day"
-msgstr "Inicio de Vacaciones"
+msgstr "Fecha inicio de vacaciones"
#. module: hr_holidays
#: model:ir.module.module,description:hr_holidays.module_meta_information
@@ -422,21 +423,36 @@ msgid ""
" for example, you maybe will do it for the user 'admin'.\n"
msgstr ""
"Recursos Humanos: Registro y seguimiento de Vacaciones\n"
-"Este modulo permite administrar las vacaciones y peticiones. Para cada "
-"empleado se puede definir un numero de vacaciones disponibles.\n"
-"Ademas:\n"
-"Sincronizacion con la agenda (usando el modulo de CRM) es posible: "
-"automatizar la creacion de casos cuando una peticion es aceptada, tiene un "
-"link para los estados de vacaciones. Puede configurar esta info en el color "
-"de su preferencia.\n"
-"Estado de Vacaciones:\n"
-"Un empleado puede crear peticiones negativas (pedir -2 dias por ejemplo). es "
-"es considerado por el sistema como una peticion de mas dias de ausencia.\n"
-"Hay 2 maneras para imprimir las vacaciones:\n"
-"Elegir empleados por departamento y usar un asistente.\n"
-"O imprimir un empleado especifico.\n"
-"Ademas el asistente permite elegir las vacaciones validadas y confirmadas o "
-"solo una.\n"
+" Este módulo permite administrar las vacaciones y peticiones de "
+"vacaciones. Para cada empleado se puede definir un numero de vacaciones "
+"disponibles.\n"
+" Además:\n"
+" - Es posible sincronizar con la agenda (usando el módulo de CRM): Para "
+"poder automatizar la creación de casos cuando una petición es aceptada, "
+"tiene que relacionar un estado de vacaciones con una sección de casos. Puede "
+"configurar esta información y también el color preferido en RRHH / "
+"Configuración / Estado de vacaciones.\n"
+" - Un empleado puede crear peticiones negativas (pedir -2 días por "
+"ejemplo). Esto el sistema lo considera como una petición de más días de "
+"ausencia. Incrementará su total de vacaciones disponibles de este tipo (si "
+"la petición es aceptada).\n"
+" - Hay 2 maneras de imprimir las vacaciones:\n"
+" * La primera permite seleccionar empleados por departamento y está "
+"disponible desde el menú\n"
+" RRHH / Petición de vacaciones / Imprimir resumen de "
+"vacaciones\n"
+" * La segunda permite seleccionar el informe de vacaciones para "
+"ciertos empleados. Desde la lista\n"
+" RRHH / Empleados / Empleados\n"
+" seleccione los empleados que desee, haga clic en el icono de "
+"imprimir y seleccione la opción\n"
+" 'Imprimir resumen de vacaciones de los empleados'\n"
+" - El asistente permite elegir si quiere imprimir las vacaciones "
+"confirmadas y validadas o sólo las validadas. Estos estados deben "
+"configurarse por un usuario del grupo 'HR' con el rol de 'holidays'. Puede "
+"definirlo en la pestaña de seguridad en la ficha de usuario en el menú\n"
+" Administración / Usuarios / Usuarios\n"
+" por ejemplo, quizá quiere hacerlo para el usuario 'admin'.\n"
#. module: hr_holidays
#: wizard_view:hr.holidays.summary,notify:0
@@ -447,7 +463,7 @@ msgstr "Notificación"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_holidaysrequest0
msgid "Employee fills in a request for holidays"
-msgstr "Petición de Vacaciones"
+msgstr "Empleado rellena una petición de vacaciones"
#. module: hr_holidays
#: model:process.transition,note:hr_holidays.process_transition_setholiday0
@@ -508,7 +524,7 @@ msgstr "Mis peticiones de vacaciones"
#. module: hr_holidays
#: field:hr.holidays.status,color_name:0
msgid "Color of the status"
-msgstr "Color de Estado"
+msgstr "Color del estado"
#. module: hr_holidays
#: selection:hr.holidays.summary,init,holiday_type:0
@@ -569,7 +585,7 @@ msgstr "Activo"
#. module: hr_holidays
#: model:ir.actions.act_window,name:hr_holidays.action_my_holiday_draft
msgid "My Holidays Request Draft"
-msgstr "Mis peticiones en Borrador"
+msgstr "Mis peticiones en borrador"
#. module: hr_holidays
#: model:process.transition,name:hr_holidays.process_transition_approvedrequest0
@@ -680,7 +696,7 @@ msgstr "Caso"
#. module: hr_holidays
#: field:hr.holidays,holiday_user_id:0
msgid "Holiday per user"
-msgstr "Vacaiones por usuario"
+msgstr "Vacaciones por usuario"
#. module: hr_holidays
#: model:process.node,note:hr_holidays.process_node_holidays0
@@ -705,7 +721,7 @@ msgstr "Rojo"
#. module: hr_holidays
#: model:ir.module.module,shortdesc:hr_holidays.module_meta_information
msgid "Human Resources: Holidays management"
-msgstr "Gestión de Vacaciones"
+msgstr "Recursos humanos: Gestión de vacaciones"
#. module: hr_holidays
#: model:process.process,name:hr_holidays.process_process_holidaysprocess0
diff --git a/addons/hr_holidays/report/available_holidays.py b/addons/hr_holidays/report/available_holidays.py
index 4a1972f1f7d..5499a914f6c 100644
--- a/addons/hr_holidays/report/available_holidays.py
+++ b/addons/hr_holidays/report/available_holidays.py
@@ -25,8 +25,9 @@ class available_holidays_report(osv.osv):
_name = "available.holidays.report"
_auto = False
_columns = {
- 'date': fields.datetime('Date', readonly=True),
+ 'date': fields.date('Date', readonly=True),
'year': fields.char('Year', size=4, readonly=True),
+ 'day': fields.char('Day', size=15, readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
@@ -35,6 +36,7 @@ class available_holidays_report(osv.osv):
'max_leave': fields.float('Allocated Leaves', readonly=True),
'taken_leaves': fields.float('Taken Leaves', readonly=True),
'remaining_leave': fields.float('Remaining Leaves',readonly=True),
+ 'department_id':fields.many2one('hr.department','Department',readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
}
def init(self, cr):
@@ -46,8 +48,10 @@ class available_holidays_report(osv.osv):
date_trunc('day',h.create_date) as date,
to_char(s.create_date, 'YYYY') as year,
to_char(s.create_date, 'MM') as month,
+ to_char(s.create_date, 'YYYY-MM-DD') as day,
h.employee_id as employee_id,
h.user_id as user_id,
+ h.department_id,
h.state as state,
h.holiday_status_id as holiday_status_id,
sum(number_of_days) as remaining_leave,
@@ -68,7 +72,8 @@ class available_holidays_report(osv.osv):
and s.active <> 'f'
group by h.holiday_status_id, h.employee_id,
date_trunc('day',h.create_date),to_char(s.create_date, 'YYYY'),
- to_char(s.create_date, 'MM'),h.user_id,h.state
+ to_char(s.create_date, 'MM'),to_char(s.create_date, 'YYYY-MM-DD'),h.user_id,
+ h.state,h.department_id
)""")
available_holidays_report()
diff --git a/addons/hr_holidays/report/available_holidays_view.xml b/addons/hr_holidays/report/available_holidays_view.xml
index 18ea7d58d45..a89655b503c 100644
--- a/addons/hr_holidays/report/available_holidays_view.xml
+++ b/addons/hr_holidays/report/available_holidays_view.xml
@@ -10,40 +10,32 @@
tree
-
-
-
-
+
+
+
+
+
-
+
+
-
- available.holidays.report.form
- available.holidays.report
- form
-
-
-
-
-
-
-
- available.holidays.report.graphavailable.holidays.reportgraph
-
+
+
+
-
+
@@ -55,32 +47,47 @@
-
-
+
+
+
-
+<<<<<<< TREE
+
-
+
+
+
+
+
+
+=======
+
+
+>>>>>>> MERGE-SOURCE
+
-
+
-
-
+
+
+
@@ -93,6 +100,7 @@
available.holidays.reportformtree,graph
+ {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/hr_holidays/report/hr_holidays_report.py b/addons/hr_holidays/report/hr_holidays_report.py
index 87f01cfb17c..29127922dac 100644
--- a/addons/hr_holidays/report/hr_holidays_report.py
+++ b/addons/hr_holidays/report/hr_holidays_report.py
@@ -28,16 +28,19 @@ class hr_holidays_report(osv.osv):
_auto = False
_rec_name = 'date'
_columns = {
- 'date': fields.datetime('Date', readonly=True),
+ 'date': fields.date('Date', readonly=True),
'year': fields.char('Year', size=4, readonly=True),
+ 'day': fields.char('Day', size=15, readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
- 'date_from' : fields.datetime('Start Date', readonly=True),
- 'date_to' : fields.datetime('End Date', readonly=True),
- 'number_of_days_temp': fields.float('Number of Days', readonly=True),
+ 'date_from' : fields.date('Start Date', readonly=True),
+ 'date_to' : fields.date('End Date', readonly=True),
+ 'number_of_days_temp': fields.float('#Days', readonly=True),
'employee_id' : fields.many2one('hr.employee', "Employee's Name",readonly=True),
'user_id':fields.many2one('res.users', 'User', readonly=True),
+ 'holiday_status_id' : fields.many2one("hr.holidays.status", "Leave Type",readonly=True),
+ 'department_id':fields.many2one('hr.department','Department',readonly=True),
'state': fields.selection([('draft', 'Draft'),
('confirm', 'Waiting Validation'),
('refuse', 'Refused'),
@@ -52,14 +55,17 @@ class hr_holidays_report(osv.osv):
create or replace view hr_holidays_report as (
select
min(s.id) as id,
- date_trunc('seconds',s.create_date) as date,
+ date_trunc('day',s.create_date) as date,
date_trunc('day',s.date_from) as date_from,
date_trunc('day',s.date_to) as date_to,
- s.number_of_days_temp,
+ sum(s.number_of_days_temp) as number_of_days_temp,
s.employee_id,
s.user_id as user_id,
to_char(s.create_date, 'YYYY') as year,
to_char(s.create_date, 'MM') as month,
+ to_char(s.create_date, 'YYYY-MM-DD') as day,
+ s.holiday_status_id,
+ s.department_id,
s.state
from
hr_holidays s
@@ -67,7 +73,8 @@ class hr_holidays_report(osv.osv):
s.employee_id is not null
group by
s.create_date,s.state,s.date_from,s.date_to,
- s.number_of_days_temp,s.employee_id,s.user_id
+ s.employee_id,s.user_id,s.holiday_status_id,
+ s.department_id
)
""")
hr_holidays_report()
diff --git a/addons/hr_holidays/report/hr_holidays_report_view.xml b/addons/hr_holidays/report/hr_holidays_report_view.xml
index 4af9bdb8f51..e508e242827 100644
--- a/addons/hr_holidays/report/hr_holidays_report_view.xml
+++ b/addons/hr_holidays/report/hr_holidays_report_view.xml
@@ -7,14 +7,18 @@
tree
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
+
@@ -27,6 +31,7 @@
+
@@ -37,45 +42,71 @@
search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
-
-
+
+
+
@@ -86,7 +117,7 @@
hr.holidays.reportformtree,graph
- {'search_default_employee': 1}
+ {'search_default_month':1,'search_default_Employee':1,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index f8372527a6c..42d643f165d 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -55,13 +55,15 @@ hr_recruitment_stage()
class hr_applicant(osv.osv, crm.crm_case):
_name = "hr.applicant"
- _description = "Applicant Cases"
+ _description = "Applicant"
_order = "id desc"
- _inherit ='mailgate.thread'
+ _inherits = {'mailgate.thread': 'thread_id'}
_columns = {
- 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."),
- 'description': fields.text('Description'),
+ 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
+ 'name': fields.char('Name', size=128, required=True),
+ 'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."),
+ 'description': fields.text('Description'),
'section_id': fields.many2one('crm.case.section', 'Sales Team', \
select=True, help='Sales team to which Case belongs to.\
Define Responsible user and Email account for mail gateway.'),
@@ -103,6 +105,16 @@ class hr_applicant(osv.osv, crm.crm_case):
'survey' : fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'),
'response' : fields.integer("Response"),
}
+
+ _defaults = {
+ 'active': lambda *a: 1,
+ 'user_id': crm.crm_case._get_default_user,
+ 'email_from': crm.crm_case. _get_default_email,
+ 'state': lambda *a: 'draft',
+ 'section_id': crm.crm_case. _get_section,
+ 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
+ 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
+ }
def onchange_job(self,cr, uid, ids, job, context={}):
result = {}
diff --git a/addons/hr_recruitment/hr_recruitment_menu.xml b/addons/hr_recruitment/hr_recruitment_menu.xml
index 760c7f08f2f..1723c802b0a 100644
--- a/addons/hr_recruitment/hr_recruitment_menu.xml
+++ b/addons/hr_recruitment/hr_recruitment_menu.xml
@@ -9,6 +9,7 @@
hr.applicanttree,form,graph
+ {"search_default_user_id":uid}
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index 4ad4dd214c1..a3bf7a08ab9 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -224,7 +224,6 @@
-
diff --git a/addons/hr_recruitment/report/hr_recruitment_report.py b/addons/hr_recruitment/report/hr_recruitment_report.py
index 49c33084412..00d15ef3f21 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report.py
+++ b/addons/hr_recruitment/report/hr_recruitment_report.py
@@ -105,6 +105,8 @@ class hr_recruitment_report(osv.osv):
'priority': fields.selection(hr_recruitment.AVAILABLE_PRIORITIES, 'Appreciation'),
'salary_prop' : fields.float("Salary Proposed"),
'salary_exp' : fields.float("Salary Expected"),
+ 'partner_id': fields.many2one('res.partner', 'Partner',readonly=True),
+ 'partner_address_id': fields.many2one('res.partner.address', 'Partner Contact Name',readonly=True),
'available' : fields.float("Availability")
}
@@ -121,7 +123,9 @@ class hr_recruitment_report(osv.osv):
to_char(s.create_date, 'MM') as month,
to_char(s.create_date, 'YYYY-MM-DD') as day,
s.state,
+ s.partner_id,
s.company_id,
+ s.partner_address_id,
s.user_id,
s.job_id,
s.type_id,
@@ -140,6 +144,8 @@ class hr_recruitment_report(osv.osv):
date_trunc('day',s.create_date),
date_trunc('day',s.date_closed),
s.state,
+ s.partner_id,
+ s.partner_address_id,
s.company_id,
s.user_id,
s.stage_id,
diff --git a/addons/hr_recruitment/report/hr_recruitment_report_view.xml b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
index 8e0c3f0845a..2315e707911 100644
--- a/addons/hr_recruitment/report/hr_recruitment_report_view.xml
+++ b/addons/hr_recruitment/report/hr_recruitment_report_view.xml
@@ -10,9 +10,11 @@
-
+
+
+
@@ -72,7 +74,7 @@
help = "Pending tasks"/>
-
@@ -84,10 +86,6 @@
-
-
+
+
-
-
+
+
+
+
+
+
-
+
+
-
-
-
-
+
+
+
+
+
@@ -136,7 +141,7 @@
hr.recruitment.reportformtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/hr_recruitment/security/ir.model.access.csv b/addons/hr_recruitment/security/ir.model.access.csv
index 3e611ae02e8..f8898499c4d 100644
--- a/addons/hr_recruitment/security/ir.model.access.csv
+++ b/addons/hr_recruitment/security/ir.model.access.csv
@@ -1,2 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_hr_applicant","hr.applicant","model_hr_applicant","hr.group_hr_manager",1,1,1,1
+"access_hr_recruitment_report","hr.recruitment.report","model_hr_recruitment_report",,1,0,0,0
diff --git a/addons/hr_timesheet/hr_timesheet.py b/addons/hr_timesheet/hr_timesheet.py
index 25c61483391..1530f18981c 100644
--- a/addons/hr_timesheet/hr_timesheet.py
+++ b/addons/hr_timesheet/hr_timesheet.py
@@ -39,7 +39,7 @@ hr_employee()
class hr_analytic_timesheet(osv.osv):
_name = "hr.analytic.timesheet"
_table = 'hr_analytic_timesheet'
- _description = "Timesheet line"
+ _description = "Timesheet Line"
_inherits = {'account.analytic.line': 'line_id'}
_order = "id desc"
_columns = {
@@ -60,7 +60,7 @@ class hr_analytic_timesheet(osv.osv):
# if prod_id and unit_amount:
if prod_id:
# find company
- company_id=self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context)
+ company_id=self.pool.get('res.company')._company_default_get(cr, uid, 'account.analytic.line', context=context)
res = self.pool.get('account.analytic.line').on_change_unit_amount(cr, uid, id, prod_id, unit_amount,company_id,unit, context)
return res
diff --git a/addons/hr_timesheet/hr_timesheet_view.xml b/addons/hr_timesheet/hr_timesheet_view.xml
index 6c52c99d081..d7c12b14df7 100644
--- a/addons/hr_timesheet/hr_timesheet_view.xml
+++ b/addons/hr_timesheet/hr_timesheet_view.xml
@@ -51,7 +51,6 @@
-
@@ -72,6 +71,7 @@
tree,form[('user_id','=',uid)]
+ {"search_default_user_id":uid}
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
index 4b8fad8fab5..c20c7110b63 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice.py
@@ -25,7 +25,7 @@ from tools.translate import _
class hr_timesheet_invoice_factor(osv.osv):
_name = "hr_timesheet_invoice.factor"
- _description = "Invoice rate"
+ _description = "Invoice Rate"
_columns = {
'name': fields.char('Internal name', size=128, required=True),
'customer_name': fields.char('Name', size=128),
diff --git a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
index cb6c8d5771c..07d37b270ef 100644
--- a/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
+++ b/addons/hr_timesheet_invoice/report/hr_timesheet_invoice_report_view.xml
@@ -61,10 +61,6 @@
help="Timesheet lines during last 7 days"/>
- report.timesheet.lineformtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
-
+
@@ -169,7 +165,6 @@
-
@@ -187,6 +182,7 @@
report_timesheet.userformgraph,tree
+ {"search_default_user_id":uid}
@@ -224,7 +220,6 @@
search
-
@@ -253,6 +248,7 @@
report_timesheet.invoiceformgraph,tree
+ {"search_default_user_id":uid}
@@ -308,7 +304,6 @@
-
@@ -327,6 +322,7 @@
report_timesheet.account.dateformgraph,tree
+ {"search_default_user_id":uid}
@@ -382,7 +378,6 @@
-
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index b7d395ac2e0..d6d9e38247b 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -364,7 +364,7 @@ class hr_timesheet_line(osv.osv):
res[line_id] = False
return res
- def _sheet_search(self, cursor, user, obj, name, args, context):
+ def _sheet_search(self, cursor, user, obj, name, args, context=None):
if not len(args):
return []
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
@@ -482,7 +482,7 @@ class hr_attendance(osv.osv):
res[line_id] = False
return res
- def _sheet_search(self, cursor, user, obj, name, args, context={}):
+ def _sheet_search(self, cursor, user, obj, name, args, context=None):
if not len(args):
return []
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
@@ -581,7 +581,7 @@ hr_attendance()
class hr_timesheet_sheet_sheet_day(osv.osv):
_name = "hr_timesheet_sheet.sheet.day"
- _description = "Timesheets by period"
+ _description = "Timesheets by Period"
_auto = False
_order='name'
_columns = {
@@ -662,7 +662,7 @@ hr_timesheet_sheet_sheet_day()
class hr_timesheet_sheet_sheet_account(osv.osv):
_name = "hr_timesheet_sheet.sheet.account"
- _description = "Timesheets by period"
+ _description = "Timesheets by Period"
_auto = False
_order='name'
_columns = {
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index eae4e8e1e9a..89fd0dd45cf 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -192,7 +192,6 @@
-
@@ -220,7 +219,7 @@
hr_timesheet_sheet.sheetform
- {'search_default_my_timesheet':1}
+ {'search_default_user_id':uid}
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report.py b/addons/hr_timesheet_sheet/report/timesheet_report.py
index ee016df56d7..3dd8d161c5f 100644
--- a/addons/hr_timesheet_sheet/report/timesheet_report.py
+++ b/addons/hr_timesheet_sheet/report/timesheet_report.py
@@ -33,7 +33,11 @@ class timesheet_report(osv.osv):
('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'name': fields.char('Description', size=64,readonly=True),
+ 'product_id' : fields.many2one('product.product', 'Product'),
+ 'general_account_id' : fields.many2one('account.account', 'General Account', readonly=True),
'user_id': fields.many2one('res.users', 'User',readonly=True),
+ 'to_invoice': fields.many2one('hr_timesheet_invoice.factor', 'Type of Invoicing',readonly=True),
+ 'account_id': fields.many2one('account.analytic.account', 'Analytic Account',readonly=True),
'nbr': fields.integer('#Nbr',readonly=True),
'company_id': fields.many2one('res.company', 'Company',readonly=True),
'department_id':fields.many2one('hr.department','Department',readonly=True),
@@ -45,9 +49,8 @@ class timesheet_report(osv.osv):
('draft','Draft'),
('confirm','Confirmed'),
('done','Done')], 'State', readonly=True),
- 'total_att': fields.float('Total Timesheet',readonly=True),
- 'total_ts': fields.float('Total Attendance',readonly=True),
- 'total_diff': fields.float('Difference', readonly=True),
+ 'quantity': fields.float('#Quantity',readonly=True),
+ 'cost': fields.float('#Cost',readonly=True),
}
def init(self, cr):
@@ -64,10 +67,12 @@ class timesheet_report(osv.osv):
to_char(htss.date_current,'MM') as month,
to_char(htss.date_current, 'YYYY-MM-DD') as day,
count(*) as nbr,
- sum(day.total_attendance) as total_att,
- sum(day.total_timesheet) as total_ts,
- sum(day.total_difference) as total_diff,
+ sum(aal.unit_amount) as quantity,
+ sum(aal.amount) as cost,
aal.account_id,
+ aal.product_id,
+ aal.to_invoice,
+ aal.general_account_id,
htss.user_id,
htss.company_id,
htss.department_id,
@@ -75,7 +80,6 @@ class timesheet_report(osv.osv):
from account_analytic_line as aal
left join hr_analytic_timesheet as hat ON (hat.line_id=aal.id)
left join hr_timesheet_sheet_sheet as htss ON (hat.line_id=htss.id)
- left join hr_timesheet_sheet_sheet_day AS day ON (htss.id = day.sheet_id)
group by
to_char(htss.date_current,'YYYY'),
to_char(htss.date_current,'MM'),
@@ -84,6 +88,9 @@ class timesheet_report(osv.osv):
htss.date_from,
htss.date_to,
htss.date_current,
+ aal.to_invoice,
+ aal.product_id,
+ aal.general_account_id,
htss.name,
htss.company_id,
htss.state,
diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
index 976b2a6f8ea..517937848ff 100644
--- a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
+++ b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml
@@ -7,10 +7,9 @@
graph
-
-
-
-
+
+
+
@@ -25,12 +24,15 @@
-
-
-
+
+
+
+
+
+
@@ -43,7 +45,7 @@
search
-
+
@@ -63,15 +65,9 @@
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
-
+
@@ -111,7 +121,7 @@
timesheet.reportformtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
diff --git a/addons/html_view/security/ir.model.access.csv b/addons/html_view/security/ir.model.access.csv
new file mode 100644
index 00000000000..0b1057cfd1e
--- /dev/null
+++ b/addons/html_view/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_html_view","html.view","model_html_view",,1,0,0,0
diff --git a/addons/idea/idea.py b/addons/idea/idea.py
index 2a6aafe2989..e46115c5639 100644
--- a/addons/idea/idea.py
+++ b/addons/idea/idea.py
@@ -31,7 +31,7 @@ class idea_category(osv.osv):
""" Category of Idea """
_name = "idea.category"
- _description = "Category for an idea"
+ _description = "Idea Category"
_columns = {
'name': fields.char('Category', size=64, required=True),
@@ -251,7 +251,7 @@ class idea_comment(osv.osv):
""" Apply Idea for Comment """
_name = 'idea.comment'
- _description = 'Comments'
+ _description = 'Comment'
_rec_name = 'content'
_columns = {
@@ -274,7 +274,7 @@ class idea_vote(osv.osv):
""" Apply Idea for Vote """
_name = 'idea.vote'
- _description = 'Vote for Idea'
+ _description = 'Idea Vote'
_rec_name = 'score'
_columns = {
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index 38ac9eda0a7..b268a64d991 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -214,8 +214,6 @@
-
-
-
+
@@ -257,6 +255,7 @@
idea.ideaformtree,form
+ {"search_default_user_id":uid}
diff --git a/addons/l10n_be/__openerp__.py b/addons/l10n_be/__openerp__.py
index 6c13990fc45..c8fdb530a45 100644
--- a/addons/l10n_be/__openerp__.py
+++ b/addons/l10n_be/__openerp__.py
@@ -45,7 +45,8 @@
'account_report',
'base_vat',
'base_iban',
- 'account_chart'
+ 'account_chart',
+ 'account_coda',
],
'init_xml': [],
'update_xml': [
diff --git a/addons/l10n_be/account_pcmn_belgium.xml b/addons/l10n_be/account_pcmn_belgium.xml
index e11815a7234..e4a9c52a437 100644
--- a/addons/l10n_be/account_pcmn_belgium.xml
+++ b/addons/l10n_be/account_pcmn_belgium.xml
@@ -7029,8 +7029,8 @@
V-EXTRA 0percent
-
-
+
+ sale
diff --git a/addons/l10n_be/company.py b/addons/l10n_be/company.py
index 1a29940ada6..8a53b029fa7 100644
--- a/addons/l10n_be/company.py
+++ b/addons/l10n_be/company.py
@@ -22,7 +22,7 @@ from osv import osv
class res_company(osv.osv):
_inherit = "res.company"
- _description = 'res.company'
+ _description = 'Company'
def _get_default_ad(self, addresses):
city = post_code = address = country_code = ""
diff --git a/addons/l10n_be/security/ir.model.access.csv b/addons/l10n_be/security/ir.model.access.csv
index daadf3d4b22..fbb5c74c18c 100644
--- a/addons/l10n_be/security/ir.model.access.csv
+++ b/addons/l10n_be/security/ir.model.access.csv
@@ -1,2 +1,6 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_vat_listing_clients","vat.listing.clients","model_vat_listing_clients",,1,1,1,1
+"access_partner_vat_intra","partner.vat.intra","model_partner_vat_intra",,1,1,1,1
+"access_partner_vat","partner.vat","model_partner_vat",,1,1,1,1
+"access_partner_vat_list","partner.vat.list","model_partner_vat_list",,1,1,1,1
+"access_l1on_be_vat_declaration","l1on_be.vat.declaration","model_l1on_be_vat_declaration",,1,1,1,1
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
index d141fd44f1d..3ee7a427265 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration.py
@@ -36,7 +36,7 @@ class l10n_be_vat_declaration(osv.osv_memory):
'file_save': fields.binary('Save File'),
'ask_resitution': fields.boolean('Ask Restitution'),
'ask_payment': fields.boolean('Ask Payment'),
- 'client_nihil': fields.boolean('Last Declaration of Entreprise',help='Thick this case only if it concerns only the last statement on the civil or cessation of activity'),
+ 'client_nihil': fields.boolean('Last Declaration of Enterprise',help='Tick this case only if it concerns only the last statement on the civil or cessation of activity'),
}
_defaults = {
diff --git a/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml b/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
index f3e4b23771e..faaf4805417 100644
--- a/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
+++ b/addons/l10n_be/wizard/l10n_be_account_vat_declaration_view.xml
@@ -14,11 +14,11 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/addons/l10n_fr/i18n/fr.po b/addons/l10n_fr/i18n/fr.po
index f70b913fd88..1e9727d4785 100644
--- a/addons/l10n_fr/i18n/fr.po
+++ b/addons/l10n_fr/i18n/fr.po
@@ -7,34 +7,34 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-07-27 16:34+0000\n"
-"Last-Translator: Christian Draux - reseaucerta.org \n"
+"PO-Revision-Date: 2010-05-21 17:47+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:04+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Redevances de crédit-bail immobilier"
-msgstr ""
+msgstr "Redevances de crédit-bail immobilier"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "période du"
-msgstr ""
+msgstr "période du"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Autres réserves"
-msgstr ""
+msgstr "Autres réserves"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "ACTIF IMMOBILISÉ"
-msgstr ""
+msgstr "ACTIF IMMOBILISÉ"
#. module: l10n_fr
#: model:ir.actions.todo,note:l10n_fr.config_call_account_template_fr_pcg
@@ -58,23 +58,23 @@ msgstr ""
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Capital [dont versé...]"
-msgstr ""
+msgstr "Capital [dont versé...]"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Réserves statutaires ou contractuelles"
-msgstr ""
+msgstr "Réserves statutaires ou contractuelles"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "nstallations techniques,matériel et outillage"
-msgstr ""
+msgstr "installations techniques,matériel et outillage"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "TOTAL III"
-msgstr ""
+msgstr "TOTAL III"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_asset
@@ -89,12 +89,12 @@ msgstr "Produits"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Charges sociales"
-msgstr ""
+msgstr "Charges sociales"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "PRODUITS EXCEPTIONNELS"
-msgstr ""
+msgstr "PRODUITS EXCEPTIONNELS"
#. module: l10n_fr
#: wizard_view:l10n.fr.bilan.report,init:0
@@ -104,18 +104,18 @@ msgstr "Sélectionner l'année"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Différences négatives de change"
-msgstr ""
+msgstr "Différences négatives de change"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Autres charges"
-msgstr ""
+msgstr "Autres charges"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "Tenue de Compte :"
-msgstr ""
+msgstr "Tenue de Compte :"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_payable
@@ -125,72 +125,72 @@ msgstr "À payer"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "( IV )"
-msgstr ""
+msgstr "( IV )"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_4
msgid "Hors Euro"
-msgstr ""
+msgstr "Hors Euro"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Fonds commercial"
-msgstr ""
+msgstr "Fonds commercial"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "isponibilités"
-msgstr ""
+msgstr "Disponibilités"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "+ IV+ V+ VI"
-msgstr ""
+msgstr "+ IV+ V+ VI"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "De participation"
-msgstr ""
+msgstr "De participation"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "TOTAL IV"
-msgstr ""
+msgstr "TOTAL IV"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "D"
-msgstr ""
+msgstr "D"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "PROVISIONS"
-msgstr ""
+msgstr "PROVISIONS"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "vances et acomptes"
-msgstr ""
+msgstr "Avances et acomptes"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Autres dettes"
-msgstr ""
+msgstr "Autres dettes"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "articipations"
-msgstr ""
+msgstr "Participations"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "atières premières et autres approvisionnements"
-msgstr ""
+msgstr "Matières premières et autres approvisionnements"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "P"
-msgstr ""
+msgstr "P"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_stocks
@@ -200,17 +200,17 @@ msgstr "Actif circulant"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "T"
-msgstr ""
+msgstr "T"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Dettes fournisseurs et comptes rattachés"
-msgstr ""
+msgstr "Dettes fournisseurs et comptes rattachés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Provisions pour charges"
-msgstr ""
+msgstr "Provisions pour charges"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_dettes
@@ -225,12 +225,12 @@ msgstr "Sélectionner une période"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "RÉSERVES"
-msgstr ""
+msgstr "RÉSERVES"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "TOTAL GÉNÉRAL (I + II + III + IV)"
-msgstr ""
+msgstr "TOTAL GÉNÉRAL (I + II + III + IV)"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_tax
@@ -240,74 +240,74 @@ msgstr "Taxe"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Dotations aux amortissements, aux dépréciations et aux provisions"
-msgstr ""
+msgstr "Dotations aux amortissements, aux dépréciations et aux provisions"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Achats de matières premières et autres approvisionnements"
-msgstr ""
+msgstr "Achats de matières premières et autres approvisionnements"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Avances et acomptes reçus sur commandes en cours"
-msgstr ""
+msgstr "Avances et acomptes reçus sur commandes en cours"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Quotes-parts de résultat sur opérations faites en commun (II)"
-msgstr ""
+msgstr "Quotes-parts de résultat sur opérations faites en commun (II)"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "VALEURS MOBILIÈRES DE PLACEMENT"
-msgstr ""
+msgstr "VALEURS MOBILIÈRES DE PLACEMENT"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "TOTAL I"
-msgstr ""
+msgstr "TOTAL I"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Autres intérêts et produits assimilés"
-msgstr ""
+msgstr "Autres intérêts et produits assimilés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Dettes sur immobilisations et comptes rattachés"
-msgstr ""
+msgstr "Dettes sur immobilisations et comptes rattachés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Créances clients et comptes rattachés"
-msgstr ""
+msgstr "Créances clients et comptes rattachés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Report à nouveau"
-msgstr ""
+msgstr "Report à nouveau"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "IMMOBILISATIONS INCORPORELLES"
-msgstr ""
+msgstr "IMMOBILISATIONS INCORPORELLES"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_1
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_5
msgid "France"
-msgstr ""
+msgstr "France"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "rêts"
-msgstr ""
+msgstr "Prêts"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sous-total A - Montant net du chiffre d'affaires"
-msgstr ""
+msgstr "Sous-total A - Montant net du chiffre d'affaires"
#. module: l10n_fr
#: wizard_button:l10n.fr.bilan.report,init,report:0
@@ -318,32 +318,32 @@ msgstr "Imprimer"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Amortissements et dépréciations"
-msgstr ""
+msgstr "Amortissements et dépréciations"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Net"
-msgstr ""
+msgstr "Net"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "TOTAL I ( A + B )"
-msgstr ""
+msgstr "TOTAL I ( A + B )"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "itres immobilisés de l'activité de portefeuille"
-msgstr ""
+msgstr "Titres immobilisés de l'activité de portefeuille"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "( VI )"
-msgstr ""
+msgstr "( VI )"
#. module: l10n_fr
#: constraint:account.account.template:0
msgid "Error ! You can not create recursive account templates."
-msgstr ""
+msgstr "Erreur ! Vous ne pouvez pas créer de modèles de compte récursifs"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_provision
@@ -353,7 +353,7 @@ msgstr "Provisions"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Variation des stocks"
-msgstr ""
+msgstr "Variation des stocks"
#. module: l10n_fr
#: model:ir.actions.report.xml,name:l10n_fr.l10n_fr_pcg_bilan
@@ -365,22 +365,22 @@ msgstr "Bilan"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Emprunts obligataires convertibles"
-msgstr ""
+msgstr "Emprunts obligataires convertibles"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "TOTAL ACTIF ("
-msgstr ""
+msgstr "TOTAL ACTIF ("
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "CHARGES ( hors taxes )"
-msgstr ""
+msgstr "CHARGES ( hors taxes )"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Produits nets sur cessions de valeurs mobilières de placement"
-msgstr ""
+msgstr "Produits nets sur cessions de valeurs mobilières de placement"
#. module: l10n_fr
#: field:l10n.fr.line,report_id:0
@@ -400,27 +400,27 @@ msgstr "Engagements"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Avances et acomptes"
-msgstr ""
+msgstr "Avances et acomptes"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_7
msgid "TVA sur les encaissements"
-msgstr ""
+msgstr "TVA sur les encaissements"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sous-total B"
-msgstr ""
+msgstr "Sous-total B"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "C"
-msgstr ""
+msgstr "C"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "M"
-msgstr ""
+msgstr "M"
#. module: l10n_fr
#: model:ir.module.module,description:l10n_fr.module_meta_information
@@ -433,17 +433,17 @@ msgstr ""
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Concessions, brevets, licences,..., droits et valeurs similaires"
-msgstr ""
+msgstr "Concessions, brevets, licences,..., droits et valeurs similaires"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Instruments de trésorerie"
-msgstr ""
+msgstr "Instruments de trésorerie"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Écarts de conversion passif"
-msgstr ""
+msgstr "Écarts de conversion passif"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_expense
@@ -453,37 +453,37 @@ msgstr "Charges"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "ACTIF"
-msgstr ""
+msgstr "ACTIF"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "DETTES"
-msgstr ""
+msgstr "DETTES"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sur immobilisations : dotations aux amortissements"
-msgstr ""
+msgstr "Sur immobilisations : dotations aux amortissements"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "mmobilisations corporelles en cours"
-msgstr ""
+msgstr "Immobilisations corporelles en cours"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Autres"
-msgstr ""
+msgstr "Autres"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Dotation aux amortissements et aux dépréciations"
-msgstr ""
+msgstr "Dotation aux amortissements et aux dépréciations"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "PRODUITS D'EXPLOITATION"
-msgstr ""
+msgstr "PRODUITS D'EXPLOITATION"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
@@ -491,136 +491,138 @@ msgid ""
"Reprises sur provisions, dépréciations (et amortissements) et transferts de "
"charges"
msgstr ""
+"Reprises sur provisions, dépréciations (et amortissements) et transferts de "
+"charges"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "PRODUITS - CHARGES"
-msgstr ""
+msgstr "PRODUITS - CHARGES"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "RÉSULTAT DE L'EXERCICE [bénéfice ou perte]"
-msgstr ""
+msgstr "RÉSULTAT DE L'EXERCICE [bénéfice ou perte]"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Impôts, taxes et versements assimilés"
-msgstr ""
+msgstr "Impôts, taxes et versements assimilés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "roduits intermédiaires et finis"
-msgstr ""
+msgstr "Produits intermédiaires et finis"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "utres"
-msgstr ""
+msgstr "Autres"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Avances et acomptes versés sur commandes"
-msgstr ""
+msgstr "Avances et acomptes versés sur commandes"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "onstructions"
-msgstr ""
+msgstr "Constructions"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Reprises sur provisions, dépréciations et transferts de charges"
-msgstr ""
+msgstr "Reprises sur provisions, dépréciations et transferts de charges"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "réances rattachées à des participations"
-msgstr ""
+msgstr "Créances rattachées à des participations"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Dotations aux provisions"
-msgstr ""
+msgstr "Dotations aux provisions"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "vous sur votre structure juridique et son fonctionnement comptable."
-msgstr ""
+msgstr "vous sur votre structure juridique et son fonctionnement comptable."
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sur opérations en capital"
-msgstr ""
+msgstr "Sur opérations en capital"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Charges constatés d'avance"
-msgstr ""
+msgstr "Charges constatés d'avance"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "TOTAL II"
-msgstr ""
+msgstr "TOTAL II"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "CAPITAUX PROPRES"
-msgstr ""
+msgstr "CAPITAUX PROPRES"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Frais d'établissement"
-msgstr ""
+msgstr "Frais d'établissement"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Charges à répartir sur plusieurs exercices"
-msgstr ""
+msgstr "Charges à répartir sur plusieurs exercices"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Subventions d'exploitation"
-msgstr ""
+msgstr "Subventions d'exploitation"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Provisions réglementées"
-msgstr ""
+msgstr "Provisions réglementées"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "PRODUITS (hors taxes)"
-msgstr ""
+msgstr "PRODUITS (hors taxes)"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Écart d'équivalence"
-msgstr ""
+msgstr "Écart d'équivalence"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Primes d'émission, de fusion, d'apport"
-msgstr ""
+msgstr "Primes d'émission, de fusion, d'apport"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "utres titres immobilisés"
-msgstr ""
+msgstr "Autres titres immobilisés"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Réserves réglementées"
-msgstr ""
+msgstr "Réserves réglementées"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "CHARGES D'EXPLOITATION"
-msgstr ""
+msgstr "CHARGES D'EXPLOITATION"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "I + II + III + IV + V"
-msgstr ""
+msgstr "I + II + III + IV + V"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
@@ -629,11 +631,14 @@ msgid ""
"120 ou 129 (Résultat de l'exercice précédant) dans un compte de report à "
"nouveau (compte 110 ou 119) ou dans le compte 108. Renseignez"
msgstr ""
+"Attention, pour que votre bilan soit correct, vous devez solder les comptes "
+"120 ou 129 (Résultat de l'exercice précédant) dans un compte de report à "
+"nouveau (compte 110 ou 119) ou dans le compte 108. Renseignez"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Vente de marchandises"
-msgstr ""
+msgstr "Vente de marchandises"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
@@ -678,7 +683,7 @@ msgstr ""
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "apital souscrit - non appelé"
-msgstr ""
+msgstr "Capital souscrit - non appelé"
#. module: l10n_fr
#: model:ir.model,name:l10n_fr.model_l10n_fr_report
@@ -688,27 +693,27 @@ msgstr "Rapport pour l10n_fr"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Compte de résultat"
-msgstr ""
+msgstr "Compte de résultat"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "CRÉANCES"
-msgstr ""
+msgstr "CRÉANCES"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sur opérations de gestion"
-msgstr ""
+msgstr "Sur opérations de gestion"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Redevances de crédit-bail mobilier"
-msgstr ""
+msgstr "Redevances de crédit-bail mobilier"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Primes de remboursement des emprunts"
-msgstr ""
+msgstr "Primes de remboursement des emprunts"
#. module: l10n_fr
#: field:l10n.fr.report,code:0
@@ -718,27 +723,27 @@ msgstr "Code"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Autres produits"
-msgstr ""
+msgstr "Autres produits"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Participation des salariés aux résultats"
-msgstr ""
+msgstr "Participation des salariés aux résultats"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Subventions d'investissement"
-msgstr ""
+msgstr "Subventions d'investissement"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "STOCK EN COURS"
-msgstr ""
+msgstr "STOCK EN COURS"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Autres achats et charges externes"
-msgstr ""
+msgstr "Autres achats et charges externes"
#. module: l10n_fr
#: wizard_field:l10n.fr.bilan.report,init,fiscalyear:0
@@ -749,17 +754,17 @@ msgstr "Année fiscale"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_3
msgid "DOM-TOM"
-msgstr ""
+msgstr "DOM-TOM"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Intérêts et charges assimilées"
-msgstr ""
+msgstr "Intérêts et charges assimilées"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Immobilisations incorporelles en cours"
-msgstr ""
+msgstr "Immobilisations incorporelles en cours"
#. module: l10n_fr
#: wizard_button:l10n.fr.bilan.report,init,end:0
@@ -771,17 +776,17 @@ msgstr "Annuler"
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "au"
-msgstr ""
+msgstr "au"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Production immobilisée"
-msgstr ""
+msgstr "Production immobilisée"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sur actif circulant : dotations aux dépréciations"
-msgstr ""
+msgstr "Sur actif circulant : dotations aux dépréciations"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_receivable
@@ -791,13 +796,13 @@ msgstr "Recevable"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Capital souscrit - appelé , non versé"
-msgstr ""
+msgstr "Capital souscrit - appelé , non versé"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "( V )"
-msgstr ""
+msgstr "( V )"
#. module: l10n_fr
#: constraint:ir.model:0
@@ -815,17 +820,17 @@ msgstr "Définition"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Différences positives de change"
-msgstr ""
+msgstr "Différences positives de change"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "errains"
-msgstr ""
+msgstr "Terrains"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Brut"
-msgstr ""
+msgstr "Brut"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_immobilisations
@@ -835,23 +840,23 @@ msgstr "Immobilisations"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "PASSIF"
-msgstr ""
+msgstr "PASSIF"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Écarts de réévaluation"
-msgstr ""
+msgstr "Écarts de réévaluation"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Production stockée"
-msgstr ""
+msgstr "Production stockée"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid "Imprimé le :"
-msgstr ""
+msgstr "Imprimé le :"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_equity
@@ -861,38 +866,38 @@ msgstr "Capitaux propres"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Impôts sur les bénéfices"
-msgstr ""
+msgstr "Impôts sur les bénéfices"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "TOTAL DES PRODUITS ( I + II + III + IV )"
-msgstr ""
+msgstr "TOTAL DES PRODUITS ( I + II + III + IV )"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Salaires et traitements"
-msgstr ""
+msgstr "Salaires et traitements"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
#: rml:l10n.fr.cdr:0
msgid ")"
-msgstr ""
+msgstr ")"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Provisions pour risques"
-msgstr ""
+msgstr "Provisions pour risques"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "n-cours de production [biens et services]"
-msgstr ""
+msgstr "En-cours de production [biens et services]"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Sur immobilisations : dotations aux dépréciations"
-msgstr ""
+msgstr "Sur immobilisations : dotations aux dépréciations"
#. module: l10n_fr
#: field:l10n.fr.line,code:0
@@ -902,7 +907,7 @@ msgstr "Nom de la variable"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "TOTAL CHARGES ( I + II + III"
-msgstr ""
+msgstr "TOTAL CHARGES ( I + II + III"
#. module: l10n_fr
#: model:ir.actions.report.xml,name:l10n_fr.l10n_fr_pcg_cdr
@@ -918,17 +923,17 @@ msgstr "Lignes de rapport pour l10n_fr"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "A"
-msgstr ""
+msgstr "A"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_2
msgid "Zone Euro"
-msgstr ""
+msgstr "Zone Euro"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "E"
-msgstr ""
+msgstr "E"
#. module: l10n_fr
#: field:l10n.fr.line,name:0
@@ -939,7 +944,7 @@ msgstr "Nom"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "I"
-msgstr ""
+msgstr "I"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_stock
@@ -964,27 +969,27 @@ msgstr "Comptes spéciaux"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Emprunts et dettes financières diverses"
-msgstr ""
+msgstr "Emprunts et dettes financières diverses"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Produits constatés d'avance"
-msgstr ""
+msgstr "Produits constatés d'avance"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Charges nettes sur cessions de valeurs mobilières de placement"
-msgstr ""
+msgstr "Charges nettes sur cessions de valeurs mobilières de placement"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "archandises"
-msgstr ""
+msgstr "Marchandises"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Emprunts et dettes auprès des établissements de crédit"
-msgstr ""
+msgstr "Emprunts et dettes auprès des établissements de crédit"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_view
@@ -994,47 +999,47 @@ msgstr "Vue"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "CHARGES FINANCIÈRES"
-msgstr ""
+msgstr "CHARGES FINANCIÈRES"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Quotes-parts de résultat sur opérations faites en commun ( II )"
-msgstr ""
+msgstr "Quotes-parts de résultat sur opérations faites en commun ( II )"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "IMMOBILISATIONS CORPORELLES"
-msgstr ""
+msgstr "IMMOBILISATIONS CORPORELLES"
#. module: l10n_fr
#: model:account.fiscal.position.template,name:l10n_fr.fiscal_position_template_6
msgid "TVA sur le débits"
-msgstr ""
+msgstr "TVA sur le débits"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "Achat de marchandises"
-msgstr ""
+msgstr "Achat de marchandises"
#. module: l10n_fr
#: model:ir.module.module,shortdesc:l10n_fr.module_meta_information
msgid "France - Plan Comptable Général"
-msgstr ""
+msgstr "France - Plan Comptable Général"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Écarts de conversion actif"
-msgstr ""
+msgstr "Écarts de conversion actif"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Autres emprunts obligataires"
-msgstr ""
+msgstr "Autres emprunts obligataires"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Réserve légale"
-msgstr ""
+msgstr "Réserve légale"
#. module: l10n_fr
#: model:account.account.type,name:l10n_fr.account_type_cloture
@@ -1044,14 +1049,14 @@ msgstr "Cloture"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "IMMOBILISATIONS FINANCIÉRES"
-msgstr ""
+msgstr "IMMOBILISATIONS FINANCIÉRES"
#. module: l10n_fr
#: rml:l10n.fr.cdr:0
msgid "CHARGES EXCEPTIONNELLES"
-msgstr ""
+msgstr "CHARGES EXCEPTIONNELLES"
#. module: l10n_fr
#: rml:l10n.fr.bilan:0
msgid "Dettes fiscales et sociales"
-msgstr ""
+msgstr "Dettes fiscales et sociales"
diff --git a/addons/lunch/lunch.py b/addons/lunch/lunch.py
index a986dc25953..88d080c11bd 100644
--- a/addons/lunch/lunch.py
+++ b/addons/lunch/lunch.py
@@ -91,7 +91,7 @@ class lunch_cashmove(osv.osv):
""" Move cash """
_name = 'lunch.cashmove'
- _description = "Move cash"
+ _description = "Cash Move"
_columns = {
'name': fields.char('Name', size=128),
diff --git a/addons/mail_gateway/__openerp__.py b/addons/mail_gateway/__openerp__.py
index 27f596a53b6..b5e56a03ee1 100644
--- a/addons/mail_gateway/__openerp__.py
+++ b/addons/mail_gateway/__openerp__.py
@@ -32,7 +32,7 @@
* Easy Integration with any Module""",
'author': 'Tiny',
'website': 'http://www.openerp.com',
- 'depends': ['base','fetchmail'],
+ 'depends': ['base'],
'init_xml': [],
'update_xml': [
"mail_gateway_view.xml"
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index 81f32d12f60..8534c32c510 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -22,60 +22,38 @@
from osv import osv, fields
import time
+class one2many_domain(fields.one2many):
+ def set(self, cr, obj, id, field, values, user=None, context=None):
+ if not values:
+ return
+ return super(one2many_domain, self).set(cr, obj, id, field, values,
+ user=user, context=context)
+ def get(self, cr, obj, ids, name, user=None, offset=0, context=None, values=None):
+ if not context:
+ context = {}
+ res = {}
+ msg_obj = obj.pool.get('mailgate.message')
+ for thread in obj.browse(cr, user, ids, context=context):
+ final = msg_obj.search(cr, user, self._domain + [('thread_id', '=', thread.id)], context=context)
+ res[thread.id] = final
+ return res
+
+
class mailgate_thread(osv.osv):
'''
Mailgateway Thread
'''
_name = 'mailgate.thread'
_description = 'Mailgateway Thread'
-
- def _get_log_ids(self, cr, uid, ids, field_names, arg, context=None):
- """Gets id for case log from history of particular case
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of Case IDs
- @param context: A standard dictionary for contextual values
- @return:Dictionary of History Ids
- """
- if not context:
- context = {}
-
- result = {}
- domain = []
- history_obj = False
- model_obj = self.pool.get('ir.model')
- history_obj = self.pool.get('mailgate.message')
-
- if 'message_ids' in field_names:
- name = 'message_ids'
- domain += [('email_to', '!=', False)]
-
- if 'log_ids' in field_names:
- name = 'log_ids'
- domain += [('email_to', '=', False)]
-
- model_ids = model_obj.search(cr, uid, [('model', '=', self._name)])
- domain += [('model_id', '=', model_ids[0])]
- for case in self.browse(cr, uid, ids, context):
- domain1 = domain + [('res_id', '=', case.id)]
- history_ids = history_obj.search(cr, uid, domain1, context=context)
- if history_ids:
- result[case.id] = {name: history_ids}
- else:
- result[case.id] = {name: []}
- return result
+ _rec_name = 'thread'
_columns = {
- 'name':fields.char('Name', size=64),
- 'active': fields.boolean('Active'),
- 'message_ids': fields.function(_get_log_ids, method=True, type='one2many', \
- multi="message_ids", relation="mailgate.message", string="Messages"),
- 'log_ids': fields.function(_get_log_ids, method=True, type='one2many', \
- multi="log_ids", relation="mailgate.message", string="Logs"),
- }
-
+ 'thread': fields.char('Thread', size=32, required=False),
+ 'message_ids': one2many_domain('mailgate.message', 'thread_id', 'Messages', domain=[('history', '=', True)], required=False),
+ 'log_ids': one2many_domain('mailgate.message', 'thread_id', 'Logs', domain=[('history', '=', False)], required=False),
+ }
+
def __history(self, cr, uid, cases, keyword, history=False, email=False, details=None, email_from=False, message_id=False, context={}):
"""
@param self: The object pointer
@@ -89,7 +67,6 @@ class mailgate_thread(osv.osv):
@param context: A standard dictionary for contextual values"""
if not context:
context = {}
-
# The mailgate sends the ids of the cases and not the object list
if all(isinstance(case_id, (int, long)) for case_id in cases) and context.get('model'):
cases = self.pool.get(context['model']).browse(cr, uid, cases, context=context)
@@ -102,21 +79,19 @@ class mailgate_thread(osv.osv):
data = {
'name': keyword,
'user_id': uid,
- 'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'model_id' : model_ids and model_ids[0] or False,
- 'res_id': case.id,
- 'section_id': case.section_id.id,
- 'message_id':message_id
+ 'date': time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'thread_id': case.thread_id.id,
+ 'message_id': message_id
}
if history:
+ data['history'] = True
data['description'] = details or case.description
data['email_to'] = email or \
- (case.section_id and case.section_id.reply_to) or \
(case.user_id and case.user_id.address_id and \
case.user_id.address_id.email) or tools.config.get('email_from', False)
data['email_from'] = email_from or \
- (case.section_id and case.section_id.reply_to) or \
(case.user_id and case.user_id.address_id and \
case.user_id.address_id.email) or tools.config.get('email_from', False)
res = obj.create(cr, uid, data, context)
@@ -138,10 +113,10 @@ class mailgate_message(osv.osv):
_columns = {
'name':fields.char('Message', size=64),
+ 'model_id': fields.many2one('ir.model', 'Model'),
'thread_id':fields.many2one('mailgate.thread', 'Thread'),
'date': fields.datetime('Date'),
- 'model_id': fields.many2one('ir.model', "Model"),
- 'res_id': fields.integer('Resource ID'),
+ 'history': fields.boolean('Is History?', required=False),
'user_id': fields.many2one('res.users', 'User Responsible', readonly=True),
'message': fields.text('Description'),
'email_from': fields.char('Email From', size=84),
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index e735f75b7f0..8b26d5ee47a 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -9,9 +9,8 @@
-
-
+
@@ -51,20 +50,19 @@
form
-
-
-
-
+
+
+
+
-
+
-
-
+
@@ -82,6 +80,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -92,7 +119,7 @@
tree
-
+
@@ -120,12 +147,12 @@
-
-
+ -->
diff --git a/addons/mail_gateway/security/ir.model.access.csv b/addons/mail_gateway/security/ir.model.access.csv
new file mode 100644
index 00000000000..badba5d4e3e
--- /dev/null
+++ b/addons/mail_gateway/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"mail_gateway_mailgate_message","mail_gateway.mailgate.message","model_mailgate_message","base.group_user",1,1,1,1
+"mail_gateway_mailgate_thread","mail_gateway.mailgate.thread","model_mailgate_thread","base.group_user",1,1,1,1
diff --git a/addons/marketing_campaign/__init__.py b/addons/marketing_campaign/__init__.py
index 94c40dc8a26..d37d8604380 100755
--- a/addons/marketing_campaign/__init__.py
+++ b/addons/marketing_campaign/__init__.py
@@ -20,6 +20,7 @@
##############################################################################
import marketing_campaign
+import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign/__openerp__.py b/addons/marketing_campaign/__openerp__.py
index a4945e53362..3363dd87144 100755
--- a/addons/marketing_campaign/__openerp__.py
+++ b/addons/marketing_campaign/__openerp__.py
@@ -36,6 +36,9 @@
'init_xml': [],
'update_xml': [
'marketing_campaign_view.xml',
+ 'marketing_campaign_data.xml',
+ 'marketing_campaign_workflow.xml',
+ 'report/campaign_analysis_view.xml',
],
'demo_xml': [],
'installable': True,
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index 7c0dfcc13d5..52733fad159 100755
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -19,10 +19,12 @@
#
##############################################################################
import time
+import base64
from datetime import datetime
from dateutil.relativedelta import relativedelta
from osv import fields, osv
+import netsvc
_intervalTypes = {
'hours': lambda interval: relativedelta(hours=interval),
@@ -33,11 +35,11 @@ _intervalTypes = {
class marketing_campaign(osv.osv): #{{{
_name = "marketing.campaign"
- _description = "Marketing Campaigns"
+ _description = "Marketing Campaign"
_columns = {
'name': fields.char('Name', size=64, required=True),
- 'object_id': fields.many2one('ir.model', 'Objects'),
+ 'object_id': fields.many2one('ir.model', 'Objects', required=True),
'mode':fields.selection([('test', 'Test'),
('test_realtime', 'Realtime Time'),
('manual', 'Manual'),
@@ -47,18 +49,51 @@ class marketing_campaign(osv.osv): #{{{
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled'),],
- 'State',
- readonly=True),
+ 'State',),
'activity_ids': fields.one2many('marketing.campaign.activity',
'campaign_id', 'Activities'),
+ 'fixed_cost': fields.float('Fixed Cost'),
}
-
+
+ _defaults = {
+ 'state': lambda *a: 'draft',
+ }
+
+ def state_running_set(self, cr, uid, ids, *args):
+ campaign = self.browse(cr, uid, ids[0])
+ if not campaign.activity_ids :
+ raise osv.except_osv("Error", "There is no associate activitity for the campaign")
+ act_ids = [ act_id.id for act_id in campaign.activity_ids]
+ act_ids = self.pool.get('marketing.campaign.activity').search(cr, uid,
+ [('id', 'in', act_ids), ('start', '=', True)])
+ if not act_ids :
+ raise osv.except_osv("Error", "There is no associate activitity for the campaign")
+ segment_ids = self.pool.get('marketing.campaign.segment').search(cr, uid,
+ [('campaign_id', '=', campaign.id),
+ ('state', '=', 'draft')])
+ if not segment_ids :
+ raise osv.except_osv("Error", "There is no associate semgnet for the campaign")
+ self.write(cr, uid, ids, {'state': 'running'})
+ return True
+
+ def state_done_set(self, cr, uid, ids, *args):
+ segment_ids = self.pool.get('marketing.campaign.segment').search(cr, uid,
+ [('campaign_id', 'in', ids),
+ ('state', '=', 'running')])
+ if segment_ids :
+ raise osv.except_osv("Error", "Camapign cannot be done before all segments are done")
+ self.write(cr, uid, ids, {'state': 'done'})
+ return True
+
+ def state_cancel_set(self, cr, uid, ids, *args):
+ self.write(cr, uid, ids, {'state': 'cancelled'})
+ return True
marketing_campaign()#}}}
class marketing_campaign_segment(osv.osv): #{{{
_name = "marketing.campaign.segment"
- _description = "Marketing Campaign Segments"
+ _description = "Campaign Segment"
_columns = {
'name': fields.char('Name', size=64,required=True),
@@ -67,26 +102,93 @@ class marketing_campaign_segment(osv.osv): #{{{
'object_id': fields.related('campaign_id','object_id',
type='many2one', relation='ir.model',
string='Object'),
- 'ir_filter_id':fields.many2one('ir.filters', 'Filter'),
+ 'ir_filter_id': fields.many2one('ir.filters', 'Filter'),
'sync_last_date': fields.datetime('Date'),
- 'sync_mode':fields.selection([('create', 'Create'),
- ('write', 'Write')],
+ 'sync_mode': fields.selection([('create_date', 'Create'),
+ ('write_date', 'Write')],
'Mode'),
'state': fields.selection([('draft', 'Draft'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled')],
- 'State',
- readonly=True),
+ 'State',),
'date_run': fields.datetime('Running'),
'date_done': fields.datetime('Done'),
}
+
+ _defaults = {
+ 'state': lambda *a: 'draft',
+ 'sync_mode': lambda *a: 'create_date',
+ }
+
+ def state_running_set(self, cr, uid, ids, *args):
+ segment = self.browse(cr, uid, ids[0])
+ curr_date = time.strftime('%Y-%m-%d %H:%M:%S')
+ if not segment.date_run:
+ raise osv.except_osv("Error", "Segment can't be start before giving running date")
+ if segment.campaign_id.state != 'running' :
+ raise osv.except_osv("Error", "You have to start campaign first")
+ if (segment.date_run >= curr_date):
+ raise osv.except_osv("Error", "Segment cannot start before run date")
+ if not segment.sync_last_date:
+ self.write(cr, uid, ids, {'sync_last_date':curr_date})
+ self.write(cr, uid, ids, {'state': 'running','date_done': curr_date})
+ return True
+
+ def state_done_set(self, cr, uid, ids, *args):
+ date_done = self.browse(cr, uid, ids[0]).date_done
+ if (date_done > time.strftime('%Y-%m-%d')):
+ raise osv.except_osv("Error", "Segment cannot be closed before end date")
+
+ wi_ids = self.pool.get("marketing.campaign.workitem").search(cr, uid,
+ [('state', 'in', ['inprogress', 'todo']),
+ ('segment_id', '=', ids[0])])
+ if wi_ids :
+ raise osv.except_osv("Error", "Segment cannot be done before all workitems are processed")
+ self.write(cr, uid, ids, {'state': 'done'})
+ return True
+
+ def state_cancel_set(self, cr, uid, ids, *args):
+ self.write(cr, uid, ids, {'state': 'cancelled'})
+ return True
+
+ def process_segment(self, cr, uid, context={}):
+ segment_ids = self.search(cr, uid, [('state', '=', 'running')])
+ action_date = time.strftime('%Y-%m-%d %H:%M:%S')
+ last_action_date = (datetime.now() + _intervalTypes['days'](-1) \
+ ).strftime('%Y-%m-%d %H:%M:%S')
+ for segment in self.browse(cr, uid, segment_ids):
+ act_ids = self.pool.get('marketing.campaign.activity').search(cr,
+ uid, [('start', '=', True),
+ ('campaign_id', '=', segment.campaign_id.id)])
+ if (segment.sync_last_date and \
+ segment.sync_last_date <= action_date )\
+ or not segment.sync_last_date :
+ model_obj = self.pool.get(segment.object_id.model)
+ object_ids = model_obj.search(cr, uid, [
+ (segment.sync_mode, '<=', action_date),
+ (segment.sync_mode, '>=', last_action_date)])
+ for o_ids in model_obj.read(cr, uid, object_ids) :
+ partner_id = 'partner_id' in o_ids and o_ids['partner_id'] \
+ or False
+ if partner_id:
+ for act_id in act_ids:
+ wi_vals = {'segment_id': segment.id,
+ 'activity_id': act_id,
+ 'date': action_date,
+ 'partner_id': partner_id[0],
+ 'state': 'todo',
+ }
+ self.pool.get('marketing.campaign.workitem').create(
+ cr, uid, wi_vals)
+ self.write(cr, uid, segment.id, {'sync_last_date':action_date})
+ return True
marketing_campaign_segment()#}}}
class marketing_campaign_activity(osv.osv): #{{{
_name = "marketing.campaign.activity"
- _description = "Marketing Campaign Activities"
+ _description = "Campaign Activity"
_columns = {
'name': fields.char('Name', size=64),
@@ -96,11 +198,11 @@ class marketing_campaign_activity(osv.osv): #{{{
string='Object'),
'start': fields.boolean('Start'),
'condition': fields.text('Condition'),
- 'type':fields.selection([('email', 'E-mail'),
+ 'type': fields.selection([('email', 'E-mail'),
('paper', 'Paper'),
('action', 'Action'),
('subcampaign', 'Sub-Campaign')],
- 'Type'),
+ 'Type', required=True),
'email_template_id': fields.many2one('poweremail.templates','Email Template'),
'report_id': fields.many2one('ir.actions.report.xml', 'Reports'),
'report_directory_id': fields.many2one('document.directory', 'Directory'),
@@ -111,11 +213,14 @@ class marketing_campaign_activity(osv.osv): #{{{
'from_ids': fields.one2many('marketing.campaign.transition',
'activity_from_id',
'Previous Activities'),
- 'subcampaign_id' :fields.many2one('marketing.campaign', 'Sub-Campaign'),
- 'subcampaign_segment_id' :fields.many2one('marketing.campaign.segment',
+ 'subcampaign_id': fields.many2one('marketing.campaign', 'Sub-Campaign'),
+ 'subcampaign_segment_id': fields.many2one('marketing.campaign.segment',
'Sub Campaign Segment'),
-
+ 'variable_cost': fields.float('Variable Cost'),
+ 'revenue': fields.float('Revenue')
}
+
+
def search(self, cr, uid, args, offset=0, limit=None, order=None,
context=None, count=False):
if context == None:
@@ -130,11 +235,30 @@ class marketing_campaign_activity(osv.osv): #{{{
return super(marketing_campaign_activity, self).search(cr, uid, args,
offset, limit, order, context, count)
+ def process(self, cr, uid, act_id, wi_id, context={}):
+ activity = self.browse(cr, uid, act_id)
+ workitem = self.pool.get('marketing.campaign.workitem').browse(cr, uid, wi_id)
+ if activity.type == 'paper' :
+ service = netsvc.LocalService('report.%s'%activity.report_id.report_name)
+ (report_data, format) = service.create(cr, uid, [activity.report_id.id], {}, {})
+ attach_vals = {
+ 'name': '%s_%s_%s'%(activity.report_id.report_name,
+ activity.name,workitem.partner_id.name),
+ 'datas_fname': '%s.%s'%(activity.report_id.report_name,
+ activity.report_id.report_type),
+ 'parent_id': activity.report_directory_id.id,
+ 'datas': base64.encodestring(report_data),
+ 'file_type': format
+ }
+ self.pool.get('ir.attachment').create(cr, uid, attach_vals)
+# elif activity.type == 'email' :
+
+ return True
marketing_campaign_activity()#}}}
class marketing_campaign_transition(osv.osv): #{{{
_name = "marketing.campaign.transition"
- _description = "Campaign Transitions"
+ _description = "Campaign Transition"
_columns = {
'activity_from_id': fields.many2one('marketing.campaign.activity',
@@ -146,12 +270,19 @@ class marketing_campaign_transition(osv.osv): #{{{
('months', 'Months'),
('years','Years')],'Interval Type')
}
+
+ def default_get(self, cr, uid, fields, context={}):
+ value = super(marketing_campaign_transition, self).default_get(cr, uid,
+ fields, context)
+ if context.has_key('type_id'):
+ value[context['type_id']] = context['activity_id']
+ return value
marketing_campaign_transition() #}}}
class marketing_campaign_workitem(osv.osv): #{{{
_name = "marketing.campaign.workitem"
- _description = "Campaign Workitems"
+ _description = "Campaign Workitem"
_columns = {
'segment_id': fields.many2one('marketing.campaign.segment', 'Segment',
@@ -165,19 +296,24 @@ class marketing_campaign_workitem(osv.osv): #{{{
'date': fields.datetime('Execution Date'),
'partner_id': fields.many2one('res.partner', 'Partner',required=True),
'state': fields.selection([('todo', 'ToDo'), ('inprogress', 'In Progress'),
- ('exception', 'Exception'), ('done', 'Done'),
- ('cancelled', 'Cancelled')], 'State')
+ ('exception', 'Exception'), ('done', 'Done'),
+ ('cancelled', 'Cancelled')], 'State')
}
+ _defaults = {
+ 'state': lambda *a: 'draft',
+ }
def process_chain(self, cr, uid, workitem_id, context={}):
workitem = self.browse(cr, uid, workitem_id)
- to_ids = [to_ids.id for to_ids in workitem.activity_id.to_ids]
mct_obj = self.pool.get('marketing.campaign.transition')
- process_to_id = mct_obj.search(cr,uid, [('id', 'in', to_ids),
- ('activity_from_id','=', 'activity_id')])
+ process_to_id = mct_obj.search(cr,uid, [
+ ('activity_from_id','=', workitem.activity_id.id)])
for mct_id in mct_obj.browse(cr, uid, process_to_id):
- launch_date = datetime.datetime.now() + _intervalTypes[ \
- mct_id.interval_type](mct_id.interval_nbr)
+ if mct_id.interval_type and mct_id.interval_nbr :
+ launch_date = (datetime.now() + _intervalTypes[ \
+ mct_id.interval_type](mct_id.interval_nbr) \
+ ).strftime('%Y-%m-%d %H:%M:%S')
+ launch_date = time.strftime('%Y-%m-%d %H:%M:%S')
workitem_vals = {'segment_id': workitem.segment_id.id,
'activity_id': mct_id.activity_to_id.id,
'date': launch_date,
@@ -187,16 +323,38 @@ class marketing_campaign_workitem(osv.osv): #{{{
self.create(cr, uid, workitem_vals)
def process(self, cr, uid, workitem_ids, context={}):
- #for wi in self.browse(cr, uid, workitem_ids):
- # if wi.state == 'todo'# we searched the wi which are in todo state
+ for wi in self.browse(cr, uid, workitem_ids):
+ if wi.state == 'todo' :# we searched the wi which are in todo state
#then y v keep this filter again
+ eval_context = {
+ 'pool': self.pool,
+ 'cr': cr,
+ 'uid': uid,
+ 'wi': wi,
+ 'object': wi.activity_id,
+ 'transition' : wi.activity_id.to_ids
+ }
+ val = {}
+ exec wi.activity_id.condition.replace('\r','') in \
+ eval_context, val
+ if 'action' in val and val['action']:
+ try :
+ self.pool.get('marketing.campaign.activity').process(cr,
+ uid, wi.activity_id.id, wi.id, context)
+ self.write(cr, uid, wi.id, {'state':'done'})
+ self.process_chain(cr, uid, wi.id, context)
+ except Exception,e:
+ self.write(cr, uid, wi.id, {'state':'exception'})
+ else :
+ self.write(cr, uid, wi.id, {'state':'cancelled'})
+
return True
def process_all(self, cr, uid, context={}):
- workitem_ids = self.search(cr, uid, [('type', '=', 'todo'),
+ workitem_ids = self.search(cr, uid, [('state', '=', 'todo'),
('date','<=', time.strftime('%Y-%m-%d %H:%M:%S'))])
if workitem_ids:
- self.parocess(cr, uid, workitem_ids, context)
+ self.process(cr, uid, workitem_ids, context)
marketing_campaign_workitem() #}}}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/marketing_campaign/marketing_campaign_data.xml b/addons/marketing_campaign/marketing_campaign_data.xml
index b3e18ee5b5d..81402dd73c2 100644
--- a/addons/marketing_campaign/marketing_campaign_data.xml
+++ b/addons/marketing_campaign/marketing_campaign_data.xml
@@ -6,13 +6,25 @@
Check Workitem
- 60
- minutes
+ 1
+ hours-1
+
+
+ Check Segment
+ 1
+ days
+ -1
+
+
+
+
+
+
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index eefffcf7ff1..f013f37e853 100755
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -2,7 +2,6 @@
-
-
+
+
+
+
+
+ marketing.campaign.basic
+ marketing.campaign
+ True
+
+
+
+
+
+ True
+ draft
+
+
+
+
+ running
+ function
+ state_running_set()
+
+
+
+
+ done
+ function
+ state_done_set()
+
+
+
+
+ cancel
+ True
+ function
+ state_cancel_set()
+
+
+
+
+
+
+ state_running_set
+
+
+
+
+
+ state_done_set
+
+
+
+
+
+ state_cancel_set
+
+
+
+
+
+ marketing.campaign.segment.basic
+ marketing.campaign.segment
+ True
+
+
+
+
+
+ True
+ draft
+
+
+
+
+ running
+ function
+ state_running_set()
+
+
+
+
+ done
+ function
+ state_done_set()
+
+
+
+
+ cancel
+ True
+ function
+ state_cancel_set()
+
+
+
+
+
+
+ state_running_set
+
+
+
+
+
+ state_done_set
+
+
+
+
+
+ state_cancel_set
+
+
+
diff --git a/addons/marketing_campaign/report/__init__.py b/addons/marketing_campaign/report/__init__.py
new file mode 100644
index 00000000000..83740cf759b
--- /dev/null
+++ b/addons/marketing_campaign/report/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+
+import campaign_analysis
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/marketing_campaign/report/campaign_analysis.py b/addons/marketing_campaign/report/campaign_analysis.py
new file mode 100644
index 00000000000..590a1b47bc0
--- /dev/null
+++ b/addons/marketing_campaign/report/campaign_analysis.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2010 Tiny SPRL ().
+#
+# 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 .
+#
+##############################################################################
+import tools
+from osv import fields, osv
+
+class campaign_analysis(osv.osv): #{{{
+ _name = "campaign.analysis"
+ _description = "Campaign Analysis"
+ _auto = False
+ _rec_name = 'date'
+
+ def _total_cost(self, cr, uid, ids, field_name, arg, context={}):
+
+ """ @param cr: the current row, from the database cursor,
+ @param uid: the current user’s ID for security checks,
+ @param ids: List of case and section Data’s IDs
+ @param context: A standard dictionary for contextual values """
+ result = {}
+ for ca_obj in self.browse(cr, uid, ids, context):
+ wi_ids = self.pool.get('marketing.campaign.workitem').search(cr, uid,
+ [('segment_id.campaign_id', '=', ca_obj.campaign_id.id)])
+ total_cost = ca_obj.activity_id.variable_cost + \
+ (ca_obj.campaign_id.fixed_cost / len(wi_ids))
+ result[ca_obj.id] = total_cost
+ return result
+
+ _columns = {
+ 'year': fields.char('Year', size=4, readonly=True),
+ 'month':fields.selection([('01','January'), ('02','February'),
+ ('03','March'), ('04','April'),('05','May'), ('06','June'),
+ ('07','July'), ('08','August'), ('09','September'),
+ ('10','October'), ('11','November'), ('12','December')],
+ 'Month', readonly=True),
+ 'date': fields.date('Date', readonly=True),
+ 'campaign_id': fields.many2one('marketing.campaign', 'Campaign',
+ readonly=True),
+ 'activity_id': fields.many2one('marketing.campaign.activity', 'Activity',
+ readonly=True),
+ 'segment_id': fields.many2one('marketing.campaign.segment', 'Segment',
+ readonly=True),
+ 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True),
+ 'country_id': fields.related('partner_id','address', 'country_id',
+ type='many2one', relation='res.country',string='Country'),
+ 'total_cost' : fields.function(_total_cost, string='Cost', method=True,
+ type="float" ),
+ 'revenue': fields.float('Revenue',readonly=True),
+# 'case_id': fields.many2one('crm.lead', 'Opportunity', readonly=True),
+# 'count' : fields.integer('Count', readonly=True),
+ }
+
+ def init(self, cr):
+ tools.drop_view_if_exists(cr, 'campaign_analysis')
+
+ cr.execute("""
+ create or replace view campaign_analysis as (
+ select
+ wi.id as id,
+ to_char(wi.date, 'YYYY') as year,
+ to_char(wi.date, 'MM') as month,
+ wi.date as date,
+ s.campaign_id as campaign_id,
+ wi.activity_id as activity_id,
+ wi.segment_id as segment_id,
+ wi.partner_id as partner_id ,
+ act.revenue as revenue
+ from
+ marketing_campaign_workitem wi
+ left join res_partner p on (p.id=wi.partner_id)
+ left join marketing_campaign_segment s on (s.id=wi.segment_id)
+ left join marketing_campaign_activity act on (act.id= wi.activity_id)
+ group by
+ to_char(wi.date, 'YYYY'),to_char(wi.date, 'MM'),
+ s.campaign_id,wi.activity_id,wi.segment_id,wi.partner_id,revenue,
+ wi.date,wi.id
+ )
+ """)
+
+campaign_analysis() #}}}
diff --git a/addons/marketing_campaign/report/campaign_analysis_view.xml b/addons/marketing_campaign/report/campaign_analysis_view.xml
new file mode 100644
index 00000000000..b66ec89ca6b
--- /dev/null
+++ b/addons/marketing_campaign/report/campaign_analysis_view.xml
@@ -0,0 +1,75 @@
+
+
+
+
+ campaign.analysis.tree
+ campaign.analysis
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ campaign.analysis.search
+ campaign.analysis
+ search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Marketing Report
+ campaign.analysis
+ form
+ tree
+ {'group_by': [], 'search_default_Campaign': 1, 'search_default_Segment': 1}
+
+
+
+
+
+
+
diff --git a/addons/membership/membership.py b/addons/membership/membership.py
index 8c15c652335..23f9cd19275 100644
--- a/addons/membership/membership.py
+++ b/addons/membership/membership.py
@@ -28,7 +28,7 @@ import decimal_precision as dp
STATE = [
('none', 'Non Member'),
- ('canceled', 'Canceled Member'),
+ ('canceled', 'Cancelled Member'),
('old', 'Old Member'),
('waiting', 'Waiting Member'),
('invoiced', 'Invoiced Member'),
@@ -162,8 +162,9 @@ class membership_line(osv.osv):
res = {}
for line in self.browse(cr, uid, ids):
cr.execute('''
- SELECT i.state FROM
- account_invoice i WHERE
+ SELECT i.state, i.id FROM
+ account_invoice i
+ WHERE
i.id = (
SELECT l.invoice_id FROM
account_invoice_line l WHERE
@@ -186,6 +187,10 @@ class membership_line(osv.osv):
state = 'invoiced'
elif istate == 'paid':
state = 'paid'
+ inv = self.pool.get('account.invoice').browse(cr, uid, fetched[1])
+ for payment in inv.payment_ids:
+ if payment.invoice and payment.invoice.type == 'out_refund':
+ state = 'canceled'
elif istate == 'cancel':
state = 'canceled'
res[line.id] = state
@@ -253,11 +258,15 @@ class Partner(osv.osv):
s = 4
if partner_data.member_lines:
for mline in partner_data.member_lines:
- if mline.date_from <= today and mline.date_to >= today:
+ if mline.date_to >= today:
if mline.account_invoice_line and mline.account_invoice_line.invoice_id:
mstate = mline.account_invoice_line.invoice_id.state
if mstate == 'paid':
s = 0
+ inv = mline.account_invoice_line.invoice_id
+ for payment in inv.payment_ids:
+ if payment.invoice.type == 'out_refund':
+ s = 2
break
elif mstate == 'open' and s!=0:
s = 1
@@ -332,14 +341,12 @@ class Partner(osv.osv):
'''Return the cancel date of membership'''
res = {}
member_line_obj = self.pool.get('membership.membership_line')
- for partner_id in ids:
- line_id = member_line_obj.search(cr, uid, [('partner', '=', partner_id)],
- limit=1, order='date_cancel')
- if line_id:
- res[partner_id] = member_line_obj.read(cr, uid, line_id[0],
- ['date_cancel'])['date_cancel']
- else:
- res[partner_id] = False
+ for partner in self.browse(cr, uid, ids, context=context):
+ res[partner.id] = False
+ if partner.membership_state == 'canceled':
+ line_id = member_line_obj.search(cr, uid, [('partner', '=', partner.id)],limit=1, order='date_cancel')
+ if line_id:
+ res[partner.id] = member_line_obj.read(cr, uid, line_id[0],['date_cancel'])['date_cancel']
return res
def _get_partners(self, cr, uid, ids, context={}):
@@ -349,20 +356,23 @@ class Partner(osv.osv):
ids+=ids2
return ids
+ def __get_membership_state(self, *args, **kwargs):
+ return self._membership_state(*args, **kwargs)
+
_columns = {
'associate_member': fields.many2one('res.partner', 'Associate member'),
'member_lines': fields.one2many('membership.membership_line', 'partner', 'Membership'),
'free_member': fields.boolean('Free member'),
'membership_amount': fields.float(
- 'Membership amount', digites=(16, 2),
+ 'Membership amount', digits=(16, 2),
help='The price negociated by the partner'),
'membership_state': fields.function(
- _membership_state, method = True,
+ __get_membership_state, method = True,
string = 'Current membership state', type = 'selection',
selection = STATE ,store = {
'account.invoice':(_get_invoice_partner,['state'], 10),
'membership.membership_line':(_get_partner_id,['state'], 10),
- 'res.partner':(_get_partners, ['free_member', 'membership_state'], 10)
+ 'res.partner':(_get_partners, ['free_member', 'membership_state','associate_member'], 10)
}
),
'membership_start': fields.function(
@@ -388,7 +398,7 @@ class Partner(osv.osv):
_membership_cancel, method = True,
string = 'Cancel membership date', type='date',
store = {
- 'account.invoice':(_get_invoice_partner,['state'], 10),
+ 'account.invoice':(_get_invoice_partner,['state'], 11),
'membership.membership_line':(_get_partner_id,['state'], 10),
'res.partner':(lambda self,cr,uid,ids,c={}:ids, ['free_member'], 10)
}
@@ -412,7 +422,16 @@ class Partner(osv.osv):
_constraints = [
(_check_recursion, 'Error ! You can not create recursive associated members.', ['associate_member'])
]
-
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ if default is None:
+ default = {}
+ if context is None:
+ context = {}
+ default = default.copy()
+ default['member_lines'] = []
+ return super(Partner, self).copy(cr, uid, id, default, context)
+
Partner()
class product_template(osv.osv):
@@ -439,8 +458,6 @@ class Product(osv.osv):
'''Product'''
_inherit = 'product.product'
- _description = 'product.product'
-
_columns = {
'membership': fields.boolean('Membership', help='Specify if this product is a membership product'),
'membership_date_from': fields.date('Date from'),
@@ -547,80 +564,6 @@ class ReportPartnerMemberYear(osv.osv):
ReportPartnerMemberYear()
-class ReportPartnerMemberYearNew(osv.osv):
- '''New Membership by Years'''
-
- _name = 'report.partner_member.year_new'
- _description = __doc__
- _auto = False
- _rec_name = 'year'
-
- _columns = {
- 'year': fields.char('Year', size='4', readonly=True, select=1),
- 'canceled_number': fields.integer('Canceled', readonly=True),
- 'waiting_number': fields.integer('Waiting', readonly=True),
- 'invoiced_number': fields.integer('Invoiced', readonly=True),
- 'paid_number': fields.integer('Paid', readonly=True),
- 'canceled_amount': fields.float('Canceled', digits=(16, 2), readonly=True),
- 'waiting_amount': fields.float('Waiting', digits=(16, 2), readonly=True),
- 'invoiced_amount': fields.float('Invoiced', digits=(16, 2), readonly=True),
- 'paid_amount': fields.float('Paid', digits=(16, 2), readonly=True),
- 'currency': fields.many2one('res.currency', 'Currency', readonly=True,
- select=2),
- }
-
- def init(self, cr):
- '''Create the view'''
- cr.execute("""
- CREATE OR REPLACE VIEW report_partner_member_year AS (
- SELECT
- MIN(id) AS id,
- COUNT(ncanceled) as canceled_number,
- COUNT(npaid) as paid_number,
- COUNT(ninvoiced) as invoiced_number,
- COUNT(nwaiting) as waiting_number,
- SUM(acanceled) as canceled_amount,
- SUM(apaid) as paid_amount,
- SUM(ainvoiced) as invoiced_amount,
- SUM(awaiting) as waiting_amount,
- year,
- currency
- FROM (SELECT
- CASE WHEN ai.state = 'cancel' THEN ml.id END AS ncanceled,
- CASE WHEN ai.state = 'paid' THEN ml.id END AS npaid,
- CASE WHEN ai.state = 'open' THEN ml.id END AS ninvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN ml.id END AS nwaiting,
- CASE WHEN ai.state = 'cancel'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS acanceled,
- CASE WHEN ai.state = 'paid'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS apaid,
- CASE WHEN ai.state = 'open'
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS ainvoiced,
- CASE WHEN (ai.state = 'draft' OR ai.state = 'proforma')
- THEN SUM(ail.price_unit * ail.quantity * (1 - ail.discount / 100))
- ELSE 0 END AS awaiting,
- TO_CHAR(ml.date_from, 'YYYY') AS year,
- ai.currency_id AS currency,
- MIN(ml.id) AS id
- FROM membership_membership_line ml
- JOIN (account_invoice_line ail
- LEFT JOIN account_invoice ai
- ON (ail.invoice_id = ai.id))
- ON (ml.account_invoice_line = ail.id)
- JOIN res_partner p
- ON (ml.partner = p.id)
- GROUP BY TO_CHAR(ml.date_from, 'YYYY'), ai.state,
- ai.currency_id, ml.id) AS foo
- GROUP BY year, currency)
- """)
-
-ReportPartnerMemberYear()
-
-
class ReportPartnerMemberYearNew(osv.osv):
'''New Membership by Years'''
@@ -703,28 +646,30 @@ ReportPartnerMemberYearNew()
class account_invoice_line(osv.osv):
_inherit='account.invoice.line'
+
def write(self, cr, uid, ids, vals, context=None):
if not context:
context={}
res = super(account_invoice_line, self).write(cr, uid, ids, vals, context=context)
member_line_obj = self.pool.get('membership.membership_line')
for line in self.browse(cr, uid, ids):
- ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
- if line.product_id and line.product_id.membership and not ml_ids:
- # Product line has changed to a membership product
- date_from = line.product_id.membership_date_from
- date_to = line.product_id.membership_date_to
- if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to:
- date_from = line.invoice_id.date_invoice
- line_id = member_line_obj.create(cr, uid, {
- 'partner': line.invoice_id.partner_id.id,
- 'date_from': date_from,
- 'date_to': date_to,
- 'account_invoice_line': line.id,
- })
- if line.product_id and not line.product_id.membership and ml_ids:
- # Product line has changed to a non membership product
- member_line_obj.unlink(cr, uid, ml_ids, context=context)
+ if line.invoice_id.type == 'out_invoice':
+ ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
+ if line.product_id and line.product_id.membership and not ml_ids:
+ # Product line has changed to a membership product
+ date_from = line.product_id.membership_date_from
+ date_to = line.product_id.membership_date_to
+ if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to:
+ date_from = line.invoice_id.date_invoice
+ line_id = member_line_obj.create(cr, uid, {
+ 'partner': line.invoice_id.partner_id.id,
+ 'date_from': date_from,
+ 'date_to': date_to,
+ 'account_invoice_line': line.id,
+ })
+ if line.product_id and not line.product_id.membership and ml_ids:
+ # Product line has changed to a non membership product
+ member_line_obj.unlink(cr, uid, ml_ids, context=context)
return res
def unlink(self, cr, uid, ids, context=None):
@@ -739,20 +684,21 @@ class account_invoice_line(osv.osv):
def create(self, cr, uid, vals, context={}):
result = super(account_invoice_line, self).create(cr, uid, vals, context)
line = self.browse(cr, uid, result)
- member_line_obj = self.pool.get('membership.membership_line')
- ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
- if line.product_id and line.product_id.membership and not ml_ids:
- # Product line is a membership product
- date_from = line.product_id.membership_date_from
- date_to = line.product_id.membership_date_to
- if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to:
- date_from = line.invoice_id.date_invoice
- line_id = member_line_obj.create(cr, uid, {
- 'partner': line.invoice_id.partner_id and line.invoice_id.partner_id.id or False,
- 'date_from': date_from,
- 'date_to': date_to,
- 'account_invoice_line': line.id,
- })
+ if line.invoice_id.type == 'out_invoice':
+ member_line_obj = self.pool.get('membership.membership_line')
+ ml_ids = member_line_obj.search(cr, uid, [('account_invoice_line','=',line.id)])
+ if line.product_id and line.product_id.membership and not ml_ids:
+ # Product line is a membership product
+ date_from = line.product_id.membership_date_from
+ date_to = line.product_id.membership_date_to
+ if line.invoice_id.date_invoice > date_from and line.invoice_id.date_invoice < date_to:
+ date_from = line.invoice_id.date_invoice
+ line_id = member_line_obj.create(cr, uid, {
+ 'partner': line.invoice_id.partner_id and line.invoice_id.partner_id.id or False,
+ 'date_from': date_from,
+ 'date_to': date_to,
+ 'account_invoice_line': line.id,
+ })
return result
account_invoice_line()
diff --git a/addons/membership/membership_view.xml b/addons/membership/membership_view.xml
index b459ab1eb9d..00dde266b4b 100644
--- a/addons/membership/membership_view.xml
+++ b/addons/membership/membership_view.xml
@@ -53,8 +53,8 @@
-
-
+
+
diff --git a/addons/membership/security/ir.model.access.csv b/addons/membership/security/ir.model.access.csv
index de35a7c8adc..cb722db567a 100644
--- a/addons/membership/security/ir.model.access.csv
+++ b/addons/membership/security/ir.model.access.csv
@@ -3,3 +3,5 @@
"access_membership_membership_line","membership.membership_line","model_membership_membership_line",,1,0,0,0
"access_report_partner_member_year","report.partner_member.year","model_report_partner_member_year","base.group_partner_manager",1,0,0,0
"access_report_partner_member_year_new","report.partner_member.year_new","model_report_partner_member_year_new","base.group_partner_manager",1,0,0,0
+"access_membership_invoice","membership.invoice","model_membership_invoice",,1,1,1,1
+"access_membership_unpaid_invoice","membership.unpaid.invoice","model_membership_unpaid_invoice",,1,0,0,0
diff --git a/addons/mrp/i18n/fr.po b/addons/mrp/i18n/fr.po
index 34e0d2ef7aa..5db458c1c57 100644
--- a/addons/mrp/i18n/fr.po
+++ b/addons/mrp/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.1\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-03-30 14:06+0000\n"
-"Last-Translator: TeMPO \n"
+"PO-Revision-Date: 2010-05-21 21:09+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp
@@ -388,7 +388,7 @@ msgstr "Processus des Approvisionnements"
#. module: mrp
#: field:mrp.production,date_planned_date:0
msgid "Scheduled Date"
-msgstr ""
+msgstr "Date planifiée"
#. module: mrp
#: selection:mrp.procurement,priority:0
@@ -1179,7 +1179,7 @@ msgstr "Approvisionnement"
#. module: mrp
#: model:ir.actions.wizard,name:mrp.product_procurement_wizard
msgid "Procurement Request"
-msgstr ""
+msgstr "Demande d'approvisionnement"
#. module: mrp
#: model:ir.actions.wizard,name:mrp.wizard_price
@@ -1680,7 +1680,7 @@ msgstr "Arrondi de produit"
#. module: mrp
#: field:mrp.production.workcenter.line,name:0
msgid "Work Order"
-msgstr ""
+msgstr "Ordre de fabrication"
#. module: mrp
#: view:mrp.production:0
@@ -1995,7 +1995,7 @@ msgstr ""
#. module: mrp
#: field:mrp.production,date_planned_end:0
msgid "Scheduled End"
-msgstr ""
+msgstr "Planification terminée"
#. module: mrp
#: selection:mrp.bom,method:0
diff --git a/addons/mrp/i18n/pl.po b/addons/mrp/i18n/pl.po
index 59e69651b19..130d6a803dc 100644
--- a/addons/mrp/i18n/pl.po
+++ b/addons/mrp/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-17 07:35+0000\n"
-"Last-Translator: Piotr Strębski \n"
+"PO-Revision-Date: 2010-05-21 08:19+0000\n"
+"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:58+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: mrp
@@ -105,7 +105,7 @@ msgstr "Konfiguracja"
#. module: mrp
#: field:mrp.production,name:0
msgid "Reference"
-msgstr "Odnośnik"
+msgstr "Numer"
#. module: mrp
#: view:mrp.production:0
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index d5cea81933b..966572f772c 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -94,7 +94,7 @@ class mrp_routing_workcenter(osv.osv):
Defines working cycles and hours of a workcenter using routings.
"""
_name = 'mrp.routing.workcenter'
- _description = 'Routing workcenter usage'
+ _description = 'Workcenter Usage'
_columns = {
'workcenter_id': fields.many2one('mrp.workcenter', 'Work Center', required=True),
'name': fields.char('Name', size=64, required=True),
@@ -118,7 +118,7 @@ class mrp_bom(osv.osv):
Defines bills of material for a product.
"""
_name = 'mrp.bom'
- _description = 'Bills of Material'
+ _description = 'Bill of Material'
def _child_compute(self, cr, uid, ids, name, arg, context={}):
""" Gets child bom.
@@ -314,7 +314,6 @@ class mrp_bom(osv.osv):
d, m = divmod(factor, wc_use.workcenter_id.capacity_per_cycle)
mult = (d + (m and 1.0 or 0.0))
cycle = mult * wc_use.cycle_nbr
- print mult, wc_use.hour_nbr, wc.time_start, wc.time_stop, cycle
result2.append({
'name': bom.routing_id.name,
'workcenter_id': wc.id,
@@ -351,8 +350,7 @@ mrp_bom()
class mrp_bom_revision(osv.osv):
_name = 'mrp.bom.revision'
- _description = 'Bill of material revisions'
-
+ _description = 'Bill of Material Revision'
_columns = {
'name': fields.char('Modification name', size=64, required=True),
'description': fields.text('Description'),
@@ -419,8 +417,9 @@ class mrp_production(osv.osv):
Production Orders / Manufacturing Orders
"""
_name = 'mrp.production'
- _description = 'Production'
- _date_name = 'date_planned'
+ _description = 'Manufacturing Order'
+ _date_name = 'date_planned'
+ _log_create = True
def _production_calc(self, cr, uid, ids, prop, unknow_none, context={}):
""" Calculates total hours and total no. of cycles for a production order.
@@ -648,6 +647,9 @@ class mrp_production(osv.osv):
""" Changes the production state to Ready and location id of stock move.
@return: True
"""
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Manufacturing Order ') + " '" + name + "' "+ _("is ready to produce.")
+ self.log(cr, uid, id, message)
move_obj = self.pool.get('stock.move')
self.write(cr, uid, ids, {'state': 'ready'})
for production in self.browse(cr, uid, ids):
@@ -934,7 +936,7 @@ mrp_production()
class mrp_production_workcenter_line(osv.osv):
_name = 'mrp.production.workcenter.line'
- _description = 'Work Orders'
+ _description = 'Work Order'
_order = 'sequence'
_columns = {
@@ -954,8 +956,7 @@ mrp_production_workcenter_line()
class mrp_production_product_line(osv.osv):
_name = 'mrp.production.product.line'
- _description = 'Production scheduled products'
-
+ _description = 'Production Scheduled Product'
_columns = {
'name': fields.char('Name', size=64, required=True),
'product_id': fields.many2one('product.product', 'Product', required=True),
diff --git a/addons/mrp/mrp_demo.xml b/addons/mrp/mrp_demo.xml
index 8962eb6e1c8..581cc04c05e 100644
--- a/addons/mrp/mrp_demo.xml
+++ b/addons/mrp/mrp_demo.xml
@@ -170,7 +170,7 @@
1.0normal
-
+
@@ -179,21 +179,21 @@
1.0
-
+ Assembly Medium PC81.0
-
+ Assembly Customizable PC111.0
-
+ HDD on demand
@@ -201,7 +201,7 @@
1.0phantom
-
+ RAM on demand
@@ -209,7 +209,7 @@
1.0phantom
-
+ HDD on demand
@@ -217,7 +217,7 @@
1.0phantom
-
+ HDD on demand
@@ -225,7 +225,7 @@
1.0phantom
-
+ HDD Seagate
@@ -233,7 +233,7 @@
1.0normal
-
+ Assembly Basic PC
@@ -242,14 +242,14 @@
1.0normal
-
+ Complete PC with peripherals331.0
-
+ RAM on demand
@@ -257,7 +257,7 @@
1.0phantom
-
+
@@ -265,7 +265,7 @@
381.0
-
+
@@ -276,7 +276,7 @@
1.0normal
-
+ Keyboard
@@ -284,7 +284,7 @@
1.0
-
+ Mouse
@@ -292,7 +292,7 @@
1.0
-
+ Moon PC
@@ -300,7 +300,7 @@
1.0
-
+ Mainboard ASUStek A7N8X
@@ -308,7 +308,7 @@
1.0
-
+ Processor AMD Athlon 2200+
@@ -316,7 +316,7 @@
1.0
-
+ Regular Case Fan
@@ -324,7 +324,7 @@
1.0
-
+ DDR 256MB PC333
@@ -332,7 +332,7 @@
1.0
-
+ DDR 512MB PC400
@@ -340,7 +340,7 @@
1.0
-
+ DDR 1024MB PC400
@@ -348,7 +348,7 @@
1.0
-
+ HDD Seagate 7200.8 80GB
@@ -356,7 +356,7 @@
1.0
-
+ HDD Seagate 7200.8 120GB
@@ -365,7 +365,7 @@
1.0normal
-
+ RAM on demand
@@ -373,7 +373,7 @@
1.0
-
+ HDD on demand
@@ -381,7 +381,7 @@
1.0
-
+ ATX middle-size case
@@ -390,7 +390,7 @@
1.0normal
-
+ Processor on demand
@@ -399,7 +399,7 @@
1.0normal
-
+ ATX Middle-size case
@@ -408,7 +408,7 @@
1.0normal
-
+ HDD Seagate 7200.8 80GB
@@ -417,7 +417,7 @@
1.0normal
-
+ High speed processor config
@@ -426,7 +426,7 @@
1.0normal
-
+ HDD Seagate 7200.8 120GB
@@ -435,7 +435,7 @@
1.0normal
-
+ Regular processor config
@@ -444,7 +444,7 @@
1.0normal
-
+ ATX middle-size case
@@ -453,7 +453,7 @@
1.0normal
-
+ HDD Seagate 7200.8 120GB
@@ -462,7 +462,7 @@
1.0normal
-
+ processor
@@ -471,7 +471,7 @@
1.0normal
-
+ mainboard
@@ -480,7 +480,7 @@
1.0normal
-
+ fan
@@ -489,7 +489,7 @@
1.0normal
-
+ RAM
@@ -498,7 +498,7 @@
1.0normal
-
+ Regular processor config
@@ -507,7 +507,7 @@
1.0normal
-
+ HDD Seagate 7200.8 80GB
@@ -516,7 +516,7 @@
1.0normal
-
+ ATX Middle-size case
@@ -525,7 +525,7 @@
1.0normal
-
+
@@ -536,7 +536,7 @@
1.0normal
-
+ Mouse
@@ -544,7 +544,7 @@
1.0
-
+ Keyboard
@@ -552,7 +552,7 @@
1.0
-
+
diff --git a/addons/mrp/mrp_order_point.xml b/addons/mrp/mrp_order_point.xml
index ba2e56e8515..433078263c1 100644
--- a/addons/mrp/mrp_order_point.xml
+++ b/addons/mrp/mrp_order_point.xml
@@ -9,7 +9,7 @@
5.0
-
+
@@ -17,7 +17,7 @@
10.0
-
+
@@ -25,7 +25,7 @@
10.0
-
+
@@ -33,7 +33,7 @@
10.0
-
+
@@ -41,7 +41,7 @@
3.0
-
+
@@ -49,7 +49,7 @@
10.0
-
+
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index 1c7dce6e30b..02841b64b03 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -166,7 +166,7 @@
-
+
diff --git a/addons/mrp/mrp_workflow.xml b/addons/mrp/mrp_workflow.xml
index 791c376ef92..a9c83b23b7e 100644
--- a/addons/mrp/mrp_workflow.xml
+++ b/addons/mrp/mrp_workflow.xml
@@ -113,8 +113,9 @@
button_cancel
-
+
+
produce
@@ -122,41 +123,9 @@
action_produce_assign_product()
-
-
- produce_check
-
-
-
- produce_service
- function
- action_produce_assign_service()
-
-
-
-
-
- check_produce()
-
-
-
-
- not check_product()
-
-
-
-
-
- subflow.cancel
-
-
-
-
-
-
-
+ check_product()
diff --git a/addons/mrp/report/mrp_production_order.py b/addons/mrp/report/mrp_production_order.py
index 7f48b111d43..d754d6a50ad 100644
--- a/addons/mrp/report/mrp_production_order.py
+++ b/addons/mrp/report/mrp_production_order.py
@@ -27,12 +27,16 @@ class mrp_production_order(osv.osv):
_description = "Production Order Report"
_auto = False
_columns = {
- 'name': fields.char('Year',size=64,required=False, readonly=True),
+ 'year': fields.char('Year',size=64,readonly=True),
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
+ 'day': fields.char('Day',size=64,readonly=True),
'origin': fields.char('Source Document', size=64),
'nbr': fields.integer('# of Orders', readonly=True),
- 'product_id': fields.many2one('product.product', 'Product', readonly=True, domain=[('type','<>','service')]),
+ 'products_to_consume': fields.integer('Products to Consume', readonly=True),
+ 'consumed_products': fields.integer('Consumed Products', readonly=True),
+ 'date': fields.date('Date', readonly=True),
+ 'product_id': fields.many2one('product.product', 'Product', readonly=True),
'product_qty': fields.float('Product Qty', readonly=True),
'state': fields.selection([('draft','Draft'),
('picking_except', 'Picking Exception'),
@@ -43,14 +47,15 @@ class mrp_production_order(osv.osv):
('done','Done')],
'State', readonly=True),
'date_planned':fields.date('Scheduled Date'),
- 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', required=True),
+ 'location_src_id': fields.many2one('stock.location', 'Raw Materials Location', readonly=True),
'date_start': fields.datetime('Start Date',readonly=True),
'date_finnished': fields.datetime('End Date',readonly=True),
- 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', required=True),
+ 'location_dest_id': fields.many2one('stock.location', 'Finished Products Location', readonly=True),
'company_id': fields.many2one('res.company','Company',readonly=True),
- 'bom_id': fields.many2one('mrp.bom', 'Bill of Material', domain=[('bom_id','=',False)],readonly=True),
- 'routing_id': fields.many2one('mrp.routing', string='Routing', on_delete='set null',readonly=True),
+ 'bom_id': fields.many2one('mrp.bom', 'Bill of Material',readonly=True),
+ 'routing_id': fields.many2one('mrp.routing', string='Routing',readonly=True),
'picking_id': fields.many2one('stock.picking', 'Picking list', readonly=True),
+ 'product_uom': fields.many2one('product.uom', 'Product UOM', readonly=True),
'priority': fields.selection([('0','Not urgent'),
('1','Normal'),
('2','Urgent'),
@@ -65,12 +70,27 @@ class mrp_production_order(osv.osv):
create or replace view mrp_production_order as (
select
min(l.id) as id,
- to_char(s.create_date, 'YYYY') as name,
+ to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY') as date,
+ to_char(s.create_date, 'YYYY') as year,
to_char(s.create_date, 'MM') as month,
+ to_char(s.create_date, 'YYYY-MM-DD') as day,
l.product_id as product_id,
+ l.product_uom,
sum(l.product_qty * u.factor) as product_qty,
s.company_id as company_id,
count(*) as nbr,
+ (select sum(sm.product_qty) from stock_move as sm
+ left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
+ left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
+ where sm.product_id=ll.product_id and ll.id=l.id
+ and sm.state not in ('done','cancel')
+ group by sm.product_id) as products_to_consume,
+ (select sum(sm.product_qty)/2 from stock_move as sm
+ left join mrp_production_move_ids as mv on (sm.id=mv.move_id)
+ left join mrp_production_product_line as ll on (ll.production_id=mv.production_id)
+ where sm.product_id=ll.product_id and ll.id=l.id
+ and sm.state in ('done','cancel')
+ group by sm.product_id) as consumed_products,
s.location_src_id,
s.location_dest_id,
s.bom_id,
@@ -82,16 +102,18 @@ class mrp_production_order(osv.osv):
s.origin,
s.priority,
s.state
- from
- mrp_production_product_line l
- left join
- mrp_production s on (s.id=l.production_id)
- left join product_uom u on (u.id=l.product_uom)
+ from mrp_production_product_line l
+ left join mrp_production s on (s.id=l.production_id)
+ left join product_uom u on (u.id=l.product_uom)
group by
to_char(s.create_date, 'YYYY'),
to_char(s.create_date, 'MM'),
+ to_char(s.create_date, 'YYYY-MM-DD'),
+ to_date(to_char(s.create_date, 'MM-dd-YYYY'),'MM-dd-YYYY'),
l.product_id,
l.product_uom,
+ s.id,
+ l.id,
s.bom_id,
s.routing_id,
s.picking_id,
diff --git a/addons/mrp/report/mrp_production_order_view.xml b/addons/mrp/report/mrp_production_order_view.xml
index 1ae2e6b32bb..c9c7a3d4400 100644
--- a/addons/mrp/report/mrp_production_order_view.xml
+++ b/addons/mrp/report/mrp_production_order_view.xml
@@ -21,7 +21,7 @@
-
+
@@ -48,8 +48,8 @@
-
-
+
+
@@ -89,7 +89,7 @@
-
+
@@ -101,8 +101,8 @@
tree,graph
- {'search_default_Product': 1,'search_default_this_year':1,'search_default_this_month':1}
-
+ {'search_default_Product': 1}
+
diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py
index dcb7d4573c1..9bcc92e5c81 100644
--- a/addons/mrp/stock.py
+++ b/addons/mrp/stock.py
@@ -27,6 +27,77 @@ import ir
import netsvc
import time
+
+class stock_warehouse_orderpoint(osv.osv):
+ """
+ Defines Minimum stock rules.
+ """
+ _name = "stock.warehouse.orderpoint"
+ _description = "Minimum Inventory Rule"
+
+ _columns = {
+ 'name': fields.char('Name', size=32, required=True),
+ 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the orderpoint without removing it."),
+ 'logic': fields.selection([('max','Order to Max'),('price','Best price (not yet active!)')], 'Reordering Mode', required=True),
+ 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', required=True, ondelete="cascade"),
+ 'location_id': fields.many2one('stock.location', 'Location', required=True, ondelete="cascade"),
+ 'product_id': fields.many2one('product.product', 'Product', required=True, ondelete='cascade', domain=[('type','=','product')]),
+ 'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
+ 'product_min_qty': fields.float('Min Quantity', required=True,
+ help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
+ "a procurement to bring the virtual stock to the Max Quantity."),
+ 'product_max_qty': fields.float('Max Quantity', required=True,
+ help="When the virtual stock goes belong the Min Quantity, Open ERP generates "\
+ "a procurement to bring the virtual stock to the Max Quantity."),
+ 'qty_multiple': fields.integer('Qty Multiple', required=True,
+ help="The procurement quantity will by rounded up to this multiple."),
+ 'procurement_id': fields.many2one('mrp.procurement', 'Latest procurement', ondelete="set null"),
+ 'company_id': fields.many2one('res.company','Company',required=True),
+ }
+ _defaults = {
+ 'active': lambda *a: 1,
+ 'logic': lambda *a: 'max',
+ 'qty_multiple': lambda *a: 1,
+ 'name': lambda x,y,z,c: x.pool.get('ir.sequence').get(y,z,'mrp.warehouse.orderpoint') or '',
+ 'product_uom': lambda sel, cr, uid, context: context.get('product_uom', False),
+ 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.warehouse.orderpoint', context=c)
+ }
+ _sql_constraints = [
+ ('qty_multiple_check', 'CHECK( qty_multiple > 0 )', _('Qty Multiple must be greater than zero.')),
+ ]
+
+ def onchange_warehouse_id(self, cr, uid, ids, warehouse_id, context={}):
+ """ Finds location id for changed warehouse.
+ @param warehouse_id: Changed id of warehouse.
+ @return: Dictionary of values.
+ """
+ if warehouse_id:
+ w = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context)
+ v = {'location_id': w.lot_stock_id.id}
+ return {'value': v}
+ return {}
+
+ def onchange_product_id(self, cr, uid, ids, product_id, context={}):
+ """ Finds UoM for changed product.
+ @param product_id: Changed id of product.
+ @return: Dictionary of values.
+ """
+ if product_id:
+ prod = self.pool.get('product.product').browse(cr,uid,product_id)
+ v = {'product_uom': prod.uom_id.id}
+ return {'value': v}
+ return {}
+
+ def copy(self, cr, uid, id, default=None,context={}):
+ if not default:
+ default = {}
+ default.update({
+ 'name': self.pool.get('ir.sequence').get(cr, uid, 'mrp.warehouse.orderpoint') or '',
+ })
+ return super(stock_warehouse_orderpoint, self).copy(cr, uid, id, default, context)
+
+stock_warehouse_orderpoint()
+
class StockMove(osv.osv):
_inherit = 'stock.move'
diff --git a/addons/mrp/test/mrp_phantom_bom.yml b/addons/mrp/test/mrp_phantom_bom.yml
index 5475d54ffd4..c95ab26dd93 100644
--- a/addons/mrp/test/mrp_phantom_bom.yml
+++ b/addons/mrp/test/mrp_phantom_bom.yml
@@ -9,6 +9,8 @@
factor: 1.0
name: Litre
rounding: 0.01
+-
+ I create record for product Orange Juice.
-
!record {model: product.product, id: product_product_orangejuice0}:
categ_id: product.cat1
@@ -18,6 +20,8 @@
type: product
uom_id: product_uom_litre0
uom_po_id: product_uom_litre0
+-
+ I create record for product Orange.
-
!record {model: product.product, id: product_product_orange0}:
categ_id: product.cat1
@@ -31,6 +35,8 @@
type: product
uom_id: product.product_uom_kgm
uom_po_id: product.product_uom_kgm
+-
+ I create record for product Sugar.
-
!record {model: product.product, id: product_product_sugar0}:
categ_id: product.cat1
@@ -44,6 +50,8 @@
type: product
uom_id: product.product_uom_kgm
uom_po_id: product.product_uom_kgm
+-
+ I create record for product Water.
-
!record {model: product.product, id: product_product_water0}:
categ_id: product.cat1
@@ -54,7 +62,7 @@
uom_id: product_uom_litre0
uom_po_id: product_uom_litre0
-
- I define the BoM to produce an orange juice
+ I define the BoM to produce an orange juice.
-
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
company_id: base.main_company
@@ -64,6 +72,8 @@
product_qty: 1.0
product_uom: product_uom_litre0
type: phantom
+-
+ I create bom lines for BoM for Orange Juice.
-
!record {model: mrp.bom, id: mrp_bom_orangejuice0}:
bom_lines:
@@ -92,7 +102,7 @@
product_uom: product_uom_litre0
type: normal
-
- I define Minimum stock rules for my stockable products orange and sugar
+ I define Minimum stock rules for my stockable product "Orange".
-
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op0}:
company_id: base.main_company
@@ -105,6 +115,8 @@
product_uom: product.product_uom_kgm
qty_multiple: 1
warehouse_id: stock.warehouse0
+-
+ I define Minimum stock rules for my stockable product "Sugar".
-
!record {model: stock.warehouse.orderpoint, id: stock_warehouse_orderpoint_op1}:
company_id: base.main_company
@@ -177,14 +189,14 @@
-
!function {model: mrp.procurement, name: run_scheduler}:
- model: mrp.procurement
- search: "[('origin','=',':MO/00002')]"
+ search: "[('state','!=','cofirmed')]"
-
I am checking Internal picking. I see one picking for Orange juice and its
stock moves for Oranges, Sugar and Water made correctly.
-
!python {model: stock.picking}: |
from tools.translate import _
- pick_ids = self.search(cr, uid, [('origin','=',':MO/00002'),('type','=','internal')])
+ pick_ids = self.search(cr, uid, [('type','=','internal')])
assert pick_ids, _('No Internal Pickings!')
-
According to minimum stock rules. I have 2 purchase orders for
@@ -220,11 +232,15 @@
assert pick_ids, _('No Incoming Shipments found!')
-
I receive both the products. My incoming pickings are done.
+-
+ I create record for the incoming picking wizard.
-
!record {model: stock.partial.picking, id: stock_partial_picking0}:
date: '2010-04-30 16:53:36'
partner_id: base.res_partner_asus
address_id: base.res_partner_address_tang
+-
+ I make my pickings done.
-
!python {model: stock.partial.picking}: |
pick_obj = self.pool.get('stock.picking')
diff --git a/addons/mrp/test/mrp_procurement.yml b/addons/mrp/test/mrp_procurement.yml
index 37d0de5c5a9..c52fa4a339b 100644
--- a/addons/mrp/test/mrp_procurement.yml
+++ b/addons/mrp/test/mrp_procurement.yml
@@ -4,7 +4,7 @@
-
I am creating products.
-
- Creating a product.product record
+ I create record for product Shirt.
-
!record {model: product.product, id: product_product_shirt0}:
categ_id: product.cat1
@@ -27,7 +27,7 @@
weight: 0.0
weight_net: 0.0
-
- Creating a product.product record
+ I create record for product Cloth.
-
!record {model: product.product, id: product_product_cloth0}:
categ_id: product.cat1
@@ -53,7 +53,7 @@
weight: 0.0
weight_net: 0.0
-
- Creating a product.product record
+ I create record for product Buttons.
-
!record {model: product.product, id: product_product_buttons0}:
categ_id: product.cat1
@@ -81,7 +81,7 @@
-
I am creating bills of material for 'Shirt'.
-
- Creating a mrp.bom record
+ I create bills of material for Shirt.
-
!record {model: mrp.bom, id: mrp_bom_shirt0}:
bom_lines:
@@ -216,11 +216,15 @@
from tools.translate import _
pick_ids = self.search(cr, uid, [('address_id.name','=','Wong'),('state','=','assigned')])
assert pick_ids, _('No Incoming Shipments found!')
+-
+ I create record for partial picking.
-
!record {model: stock.partial.picking, id: stock_partial_picking0}:
date: '2010-04-30 16:53:36'
partner_id: base.res_partner_maxtor
address_id: base.res_partner_address_wong
+-
+ I make my picking done.
-
!python {model: stock.partial.picking}: |
pick_obj = self.pool.get('stock.picking')
@@ -245,17 +249,21 @@
})
pick_obj.do_partial(cr, uid, picking_ids, partial_datas, context=context)
-
- I Check incoming shipments for buttons. And receive products.
+ I Check incoming shipments for buttons and receive products.
-
!python {model: stock.picking}: |
from tools.translate import _
pick_ids = self.search(cr, uid, [('address_id.name','=','Tang'),('state','=','assigned')])
assert pick_ids, _('No Incoming Shipments found!')
+-
+ I create record for partial picking.
-
!record {model: stock.partial.picking, id: stock_partial_picking0}:
date: '2010-04-30 16:53:36'
partner_id: base.res_partner_maxtor
address_id: base.res_partner_address_wong
+-
+ I make my picking done.
-
!python {model: stock.partial.picking}: |
pick_obj = self.pool.get('stock.picking')
@@ -303,22 +311,30 @@
wf_service = netsvc.LocalService("workflow")
for p_id in prod_ids:
wf_service.trg_validate(uid, 'mrp.production', p_id, 'button_produce', cr)
+-
+ I create record for producing products with quantity 5.00.
-
!record {model: mrp.product.produce, id: mrp_product_produce0}:
product_qty: 5.00
mode: 'consume_produce'
+-
+ I produce 2 products with 5.00 quantities each.
-
!python {model: mrp.product.produce}: |
from tools.translate import _
prod_obj = self.pool.get('mrp.production')
prod_ids = prod_obj.search(cr, uid, [('product_id.name','=','Shirt')])
self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
+-
+ I create record for remaining products with quantity 35.00.
-
!record {model: stock.move.consume, id: stock_move_consume0}:
product_id: product_product_buttons0
product_qty: 35.00
product_uom: product.product_uom_unit
location_id: stock.stock_location_stock
+-
+ I produce remaining product Buttons with 35.00 quantity.
-
!python {model: stock.move.consume}: |
from tools.translate import _
diff --git a/addons/mrp/test/mrp_production_order.yml b/addons/mrp/test/mrp_production_order.yml
index 5de26180723..861f52e9c61 100644
--- a/addons/mrp/test/mrp_production_order.yml
+++ b/addons/mrp/test/mrp_production_order.yml
@@ -18,7 +18,7 @@
product_uom: product.product_uom_unit
product_uos_qty: 0.0
-
- Creating a mrp.production.workcenter.line record
+ I create a record for Workcenter line.
-
!record {model: mrp.production.workcenter.line, id: mrp_production_workcenter_line_assemblyline0}:
cycle: 5.0
@@ -28,7 +28,7 @@
sequence: 0.0
workcenter_id: mrp.mrp_workcenter_0
-
- Creating a mrp.production.product.line record
+ I create second record for Workcenter line.
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_regularprocessorconfig0}:
name: Regular processor config
@@ -38,7 +38,7 @@
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
- Creating a mrp.production.product.line record
+ I create third record for Workcenter line.
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_hddseagategb0}:
name: HDD Seagate 7200.8 80GB
@@ -48,7 +48,7 @@
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
- Creating a mrp.production.product.line record
+ I create fourth record for Workcenter line.
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_atxmidsizetower0}:
name: ATX Mid-size Tower
@@ -58,7 +58,7 @@
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
- Creating a mrp.production.product.line record
+ I create a record for production line.
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_mouse0}:
name: Mouse
@@ -68,7 +68,7 @@
product_uos_qty: 0.0
production_id: mrp_production_mo0
-
- Creating a mrp.production.product.line record
+ I create second record for production line.
-
!record {model: mrp.production.product.line, id: mrp_production_product_line_keyboard0}:
name: Keyboard
@@ -102,7 +102,7 @@
pick_ids = self.search(cr, uid, [('state','!=','done'),('type','=','internal')])
assert pick_ids, _('No Internal Pickings!')
-
- I see that there is a manufacturing order for the subproduct of PC1 with ready state.
+ I see that there is a manufacturing order for the sub product of PC1 with ready state.
-
!python {model: mrp.production}: |
from tools.translate import _
@@ -110,17 +110,21 @@
assert order_ids, _('No manufacturing order!')
-
I start producing that product first. So I marked it as started.
+-
+ I create record for producing products with quantity 5.00.
-
!record {model: mrp.product.produce, id: mrp_product_produce0}:
product_qty: 5.00
mode: 'consume_produce'
+-
+ I produce the product.
-
!python {model: mrp.product.produce}: |
prod_obj = self.pool.get('mrp.production')
prod_ids = prod_obj.search(cr, uid, [('state','=','confirmed')])
self.do_produce(cr, uid, [1], context={'active_ids': prod_ids})
-
- Now the manufacturing order for subproduct CPU_GEN is done. And manufacturing
+ Now the manufacturing order for subproduct CPU_GEN is done and manufacturing
order for PC1 is in ready state.
-
!python {model: mrp.production}: |
@@ -131,6 +135,8 @@
I start producing the product PC1.
-
!workflow {model: mrp.production, action: button_produce, ref: mrp_production_mo0}
+-
+ Finally my production order is done.
-
!python {model: mrp.product.produce}: |
from tools.translate import _
diff --git a/addons/mrp/wizard/mrp_product_produce.py b/addons/mrp/wizard/mrp_product_produce.py
index b64567a407a..4688f3fb15b 100644
--- a/addons/mrp/wizard/mrp_product_produce.py
+++ b/addons/mrp/wizard/mrp_product_produce.py
@@ -20,8 +20,6 @@
##############################################################################
from osv import fields, osv
-from tools.translate import _
-import netsvc
class mrp_product_produce(osv.osv_memory):
_name = "mrp.product.produce"
diff --git a/addons/mrp_jit/__openerp__.py b/addons/mrp_jit/__openerp__.py
index 77bc60e56dd..d9a862f5ddd 100644
--- a/addons/mrp_jit/__openerp__.py
+++ b/addons/mrp_jit/__openerp__.py
@@ -27,19 +27,15 @@
'description': """
This module allows Just In Time computation of procurement orders.
- If you install this module, you will not have to run the procurement scheduler
- manually anymore, or wait for it to execute.
- Each procurement order (resulting from a sale order, for instance) will be computed
- when confirmed, without waiting for the procurement scheduler to run.
-
- Warning: this does not take into account minimum stock rules (order points), which still
- require to run the appropriate scheduler, or wait for it to run nightly.
-
- Note that the procurement computation can be resource-intensive, so you may
- want to be careful with this, depending on your mrp configuration and system
- usage.
+ If you install this module, you will not have to run the regular procurement
+ scheduler anymore (but you still need to run the minimum order point rule
+ scheduler, or for example let it run daily.)
+ All procurement orders will be processed immediately, which could in some
+ cases entail a small performance impact.
+
It may also increase your stock size because products are reserved as soon
- as possible. In that case, you can not use priorities any more.
+ as possible and the scheduler time range is not taken into account anymore.
+ In that case, you can not use priorities any more on the different picking.
""",
diff --git a/addons/mrp_operations/mrp_operations.py b/addons/mrp_operations/mrp_operations.py
index 46e1dec1e12..e8a97a47d9d 100644
--- a/addons/mrp_operations/mrp_operations.py
+++ b/addons/mrp_operations/mrp_operations.py
@@ -185,7 +185,7 @@ class mrp_production(osv.osv):
def action_production_end(self, cr, uid, ids):
obj=self.browse(cr,uid,ids)[0]
for workcenter_line in obj.workcenter_lines:
- tmp=self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,[workcenter_line.id])
+ tmp = self.pool.get('mrp.production.workcenter.line').action_done(cr,uid,[workcenter_line.id])
return super(mrp_production,self).action_production_end(cr,uid,ids)
def action_in_production(self, cr, uid, ids):
diff --git a/addons/mrp_procurement/mrp_procurement.py b/addons/mrp_procurement/mrp_procurement.py
index bd5b223779f..cb20f1561fd 100644
--- a/addons/mrp_procurement/mrp_procurement.py
+++ b/addons/mrp_procurement/mrp_procurement.py
@@ -68,8 +68,8 @@ class mrp_procurement(osv.osv):
"""
_name = "mrp.procurement"
_description = "Procurement"
- _order = 'priority,date_planned'
-
+ _order = 'priority,date_planned desc'
+ _log_create = False
_columns = {
'name': fields.char('Reason', size=64, required=True, help='Procurement name.'),
'origin': fields.char('Source Document', size=64,
@@ -328,14 +328,11 @@ class mrp_procurement(osv.osv):
'product_qty': procurement.product_qty,
'product_uom': procurement.product_uom.id,
'date_planned': procurement.date_planned,
- 'state': 'confirmed',
+ 'state': 'draft',
'company_id': procurement.company_id.id,
})
+ move_obj.action_confirm(cr, uid, [id], context=context)
self.write(cr, uid, [procurement.id], {'move_id': id, 'close_move': 1})
- else:
- # TODO: check this
- if procurement.procure_method == 'make_to_stock' and procurement.move_id.state in ('waiting',):
- id = move_obj.write(cr, uid, [procurement.move_id.id], {'state':'confirmed'})
self.write(cr, uid, ids, {'state': 'confirmed', 'message': ''})
return True
diff --git a/addons/mrp_procurement/mrp_procurement_workflow.xml b/addons/mrp_procurement/mrp_procurement_workflow.xml
index 46c4a10fffc..599d11cfe01 100644
--- a/addons/mrp_procurement/mrp_procurement_workflow.xml
+++ b/addons/mrp_procurement/mrp_procurement_workflow.xml
@@ -2,8 +2,6 @@
-
-
mrp.procurement.basicmrp.procurement
@@ -48,16 +46,16 @@
functionaction_move_assigned()
-
-
-
-
-
-
-
-
-
-
+
+
+ produce_check
+
+
+
+ produce_service
+ function
+ action_produce_assign_service()
+ ready
@@ -155,16 +153,16 @@
check_make_to_stock()
-
-
-
-
-
-
-
-
-
-
+
+
+
+ check_produce()
+
+
+
+
+ not check_product()
+
@@ -172,15 +170,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+ subflow.cancel
+
+
+
+
+
diff --git a/addons/mrp_procurement/schedulers.py b/addons/mrp_procurement/schedulers.py
index 7a89723e5ca..6ebc0f61fad 100644
--- a/addons/mrp_procurement/schedulers.py
+++ b/addons/mrp_procurement/schedulers.py
@@ -197,7 +197,7 @@ class mrp_procurement(osv.osv):
if reste > 0:
qty += op.qty_multiple - reste
newdate = DateTime.now() + DateTime.RelativeDateTime(
- days=int(op.product_id.seller_delay))
+ days = int(op.product_id.seller_delay))
if op.product_id.supply_method == 'buy':
location_id = op.warehouse_id.lot_input_id
elif op.product_id.supply_method == 'produce':
diff --git a/addons/mrp_repair/mrp_repair.py b/addons/mrp_repair/mrp_repair.py
index f59da6a751c..e31b4e05594 100644
--- a/addons/mrp_repair/mrp_repair.py
+++ b/addons/mrp_repair/mrp_repair.py
@@ -30,7 +30,7 @@ import decimal_precision as dp
class mrp_repair(osv.osv):
_name = 'mrp.repair'
- _description = 'Repairs Order'
+ _description = 'Repair Order'
def _amount_untaxed(self, cr, uid, ids, field_name, arg, context):
""" Calculates untaxed amount.
@@ -346,12 +346,14 @@ class mrp_repair(osv.osv):
}
invoice_obj.write(cr, uid, [inv_id], invoice_vals, context=context)
else:
- a = repair.partner_id.property_account_receivable.id
+ if not repair.partner_id.property_account_receivable:
+ raise osv.except_osv(_('Error !'), _('No account defined for partner "%s".') % repair.partner_id.name )
+ account_id = repair.partner_id.property_account_receivable.id
inv = {
'name': repair.name,
'origin':repair.name,
'type': 'out_invoice',
- 'account_id': a,
+ 'account_id': account_id,
'partner_id': repair.partner_id.id,
'address_invoice_id': repair.address_id.id,
'currency_id': repair.pricelist_id.currency_id.id,
@@ -368,11 +370,19 @@ class mrp_repair(osv.osv):
name = repair.name + '-' + operation.name
else:
name = operation.name
+
+ if operation.product_id.property_account_income:
+ account_id = operation.product_id.property_account_income
+ elif operation.product_id.categ_id.property_account_income_categ:
+ account_id = operation.product_id.categ_id.property_account_income_categ.id
+ else:
+ raise osv.except_osv(_('Error !'), _('No account defined for product "%s".') % operation.product_id.name )
+
invoice_line_id = inv_line_obj.create(cr, uid, {
'invoice_id': inv_id,
'name': name,
'origin': repair.name,
- 'account_id': operation.product_id and operation.product_id.property_account_income and operation.product_id.property_account_income.id,
+ 'account_id': account_id,
'quantity': operation.product_uom_qty,
'invoice_line_tax_id': [(6,0,[x.id for x in operation.tax_id])],
'uos_id': operation.product_uom.id,
@@ -580,7 +590,7 @@ class ProductChangeMixin(object):
class mrp_repair_line(osv.osv, ProductChangeMixin):
_name = 'mrp.repair.line'
- _description = 'Repair Operations Lines'
+ _description = 'Repair Line'
def copy_data(self, cr, uid, id, default=None, context=None):
if not default: default = {}
@@ -668,7 +678,7 @@ mrp_repair_line()
class mrp_repair_fee(osv.osv, ProductChangeMixin):
_name = 'mrp.repair.fee'
- _description = 'Repair Fees line'
+ _description = 'Repair Fees Line'
def copy_data(self, cr, uid, id, default=None, context=None):
if not default: default = {}
diff --git a/addons/mrp_repair/wizard/cancel_repair.py b/addons/mrp_repair/wizard/cancel_repair.py
index ecc88ef6aae..de6e8095569 100644
--- a/addons/mrp_repair/wizard/cancel_repair.py
+++ b/addons/mrp_repair/wizard/cancel_repair.py
@@ -19,7 +19,6 @@
#
##############################################################################
-import netsvc
from osv import osv,fields
from tools.translate import _
@@ -45,7 +44,7 @@ class repair_cancel(osv.osv_memory):
if repair_order.invoiced or repair_order.invoice_method == 'none':
repair_order_obj.action_cancel(cr, uid, [record_id], context=context)
else:
- raise osv.except_osv(_('Warning!'),_('Repair is not cancelled. It is not invoiced.'))
+ raise osv.except_osv(_('Warning!'),_('Repair order is not invoiced.'))
return {}
diff --git a/addons/mrp_subproduct/mrp_subproduct.py b/addons/mrp_subproduct/mrp_subproduct.py
index 22ae9c44bec..e64e757868f 100644
--- a/addons/mrp_subproduct/mrp_subproduct.py
+++ b/addons/mrp_subproduct/mrp_subproduct.py
@@ -24,7 +24,7 @@ from osv import osv
class mrp_subproduct(osv.osv):
_name = 'mrp.subproduct'
- _description = 'Mrp Sub Product'
+ _description = 'Sub Product'
_columns={
'product_id': fields.many2one('product.product', 'Product', required=True),
'product_qty': fields.float('Product Qty', required=True),
@@ -59,18 +59,20 @@ class mrp_production(osv.osv):
_inherit= 'mrp.production'
def action_confirm(self, cr, uid, ids):
- picking_id=super(mrp_production,self).action_confirm(cr, uid, ids)
- for production in self.browse(cr, uid, ids):
- source = production.product_id.product_tmpl_id.property_stock_production.id
- for sub_product in production.bom_id.sub_products:
- qty1 = sub_product.product_qty
- qty2 = production.product_uos and production.product_uos_qty or False
- if sub_product.subproduct_type=='variable':
+ picking_id=super(mrp_production,self).action_confirm(cr, uid, ids)
+ for production in self.browse(cr, uid, ids):
+ source = production.product_id.product_tmpl_id.property_stock_production.id
+ if not production.bom_id:
+ continue
+ for sub_product in production.bom_id.sub_products:
+ qty1 = sub_product.product_qty
+ qty2 = production.product_uos and production.product_uos_qty or False
+ if sub_product.subproduct_type=='variable':
if production.product_qty:
qty1 *= production.product_qty / (production.bom_id.product_qty or 1.0)
if production.product_uos_qty:
qty2 *= production.product_uos_qty / (production.bom_id.product_uos_qty or 1.0)
- data = {
+ data = {
'name':'PROD:'+production.name,
'date_planned': production.date_planned,
'product_id': sub_product.product_id.id,
@@ -83,9 +85,9 @@ class mrp_production(osv.osv):
'move_dest_id': production.move_prod_id.id,
'state': 'waiting',
'production_id':production.id
- }
- sub_prod_ids=self.pool.get('stock.move').create(cr, uid,data)
- return picking_id
+ }
+ sub_prod_ids=self.pool.get('stock.move').create(cr, uid,data)
+ return picking_id
mrp_production()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/multi_company/i18n/fr.po b/addons/multi_company/i18n/fr.po
index 2e6f71b23d4..535e5a56cf0 100644
--- a/addons/multi_company/i18n/fr.po
+++ b/addons/multi_company/i18n/fr.po
@@ -8,41 +8,45 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-12-08 11:46+0000\n"
-"PO-Revision-Date: 2010-01-26 11:01+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2010-05-21 10:24+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: French \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:21+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: multi_company
#: help:multi_company.default,object_id:0
msgid "Object affect by this rules"
-msgstr ""
+msgstr "Objet affecté par cette règle"
#. module: multi_company
#: constraint:ir.model:0
msgid ""
"The Object name must start with x_ and not contain any special character !"
msgstr ""
+"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de "
+"caractères spéciaux !"
#. module: multi_company
#: constraint:product.template:0
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
+"Erreur: l'unité de mesure par défaut et l'unité de mesure d'achat doivent "
+"faire partie de la même catégorie"
#. module: multi_company
#: constraint:res.partner:0
msgid "The VAT doesn't seem to be correct."
-msgstr ""
+msgstr "La TVA ne semble pas correcte"
#. module: multi_company
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nom de l'objet invalide dans l'action défini"
#. module: multi_company
#: model:res.company,overdue_msg:multi_company.res_company_odoo
@@ -59,18 +63,18 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,company_dest_id:0
msgid "Default Company"
-msgstr ""
+msgstr "Société par défaut"
#. module: multi_company
#: field:multi_company.default,object_id:0
msgid "Object"
-msgstr ""
+msgstr "Objet"
#. module: multi_company
#: model:ir.module.module,shortdesc:multi_company.module_meta_information
#: view:multi_company.default:0
msgid "Multi Company"
-msgstr ""
+msgstr "Multi société"
#. module: multi_company
#: model:ir.module.module,description:multi_company.module_meta_information
@@ -83,27 +87,27 @@ msgstr ""
#. module: multi_company
#: field:multi_company.default,company_id:0
msgid "Main Company"
-msgstr ""
+msgstr "Société Principale"
#. module: multi_company
#: view:multi_company.default:0
msgid "Condition"
-msgstr ""
+msgstr "Condition"
#. module: multi_company
#: help:multi_company.default,company_dest_id:0
msgid "Company to store the current record"
-msgstr ""
+msgstr "Société physique ou sera stocké cet enregistrement"
#. module: multi_company
#: constraint:ir.ui.view:0
msgid "Invalid XML for View Architecture!"
-msgstr ""
+msgstr "XML non valide pour l'architecture de la vue !"
#. module: multi_company
#: field:multi_company.default,name:0
msgid "Name"
-msgstr ""
+msgstr "Nom"
#. module: multi_company
#: constraint:product.template:0
@@ -113,80 +117,80 @@ msgstr ""
#. module: multi_company
#: model:product.category,name:multi_company.Odoo1
msgid "Odoo Offers"
-msgstr ""
+msgstr "Offre Odoo"
#. module: multi_company
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "Erreur ! Vous ne pouvez pas créer de sociétés récursives"
#. module: multi_company
#: help:multi_company.default,name:0
msgid "Name it to easily find a record"
-msgstr ""
+msgstr "Nommer le facilement pour trouver l'enregistrement"
#. module: multi_company
#: model:ir.ui.menu,name:multi_company.menu_custom_multicompany
msgid "Multi company"
-msgstr ""
+msgstr "Multi société"
#. module: multi_company
#: model:ir.model,name:multi_company.model_multi_company_default
msgid "multi_company.default"
-msgstr ""
+msgstr "multi_company.default"
#. module: multi_company
#: help:multi_company.default,company_id:0
msgid "Company where the user is connected"
-msgstr ""
+msgstr "Société ou l'utilisateur sera connecté"
#. module: multi_company
#: model:ir.actions.act_window,name:multi_company.action_inventory_form
msgid "Default Company per Object"
-msgstr ""
+msgstr "Société par défaut par objet"
#. module: multi_company
#: field:multi_company.default,expression:0
msgid "Expression"
-msgstr ""
+msgstr "Expression"
#. module: multi_company
#: model:product.template,name:multi_company.product_product_odoo1_product_template
msgid "Odoo Offer"
-msgstr ""
+msgstr "Offre Odoo"
#. module: multi_company
#: field:multi_company.default,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "Séquence"
#. module: multi_company
#: constraint:product.category:0
msgid "Error ! You can not create recursive categories."
-msgstr ""
+msgstr "Erreur ! Vous ne pouvez pas créer de catégories récursives"
#. module: multi_company
#: constraint:product.product:0
msgid "Error: Invalid ean code"
-msgstr ""
+msgstr "Erreur: code EAN non valide"
#. module: multi_company
#: help:multi_company.default,expression:0
msgid "Expression, must be True to match"
-msgstr ""
+msgstr "Expression, doit être Vrai pour correspondre"
#. module: multi_company
#: model:ir.ui.menu,name:multi_company.menu_action_inventory_form
msgid "Default company per Object"
-msgstr ""
+msgstr "Société par défaut par Objet"
#. module: multi_company
#: code:addons/multi_company/multi_company.py:0
#, python-format
msgid " (copy)"
-msgstr ""
+msgstr " (copie)"
#. module: multi_company
#: view:multi_company.default:0
msgid "Matching"
-msgstr ""
+msgstr "Correspondance"
diff --git a/addons/olap/i18n/fr.po b/addons/olap/i18n/fr.po
new file mode 100644
index 00000000000..e9c187a4eda
--- /dev/null
+++ b/addons/olap/i18n/fr.po
@@ -0,0 +1,1402 @@
+# French translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-26 05:24+0000\n"
+"PO-Revision-Date: 2010-05-21 14:51+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: olap
+#: view:olap.database.columns:0
+#: view:olap.database.tables:0
+msgid "Hide"
+msgstr "Masquer"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_saved_query_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_saved_query_form
+#: view:olap.saved.query:0
+msgid "Olap Saved Query"
+msgstr ""
+
+#. module: olap
+#: field:olap.query.logs,time:0
+#: field:olap.saved.query,time:0
+msgid "Time"
+msgstr "Temps"
+
+#. module: olap
+#: view:bi.auto.configure.wizard:0
+msgid "Auto Configure Structure"
+msgstr ""
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "Olap fact database"
+msgstr ""
+
+#. module: olap
+#: help:olap.measure,value_sql:0
+msgid ""
+"You can provide valid sql expression. Make sure it have function with fully "
+"qualified column name like (sum,avg ...)(tablename.columnname (+,- ...) "
+"tablename.columnname)"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube.table,schema_id:0
+msgid "Schema id"
+msgstr ""
+
+#. module: olap
+#: field:olap.schema,database_id:0
+msgid "Database Connection"
+msgstr "Connexion à une base de données"
+
+#. module: olap
+#: selection:olap.fact.database,type:0
+msgid "MySQL"
+msgstr "MySQL"
+
+#. module: olap
+#: field:olap.fact.database,db_password:0
+msgid "Database password"
+msgstr "Mot de passe de la base de données"
+
+#. module: olap
+#: view:olap.database.tables:0
+msgid "Olap database tables"
+msgstr ""
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "Connection url"
+msgstr "URL de connexion"
+
+#. module: olap
+#: view:olap.application.table:0
+msgid "Olap Application Table"
+msgstr ""
+
+#. module: olap
+#: field:olap.parameters.config.wizard,host_name:0
+msgid "Server Name"
+msgstr "Nom du serveur"
+
+#. module: olap
+#: help:olap.fact.database,db_password:0
+msgid "Password for the login."
+msgstr "Mot de passe pour le login"
+
+#. module: olap
+#: field:olap.application.field,application_id:0
+#: field:olap.application.table,application_id:0
+msgid "Application Id"
+msgstr "ID de l'application"
+
+#. module: olap
+#: model:ir.actions.todo,note:olap.config_auto_directory
+msgid "This wizard will configure the URL of the web client"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_fact_database_form
+#: model:ir.ui.menu,name:olap.menu_bi_conf_fact
+msgid "Fact Databases"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_browser_url
+msgid "Cube Browser"
+msgstr "Explorer le Cube"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_action_olap_dimension_form
+msgid "Olap Dimension"
+msgstr "Dimension du cube Olap"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_database_columns
+msgid "Olap Database Columns"
+msgstr ""
+
+#. module: olap
+#: view:olap.parameters.config.wizard:0
+msgid "BI Web Client."
+msgstr ""
+
+#. module: olap
+#: help:olap.fact.database,db_port:0
+msgid " Port to be used in connection"
+msgstr " Port utilisé par la connexion"
+
+#. module: olap
+#: field:olap.database.columns,primary_key:0
+msgid "Primary Key"
+msgstr "Clé primaire"
+
+#. module: olap
+#: field:olap.database.columns,table_id:0
+msgid "Table Id"
+msgstr "ID de la table"
+
+#. module: olap
+#: view:olap.parameters.config.wizard:0
+msgid "This wizard will automatically configure the web client for BI."
+msgstr "Cet assistant configurera automatiquement le client Web pour la BI"
+
+#. module: olap
+#: field:olap.fact.database,type:0
+msgid "Database type"
+msgstr "Type de base de données"
+
+#. module: olap
+#: wizard_view:olap.query_builder,back:0
+#: wizard_view:olap.query_builder,init:0
+msgid "Cube Fetcher"
+msgstr ""
+
+#. module: olap
+#: wizard_view:olap.load.table,info:0
+#: wizard_view:olap.load.table,ok:0
+msgid "Your database structure has been correctly loaded"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_parameters_config_wizard
+msgid "Olap Server Parameters"
+msgstr "Paramètres du serveur Olap"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_cube_table_form
+msgid "Olap Cube Tables"
+msgstr ""
+
+#. module: olap
+#: field:olap.measure,formatstring:0
+msgid "Format string"
+msgstr "Foramtage de chaîne"
+
+#. module: olap
+#: wizard_button:olap.query_builder,exec,exec:0
+#: wizard_button:olap.query_builder,ok,exec:0
+msgid "Execute"
+msgstr "Exécuter"
+
+#. module: olap
+#: wizard_button:olap.application.configuration,configure,end:0
+#: wizard_button:olap.fact.database.test_connection,init,end:0
+#: wizard_button:olap.load.table,info,end:0
+#: wizard_button:olap.query.logs.clear,info,end:0
+#: wizard_button:olap.query.logs.clear,ok,end:0
+#: view:olap.warehouse.wizard:0
+msgid "Ok"
+msgstr "Ok"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_bi_conf_known_application
+msgid "Known Application"
+msgstr "Application connue"
+
+#. module: olap
+#: wizard_field:olap.query_builder,exec,level:0
+#: wizard_field:olap.query_builder,ok,level:0
+msgid "Level"
+msgstr "Niveau"
+
+#. module: olap
+#: field:olap.level,column_id_name:0
+#: field:olap.measure,value_column_id_name:0
+msgid "Column ID"
+msgstr "ID de la colonne"
+
+#. module: olap
+#: view:bi.load.db.wizard:0
+msgid ""
+"We will load the complete structure of the database by introspection, so "
+"that you will be able to work on it, and specify a better structure "
+"according to your reporting needs."
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_application_form
+msgid "Olap Applicatiion"
+msgstr "Application Olap"
+
+#. module: olap
+#: field:olap.saved.query,name:0
+msgid "Query Name"
+msgstr "Nom de la requête"
+
+#. module: olap
+#: wizard_field:olap.query_builder,exec,mdx_query:0
+#: wizard_field:olap.query_builder,ok,mdx_query:0
+msgid "MDX Query"
+msgstr "Requête MDX"
+
+#. module: olap
+#: model:ir.model,name:olap.model_bi_auto_configure_wizard
+msgid "bi.auto.configure.wizard"
+msgstr "bi.auto.configure.wizard"
+
+#. module: olap
+#: field:olap.hierarchy,primary_key:0
+msgid "Primary key"
+msgstr "Clé primaire"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.act_bi_auto_configure
+msgid "Auto Configuration"
+msgstr "Configuration automatique"
+
+#. module: olap
+#: field:olap.schema,note:0
+msgid "Schema description"
+msgstr "Description du schéma"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.act_bi_load_db_wizard
+msgid "Load database Structure"
+msgstr "Chargement de la structure de base de données"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_level
+#: view:olap.level:0
+msgid "Olap level"
+msgstr "Niveau Olap"
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "None (0000.00)"
+msgstr "Aucun (0000.00)"
+
+#. module: olap
+#: field:olap.fact.database,db_host:0
+msgid "Database host"
+msgstr "Nom d'hôte de la base de données"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_fact_database
+msgid "Olap Fact Database"
+msgstr ""
+
+#. module: olap
+#: view:bi.auto.configure.wizard:0
+msgid "Auto Congifuring Tables"
+msgstr "Configuration automatique des tables"
+
+#. module: olap
+#: field:olap.application,name:0
+msgid "Application name"
+msgstr "Nom de l'application"
+
+#. module: olap
+#: field:olap.cube.table,column_link_id:0
+msgid "Relational Column"
+msgstr "Colonne relationnelle"
+
+#. module: olap
+#: field:olap.level,type:0
+msgid "Level class"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube,name:0
+msgid "Cube name"
+msgstr "Nom du cube"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_application_table_form
+msgid "Olap Applicatiion Table"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_saved_query
+msgid "olap.saved.query"
+msgstr "olap.saved.query"
+
+#. module: olap
+#: field:olap.level,column_name:0
+msgid "Columns Name"
+msgstr "Nom des colonnes"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_hierarchy_form
+msgid "Olap Hierarchies"
+msgstr "Hiérarchies Olap"
+
+#. module: olap
+#: field:olap.schema,ready:0
+msgid "Ready"
+msgstr "Prêt"
+
+#. module: olap
+#: selection:olap.measure,measure_type:0
+#: field:olap.measure,value_column:0
+msgid "Fact Table Column"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_database_tables_form
+#: field:olap.application,table_ids:0
+#: view:olap.fact.database:0
+#: field:olap.fact.database,table_ids:0
+msgid "Tables"
+msgstr "Tables"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_application
+msgid "Olap application"
+msgstr "Application Olap"
+
+#. module: olap
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Nom de modèle invalide pour la définition de l'action"
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "Schema is ready to use"
+msgstr "Le schéma est prêt a être utilisé"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_designer_url
+msgid "Cube Designer"
+msgstr "Cube Designer"
+
+#. module: olap
+#: field:olap.fact.database,db_login:0
+msgid "Database login"
+msgstr "Connexion à la base de données"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_application_table_form
+msgid "Application Table"
+msgstr ""
+
+#. module: olap
+#: wizard_view:olap.query.logs.clear,info:0
+#: wizard_view:olap.query.logs.clear,ok:0
+msgid "Logs Cleared successfully"
+msgstr "Les fichiers journaux ont été effacés avec succès"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_schema
+#: model:ir.ui.menu,name:olap.menu_action_olap_schema_form
+#: view:olap.schema:0
+msgid "Olap Schema"
+msgstr "Schéma Olap"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_application_form
+msgid "Application"
+msgstr "Application"
+
+#. module: olap
+#: wizard_field:olap.query_builder,exec,mdx_query_output:0
+#: wizard_field:olap.query_builder,ok,mdx_query_output:0
+msgid "MDX Query Output"
+msgstr "Requête MDX en sortie"
+
+#. module: olap
+#: field:olap.hierarchy,primary_key_table:0
+msgid "Primary key table"
+msgstr "Table de la clé primaire"
+
+#. module: olap
+#: help:olap.measure,table_name:0
+msgid ""
+"The name of the table on which the column is defined. If False, take the "
+"table from the cube."
+msgstr ""
+
+#. module: olap
+#: view:olap.warehouse.wizard:0
+msgid "Warehouse"
+msgstr "Entrepôt"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_dimension_form
+msgid "Olap Dimensions"
+msgstr "Dimensions Olap"
+
+#. module: olap
+#: field:olap.query.logs,user_id:0
+msgid "Tiny ERP User"
+msgstr "Utilisateur Tiny ERP"
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_application_configuration
+msgid "Configure from Application"
+msgstr ""
+
+#. module: olap
+#: field:olap.fact.database,db_port:0
+msgid "Database port"
+msgstr "Port de connexion à la base"
+
+#. module: olap
+#: help:olap.parameters.config.wizard,host_port:0
+msgid ""
+"Put the port for the server. Put 8080 if its not clear."
+msgstr ""
+"Mettre le port du server. Mettre 8080 if ce n'est pas clair pour vous"
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "The Structure is Loaded"
+msgstr "La structure est chargée"
+
+#. module: olap
+#: field:olap.dimension,cube_id:0
+#: field:olap.measure,cube_id:0
+#: field:olap.query.logs,cube_id:0
+#: field:olap.saved.query,cube_id:0
+msgid "Cube"
+msgstr "Cube"
+
+#. module: olap
+#: field:olap.cube.table,available_table_ids:0
+msgid "Available Tables"
+msgstr "Tables disponibles"
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Configure Manually"
+msgstr "Coonfigurer manuellement"
+
+#. module: olap
+#: field:olap.database.columns,related_to:0
+msgid "Related To"
+msgstr "Lié à"
+
+#. module: olap
+#: view:olap.database.columns:0
+#: view:olap.database.tables:0
+msgid "Olap database columns"
+msgstr "Colonne Olap dans la base de données"
+
+#. module: olap
+#: field:olap.cube.table.line,field_id:0
+msgid "Link Field"
+msgstr "Lien du champ"
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Mark as Configured"
+msgstr ""
+
+#. module: olap
+#: view:olap.application.field:0
+msgid "Olap Application Field"
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "Comma Seperator (0,000)"
+msgstr "Séparateur décimal (0,000)"
+
+#. module: olap
+#: field:olap.measure,agregator:0
+msgid "Agregator"
+msgstr "Agregateur"
+
+#. module: olap
+#: wizard_view:olap.application.configuration,configure:0
+msgid "Your database structure (Open ERP) has been sucessfully configured."
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_bi_configuration
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: olap
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "XML non valide pour l'architecture de la vue !"
+
+#. module: olap
+#: help:olap.parameters.config.wizard,host_name:0
+msgid ""
+"Put here the server address or IP Put localhost if its not "
+"clear."
+msgstr ""
+
+#. module: olap
+#: view:olap.database.tables:0
+msgid "Database tables"
+msgstr ""
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Reload Structure"
+msgstr "Recharger la structure"
+
+#. module: olap
+#: wizard_view:olap.application.configuration,init:0
+msgid "This will Auto Configure Application"
+msgstr ""
+
+#. module: olap
+#: view:bi.load.db.wizard:0
+msgid "Load Data Structure"
+msgstr "Charger la structure de données"
+
+#. module: olap
+#: view:bi.auto.configure.wizard:0
+#: view:bi.load.db.wizard:0
+#: wizard_button:olap.application.configuration,init,end:0
+#: wizard_button:olap.load.table,init,end:0
+#: view:olap.parameters.config.wizard:0
+#: wizard_button:olap.query.logs.clear,init,end:0
+#: wizard_button:olap.query_builder,exec,end:0
+#: wizard_button:olap.query_builder,ok,end:0
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: olap
+#: view:bi.load.db.wizard:0
+msgid ""
+"After having loaded the structure, you will be able to hide/show or rename "
+"tables and columns to simplify end-users interface. The following database "
+"will be loaded:"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_level_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_level_form
+#: view:olap.level:0
+msgid "Olap Level"
+msgstr "Niveau Olap"
+
+#. module: olap
+#: field:olap.fact.database,loaded:0
+msgid "Loaded"
+msgstr "Chargé"
+
+#. module: olap
+#: help:olap.fact.database,db_name:0
+msgid "Name of the database to be used for analysis."
+msgstr "Nom de la base de données pour l'analyse."
+
+#. module: olap
+#: help:olap.fact.database,db_login:0
+msgid "Login for the database name specified."
+msgstr ""
+
+#. module: olap
+#: field:olap.hierarchy,dimension_id:0
+#: wizard_field:olap.query_builder,exec,dimension:0
+#: wizard_field:olap.query_builder,ok,dimension:0
+msgid "Dimension"
+msgstr "Dimension"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_application_table
+msgid "Olap application table"
+msgstr ""
+
+#. module: olap
+#: wizard_view:olap.load.table,init:0
+msgid ""
+"We will load the complete structure of the database by introspection, "
+"so that you will be able to work on it, and specify a better structure "
+"according to your reporting needs."
+msgstr ""
+
+#. module: olap
+#: field:olap.saved.query,axis_keys:0
+msgid "Axis Keys"
+msgstr "Axe clé"
+
+#. module: olap
+#: field:olap.cube,query_log:0
+msgid "Query Logging"
+msgstr "Enregistrer les requêtes"
+
+#. module: olap
+#: field:olap.measure,measure_type:0
+msgid "Measure Type"
+msgstr "Type de mesure"
+
+#. module: olap
+#: field:olap.database.tables,fact_database_id:0
+msgid "Database Id"
+msgstr "ID de la base de données"
+
+#. module: olap
+#: help:olap.fact.database,db_host:0
+msgid "Give hostname to make connection to the database."
+msgstr ""
+
+#. module: olap
+#: field:olap.level,hierarchy_id:0
+msgid "Hierarchy"
+msgstr "Hiérarchie"
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "The Structure is Configured."
+msgstr "La structure est configurée"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_schema_form
+msgid "Olap Schemas"
+msgstr "Schéma Olap"
+
+#. module: olap
+#: field:olap.cube,table_id:0
+msgid "Fact table"
+msgstr ""
+
+#. module: olap
+#: view:bi.auto.configure.wizard:0
+msgid ""
+"This will Auto Configure Application. This will help to increase the "
+"readability of the tables and columns by giving it meaningful and easy to "
+"comprehend name. You can hides particular data and columns by reconfiguring "
+"the structure option."
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_application_field_form
+msgid "Olap Applicatiion Field"
+msgstr ""
+
+#. module: olap
+#: field:olap.query.logs,query:0
+#: field:olap.saved.query,query:0
+#: view:olap.warehouse.wizard:0
+#: field:olap.warehouse.wizard,query:0
+msgid "Query"
+msgstr "Requête"
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Auto Application Configuration"
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "Postfix Default Currency(0000.00 EUR)"
+msgstr ""
+
+#. module: olap
+#: field:bi.load.db.wizard,db_name:0
+#: wizard_field:olap.load.table,init,db_name:0
+msgid "Database Name"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube,measure_ids:0
+msgid "Measures"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_conf_cube_query_builder
+#: wizard_view:olap.query_builder,exec:0
+#: wizard_view:olap.query_builder,ok:0
+msgid "Query Builder"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube,dimension_ids:0
+msgid "Dimensions"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_cube
+#: view:olap.cube:0
+msgid "Olap cube"
+msgstr "Cube Olap"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_warehouse
+#: model:ir.model,name:olap.model_olap_warehouse_wizard
+#: model:ir.ui.menu,name:olap.menu_bi_warehouse
+msgid "Olap Warehouse"
+msgstr "Entrepôt Olap"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_application_field_form
+msgid "Application Field"
+msgstr "Champ d'application"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_dimension
+#: view:olap.dimension:0
+msgid "Olap dimension"
+msgstr "Dimension Olap"
+
+#. module: olap
+#: field:olap.application.field,name:0
+msgid "Application field name"
+msgstr "Nom du champ de l'application"
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "Connection parameters"
+msgstr "Paramètres de connexion"
+
+#. module: olap
+#: field:bi.auto.configure.wizard,name:0
+#: field:bi.load.db.wizard,fact_table:0
+#: wizard_field:olap.load.table,init,fact_table:0
+msgid "Fact Name"
+msgstr ""
+
+#. module: olap
+#: view:olap.database.columns:0
+msgid "Database columns"
+msgstr "Colonnes de la base de données"
+
+#. module: olap
+#: field:olap.application.table,table_name:0
+#: field:olap.cube.table,name:0
+#: field:olap.level,table_name:0
+#: field:olap.measure,table_name:0
+msgid "Table name"
+msgstr "Nom de la table"
+
+#. module: olap
+#: help:olap.measure,measure_type:0
+msgid "Select between auto column or sql expression for the measures"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_load_column
+msgid "Open Columns"
+msgstr "Colonnes ouvertes"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_database_columns_form
+#: field:olap.database.tables,columns:0
+msgid "Columns"
+msgstr "Colonnes"
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_test_connection
+#: view:olap.fact.database:0
+msgid "Test Connection"
+msgstr "Test de connexion"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_measure_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_measure_form
+msgid "Olap Measures"
+msgstr "Mesures Olap"
+
+#. module: olap
+#: wizard_button:olap.application.configuration,init,configure:0
+#: view:olap.parameters.config.wizard:0
+msgid "Configure"
+msgstr ""
+
+#. module: olap
+#: wizard_view:olap.load.table,init:0
+msgid ""
+"After having loaded the structure, you will be able to hide/show or "
+"rename tables and columns to simplify end-users interface. The following "
+"database will be loaded:"
+msgstr ""
+
+#. module: olap
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de "
+"caractères spéciaux !"
+
+#. module: olap
+#: wizard_field:olap.query_builder,exec,hierarchy:0
+#: wizard_field:olap.query_builder,ok,hierarchy:0
+msgid "Hiearchy"
+msgstr "Hiérarchie"
+
+#. module: olap
+#: selection:olap.measure,measure_type:0
+#: field:olap.measure,value_sql:0
+msgid "SQL Expression"
+msgstr "Expression SQL"
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_menu_olap_load_table
+msgid "Load Tables"
+msgstr "Chargements des tables"
+
+#. module: olap
+#: field:olap.hierarchy,level_ids:0
+msgid "Levels"
+msgstr "Niveaux"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_application_field
+msgid "Olap application field"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_database_columns_form
+msgid "Database Columns"
+msgstr "Colonnes de base de données"
+
+#. module: olap
+#: field:olap.database.columns,active:0
+#: field:olap.database.tables,active:0
+msgid "Active"
+msgstr "Actif"
+
+#. module: olap
+#: selection:olap.measure,datatype:0
+msgid "Integer"
+msgstr "Entier"
+
+#. module: olap
+#: wizard_view:olap.application.configuration,init:0
+msgid " Auto Configure "
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,agregator:0
+msgid "Sum"
+msgstr "Somme"
+
+#. module: olap
+#: wizard_field:olap.query.logs.clear,init,user_name:0
+#: field:olap.saved.query,user_id:0
+msgid "User"
+msgstr "Utilisateur"
+
+#. module: olap
+#: field:olap.query.logs,count:0
+msgid "Count"
+msgstr "Compter"
+
+#. module: olap
+#: field:olap.database.tables,name:0
+msgid "End-User Name"
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "Postfix Default Currency with comma seperator (0,000.00 EUR)"
+msgstr ""
+
+#. module: olap
+#: field:olap.measure,datatype:0
+msgid "Datatype"
+msgstr "Type de données"
+
+#. module: olap
+#: wizard_button:olap.query_builder,back,ok:0
+#: wizard_button:olap.query_builder,init,ok:0
+msgid "Fetch Data"
+msgstr "Récupérer les données"
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "Prefix Default Currency with comma seperator (EUR 0,000.00)"
+msgstr ""
+
+#. module: olap
+#: wizard_view:olap.load.table,info:0
+#: wizard_view:olap.load.table,ok:0
+#: wizard_view:olap.query.logs.clear,info:0
+#: wizard_view:olap.query.logs.clear,ok:0
+msgid "Load Data"
+msgstr "Charger les données"
+
+#. module: olap
+#: field:olap.cube,query_ids:0
+msgid "Queries"
+msgstr "Requêtes"
+
+#. module: olap
+#: selection:olap.fact.database,type:0
+msgid "Oracle"
+msgstr "Oracle"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_cube_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_cube_form
+#: model:ir.ui.menu,name:olap.menu_bi_conf_cubes
+msgid "Olap Cubes"
+msgstr "Cubes Olap"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_action_olap_cube_table_form
+msgid "Olap Cubes Table"
+msgstr "Tables des Cubes Olap"
+
+#. module: olap
+#: field:olap.measure,name:0
+msgid "Measure name"
+msgstr "Nom de la mesure"
+
+#. module: olap
+#: selection:olap.fact.database,connection_type:0
+msgid "Socket"
+msgstr ""
+
+#. module: olap
+#: field:olap.fact.database,connection_type:0
+msgid "Connection type"
+msgstr "Type de connexion"
+
+#. module: olap
+#: selection:olap.measure,agregator:0
+msgid "count"
+msgstr "nombre"
+
+#. module: olap
+#: field:olap.fact.database,db_name:0
+msgid "Database name"
+msgstr "Nom de la base de données"
+
+#. module: olap
+#: field:olap.database.columns,type:0
+msgid "Type"
+msgstr "Type"
+
+#. module: olap
+#: view:olap.database.columns:0
+#: view:olap.database.tables:0
+msgid "Show"
+msgstr "Montrer"
+
+#. module: olap
+#: wizard_button:olap.query_builder,exec,back:0
+#: wizard_button:olap.query_builder,ok,back:0
+msgid "Change cube"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_view_olap_database_tables_form
+#: view:olap.cube.table:0
+#: field:olap.cube.table,line_ids:0
+msgid "Database Tables"
+msgstr ""
+
+#. module: olap
+#: help:olap.level,table_name:0
+msgid ""
+"The name of the table on which the column is defined. If False, take the "
+"table from the hierarchy."
+msgstr ""
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "Nothing has been Configured"
+msgstr ""
+
+#. module: olap
+#: field:olap.dimension,name:0
+msgid "Dimension name"
+msgstr ""
+
+#. module: olap
+#: wizard_button:olap.load.table,ok,end:0
+msgid "Continue and Configure Structure"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_measure
+#: view:olap.measure:0
+msgid "Olap measure"
+msgstr ""
+
+#. module: olap
+#: help:olap.cube,table_id:0
+msgid "Table(s) for cube."
+msgstr "Table(s) pour le cube"
+
+#. module: olap
+#: wizard_field:olap.query_builder,exec,measure:0
+#: wizard_field:olap.query_builder,ok,measure:0
+msgid "Measure"
+msgstr ""
+
+#. module: olap
+#: field:olap.database.columns,column_db_name:0
+msgid "Column DBName"
+msgstr ""
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "We Can Start building Cube"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube.table.line,table_id:0
+msgid "Database Table"
+msgstr ""
+
+#. module: olap
+#: field:olap.schema,name:0
+msgid "Schema name"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_query_logs_my_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_query_logs_my_form
+#: view:olap.query.logs:0
+msgid "My Logs"
+msgstr "Mes journaux"
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "Information"
+msgstr "Information"
+
+#. module: olap
+#: wizard_field:olap.query_builder,back,cube_schema:0
+#: wizard_field:olap.query_builder,init,cube_schema:0
+msgid "Select Cube"
+msgstr "Sélectionner le Cube"
+
+#. module: olap
+#: field:olap.hierarchy,table_id:0
+msgid "Fact table(s)"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.url,name:olap.menu_url_cube_designer
+msgid "name_menu_url_cube_designer"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_config_bi_parameters
+msgid "Parameters Configuration"
+msgstr ""
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Connect to Database"
+msgstr "Connexion à la base de données"
+
+#. module: olap
+#: selection:olap.schema,state:0
+msgid "Database Connected"
+msgstr "Connecté à la base de données"
+
+#. module: olap
+#: field:olap.application.field,table_name:0
+#: field:olap.application.table,name:0
+msgid "Application table name"
+msgstr ""
+
+#. module: olap
+#: help:olap.hierarchy,table_id:0
+msgid "Table(s) to make hierarchy on the cube."
+msgstr ""
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "General information"
+msgstr "Informations générales"
+
+#. module: olap
+#: field:olap.application,query:0
+msgid "Application Query"
+msgstr ""
+
+#. module: olap
+#: help:olap.cube,query_log:0
+msgid "Enabling this will log all the queries in the browser"
+msgstr ""
+
+#. module: olap
+#: field:olap.saved.query,mdx_id:0
+msgid "Module"
+msgstr "Module"
+
+#. module: olap
+#: field:olap.application.field,is_hidden:0
+#: field:olap.application.table,is_hidden:0
+#: field:olap.database.columns,hide:0
+#: field:olap.database.tables,hide:0
+msgid "Hidden"
+msgstr "Masquer"
+
+#. module: olap
+#: field:olap.dimension,hierarchy_ids:0
+msgid "Hierarchies"
+msgstr "Hiérarchies"
+
+#. module: olap
+#: field:olap.query.logs,result_size:0
+msgid "Result Size"
+msgstr ""
+
+#. module: olap
+#: view:olap.application:0
+msgid "Olap Application"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_database_tables
+msgid "Olap Database Tables"
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,formatstring:0
+msgid "Prefix Default Currency (EUR 0000.00)"
+msgstr ""
+
+#. module: olap
+#: view:olap.cube.table:0
+msgid "Olap cube_table"
+msgstr ""
+
+#. module: olap
+#: view:olap.parameters.config.wizard:0
+msgid "Parameters Configure"
+msgstr "Configurer les paramètres"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_hierarchy
+#: view:olap.hierarchy:0
+msgid "Olap hierarchy"
+msgstr "Hiérarchie Olap"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_cube_table
+#: model:ir.model,name:olap.model_olap_cube_table_line
+msgid "Olap cube table"
+msgstr ""
+
+#. module: olap
+#: field:olap.application.field,field_name:0
+msgid "Field name"
+msgstr "Nom du champ"
+
+#. module: olap
+#: model:ir.model,name:olap.model_olap_query_logs
+msgid "Olap query logs"
+msgstr ""
+
+#. module: olap
+#: field:olap.fact.database,name:0
+msgid "Fact name"
+msgstr ""
+
+#. module: olap
+#: help:olap.measure,formatstring:0
+msgid " Let you specify how the measure to be displayed in cube browser"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_bi_server_parameters
+msgid "Server Parameters"
+msgstr "Paramètres serveur"
+
+#. module: olap
+#: wizard_view:olap.load.table,init:0
+#: wizard_button:olap.load.table,init,ok:0
+#: view:olap.schema:0
+msgid "Load Database Structure"
+msgstr "Charger la structure de la base de données"
+
+#. module: olap
+#: field:olap.level,name:0
+msgid "Level name"
+msgstr "Nom du niveau"
+
+#. module: olap
+#: field:olap.cube,schema_id:0
+#: field:olap.query.logs,schema_id:0
+#: field:olap.saved.query,schema_id:0
+msgid "Schema"
+msgstr "Schéma"
+
+#. module: olap
+#: field:olap.fact.database,connection_url:0
+#: field:olap.schema,app_detect:0
+msgid "Connection URL"
+msgstr "URL de connexion"
+
+#. module: olap
+#: field:olap.schema,cube_ids:0
+msgid "Cubes"
+msgstr "Cubes"
+
+#. module: olap
+#: view:olap.schema:0
+msgid "ReConfigure Structure"
+msgstr ""
+
+#. module: olap
+#: field:olap.application,field_ids:0
+msgid "Fields"
+msgstr "Champs"
+
+#. module: olap
+#: selection:olap.measure,agregator:0
+msgid "Average"
+msgstr "Moyenne"
+
+#. module: olap
+#: view:bi.load.db.wizard:0
+msgid "Load Database Tables"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_action_olap_hierarchy_form
+msgid "Olap Hierarchy"
+msgstr ""
+
+#. module: olap
+#: field:olap.cube.table.line,cube_table_id:0
+msgid "Cube Table"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_bi
+msgid "Businesss Intelligence"
+msgstr ""
+
+#. module: olap
+#: model:ir.model,name:olap.model_bi_load_db_wizard
+msgid "bi.load.db.wizard"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.url,name:olap.menu_url_cube_browser
+msgid "name_menu_url_cube_browser"
+msgstr ""
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_view_olap_fact_database_form
+msgid "Databases"
+msgstr "Bases de données"
+
+#. module: olap
+#: field:olap.hierarchy,name:0
+msgid "Hierarchy name"
+msgstr ""
+
+#. module: olap
+#: model:ir.module.module,description:olap.module_meta_information
+msgid ""
+"\n"
+" Base module to manage Olap schemas. Cube designer.\n"
+" "
+msgstr ""
+
+#. module: olap
+#: view:olap.cube.table:0
+msgid "Joined Tables"
+msgstr "Tables jointes"
+
+#. module: olap
+#: field:olap.schema,loaded:0
+msgid "Loading Datastructure"
+msgstr ""
+
+#. module: olap
+#: view:olap.cube.table:0
+msgid "Joined Table"
+msgstr "Tables jointes"
+
+#. module: olap
+#: selection:olap.fact.database,type:0
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#. module: olap
+#: wizard_view:olap.query.logs.clear,init:0
+msgid " To Load Data"
+msgstr ""
+
+#. module: olap
+#: field:olap.hierarchy,sequence:0
+#: field:olap.level,sequence:0
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: olap
+#: model:ir.ui.menu,name:olap.menu_bi_conf_tools
+msgid "Tools"
+msgstr "Outils"
+
+#. module: olap
+#: field:olap.schema,state:0
+msgid "Schema State"
+msgstr ""
+
+#. module: olap
+#: selection:olap.measure,datatype:0
+msgid "Float"
+msgstr "Décimal"
+
+#. module: olap
+#: model:ir.actions.act_window,name:olap.action_olap_query_logs_form
+#: model:ir.ui.menu,name:olap.menu_action_olap_query_logs_form
+#: view:olap.query.logs:0
+msgid "All Logs"
+msgstr ""
+
+#. module: olap
+#: selection:olap.fact.database,connection_type:0
+#: field:olap.parameters.config.wizard,host_port:0
+msgid "Port"
+msgstr "Port"
+
+#. module: olap
+#: view:olap.fact.database:0
+msgid "Fact database"
+msgstr ""
+
+#. module: olap
+#: model:ir.module.module,shortdesc:olap.module_meta_information
+msgid "olap"
+msgstr "olap"
+
+#. module: olap
+#: field:olap.database.columns,name:0
+msgid "Column Name"
+msgstr "Nom de colonne"
+
+#. module: olap
+#: field:olap.database.tables,table_db_name:0
+msgid "Table Name"
+msgstr "Nom de la table"
+
+#. module: olap
+#: wizard_view:olap.application.configuration,configure:0
+msgid "Auto Configure"
+msgstr "Configuration auto"
+
+#. module: olap
+#: field:olap.schema,configure:0
+msgid "Configuring Datastructure"
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_load_configuration_table
+msgid "Open Configuration"
+msgstr ""
+
+#. module: olap
+#: view:olap.schema:0
+msgid "Configure Automatically "
+msgstr ""
+
+#. module: olap
+#: model:ir.actions.wizard,name:olap.bi_clear_logs
+#: model:ir.ui.menu,name:olap.menu_bi_clear_logs
+#: wizard_button:olap.query.logs.clear,init,ok:0
+msgid "Clear Logs"
+msgstr "Effacer les journaux"
diff --git a/addons/olap_crm/i18n/fr.po b/addons/olap_crm/i18n/fr.po
new file mode 100644
index 00000000000..034219dcdcd
--- /dev/null
+++ b/addons/olap_crm/i18n/fr.po
@@ -0,0 +1,34 @@
+# French translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-26 05:29+0000\n"
+"PO-Revision-Date: 2010-05-21 14:53+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: olap_crm
+#: model:ir.module.module,description:olap_crm.module_meta_information
+msgid ""
+"\n"
+" Sale module will load the data in olap tables\n"
+" "
+msgstr ""
+"\n"
+" Module de vente qui chargera les données dans les tables olap\n"
+" "
+
+#. module: olap_crm
+#: model:ir.module.module,shortdesc:olap_crm.module_meta_information
+msgid "olap_crm"
+msgstr "olap_crm"
diff --git a/addons/olap_extract/i18n/fr.po b/addons/olap_extract/i18n/fr.po
new file mode 100644
index 00000000000..ec38bffe470
--- /dev/null
+++ b/addons/olap_extract/i18n/fr.po
@@ -0,0 +1,59 @@
+# French translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-26 05:29+0000\n"
+"PO-Revision-Date: 2010-05-21 14:54+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: olap_extract
+#: model:ir.module.module,shortdesc:olap_extract.module_meta_information
+msgid "olap_extract"
+msgstr "olap_extract"
+
+#. module: olap_extract
+#: wizard_button:olap.extract.schema,init,ok:0
+msgid "OK"
+msgstr "OK"
+
+#. module: olap_extract
+#: model:ir.actions.wizard,name:olap_extract.bi_olap_extract_schema
+msgid "Olap Extract"
+msgstr "Extraction Olap"
+
+#. module: olap_extract
+#: model:ir.module.module,description:olap_extract.module_meta_information
+msgid ""
+"\n"
+" Extracts the schema structure.\n"
+" "
+msgstr ""
+"\n"
+" Extraire la structure du schéma.\n"
+" "
+
+#. module: olap_extract
+#: wizard_field:olap.extract.schema,init,module_name:0
+msgid "Module Name"
+msgstr "Nom du module"
+
+#. module: olap_extract
+#: wizard_button:olap.extract.schema,init,end:0
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: olap_extract
+#: wizard_view:olap.extract.schema,init:0
+msgid "New Module Name"
+msgstr "Nouveau nom de module"
diff --git a/addons/olap_sale/i18n/fr.po b/addons/olap_sale/i18n/fr.po
new file mode 100644
index 00000000000..2a4e7c47c93
--- /dev/null
+++ b/addons/olap_sale/i18n/fr.po
@@ -0,0 +1,34 @@
+# French translation for openobject-addons
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-26 05:29+0000\n"
+"PO-Revision-Date: 2010-05-21 15:14+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: olap_sale
+#: model:ir.module.module,description:olap_sale.module_meta_information
+msgid ""
+"\n"
+" Sale module will load the data in olap tables\n"
+" "
+msgstr ""
+"\n"
+" Module de ventes qui chargera les données dans les tables olap\n"
+" "
+
+#. module: olap_sale
+#: model:ir.module.module,shortdesc:olap_sale.module_meta_information
+msgid "olap_sale"
+msgstr "olap_sale"
diff --git a/addons/point_of_sale/account_bank_statement.py b/addons/point_of_sale/account_bank_statement.py
index 57276219861..1f8ccc80162 100644
--- a/addons/point_of_sale/account_bank_statement.py
+++ b/addons/point_of_sale/account_bank_statement.py
@@ -49,7 +49,7 @@ class singer_statement(osv.osv):
""" Singer Statements """
_name = 'singer.statement'
- _description = 'Statements'
+ _description = 'Statement'
def _sub_total(self, cr, uid, ids, name, arg, context=None):
diff --git a/addons/point_of_sale/i18n/fr.po b/addons/point_of_sale/i18n/fr.po
index 6ae0cfda0bb..c3eea52b8d2 100644
--- a/addons/point_of_sale/i18n/fr.po
+++ b/addons/point_of_sale/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-09 18:58+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-21 10:26+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:00+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: point_of_sale
@@ -52,7 +52,7 @@ msgstr "Numéro de pièce"
#. module: point_of_sale
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nom du Modèle non valide dans la définition de l'action."
#. module: point_of_sale
#: field:pos.order,name:0
@@ -92,7 +92,7 @@ msgstr "Ventes (résumé)"
#. module: point_of_sale
#: help:pos.order,user_id:0
msgid "This is the logged in user (not necessarily the salesman)."
-msgstr ""
+msgstr "Ceci est l'utilisateur connecté (pas nécessairement le vendeur)."
#. module: point_of_sale
#: wizard_view:pos.sale.get,init:0
@@ -142,7 +142,7 @@ msgstr "Réf. Partenaire"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "Tel : + 32 (0) 2 231 04 35"
-msgstr ""
+msgstr "Tél : + 32 (0) 2 231 04 35"
#. module: point_of_sale
#: field:pos.order.line,name:0
@@ -242,7 +242,7 @@ msgstr "Qté"
#. module: point_of_sale
#: field:pos.order,user_id:0
msgid "Logged in User"
-msgstr ""
+msgstr "Connecté en tant qu'utilisateur"
#. module: point_of_sale
#: rml:pos.details:0
@@ -350,7 +350,7 @@ msgstr "Lignes de la commande"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Disc.(%)"
-msgstr ""
+msgstr "Rem.(%)"
#. module: point_of_sale
#: model:ir.module.module,shortdesc:point_of_sale.module_meta_information
@@ -385,7 +385,7 @@ msgstr "Configuration des Journaux utilisés par les Points de Vente."
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "Total :"
-msgstr ""
+msgstr "Total :"
#. module: point_of_sale
#: wizard_field:pos.config.journal,init,default_journal:0
@@ -447,7 +447,7 @@ msgstr "Ristourne (%)"
#. module: point_of_sale
#: rml:pos.invoice:0
msgid "Fiscal Position Remark :"
-msgstr ""
+msgstr "Indiquer la position fiscale :"
#. module: point_of_sale
#: model:ir.actions.wizard,name:point_of_sale.pos_add_product
@@ -487,7 +487,7 @@ msgstr "Point de Vente"
#. module: point_of_sale
#: field:pos.order,salesman_id:0
msgid "Salesman"
-msgstr ""
+msgstr "Vendeur"
#. module: point_of_sale
#: rml:pos.details:0
@@ -929,7 +929,7 @@ msgstr "Actions"
#. module: point_of_sale
#: help:pos.order,salesman_id:0
msgid "This is the salesman actually making the order."
-msgstr ""
+msgstr "Indiquer le vendeur de cette vente"
#. module: point_of_sale
#: rml:pos.details:0
@@ -957,7 +957,7 @@ msgstr "Date d'Impression"
#. module: point_of_sale
#: rml:pos.receipt:0
msgid "OPERATION N° :"
-msgstr ""
+msgstr "OPÉRATION N° :"
#. module: point_of_sale
#: rml:pos.lines:0
diff --git a/addons/point_of_sale/pos.py b/addons/point_of_sale/pos.py
index 981d20077d3..dcc2086eb26 100644
--- a/addons/point_of_sale/pos.py
+++ b/addons/point_of_sale/pos.py
@@ -31,11 +31,9 @@ import re
import decimal_precision as dp
class pos_config_journal(osv.osv):
-
""" Point of Sale journal configuration"""
-
_name = 'pos.config.journal'
- _description = "Point of Sale journal configuration"
+ _description = "Journal Configuration"
_columns = {
'name': fields.char('Description', size=64),
'code': fields.char('Code', size=64),
diff --git a/addons/point_of_sale/pos_view.xml b/addons/point_of_sale/pos_view.xml
index dace921596b..d2cc102a047 100644
--- a/addons/point_of_sale/pos_view.xml
+++ b/addons/point_of_sale/pos_view.xml
@@ -66,7 +66,7 @@
+ attrs="{'invisible':[('state','!=','paid'),('state','!=','invoiced')]}"/>
@@ -156,12 +156,10 @@
-
-
-
-
-
-
+
+
+
+
@@ -172,12 +170,12 @@
-
+
-
+
@@ -189,8 +187,9 @@
tree,form['|',('state_2','=','to_verify'),('state','=','advance')]
-
-
+ {"search_default_user_id":uid}
+
+
@@ -201,8 +200,9 @@
tree,form[('state','!=', 'invoiced')]
-
-
+ {"search_default_user_id":uid}
+
+
@@ -213,7 +213,8 @@
formtree,form[('state','=', 'paid')]
-
+ {"search_default_user_id":uid}
+ Point of Sale
@@ -222,7 +223,8 @@
formtree,form[('date_order','<=', time.strftime('%Y-%m-%d 23:59:59'))]
-
+ {"search_default_user_id":uid}
+
@@ -231,7 +233,8 @@
pos.orderformtree,form
-
+ {"search_default_user_id":uid}
+ Opened Sales
@@ -239,7 +242,8 @@
pos.orderformform,tree
-
+ {"search_default_user_id":uid}
+
@@ -790,7 +794,7 @@
parent="menu_point_config_product"
action="action_product_output"
id="products_for_output_operations"/>
-
+
-
+
-
+
UOS Coeff', digits=(16,4),
help='Coefficient to convert UOM to UOS\n'
- ' uom = uos * coeff'),
+ ' uos = uom * coeff'),
'mes_type': fields.selection((('fixed', 'Fixed'), ('variable', 'Variable')), 'Measure Type', required=True),
'seller_delay': fields.function(_calc_seller_delay, method=True, type='integer', string='Supplier Lead Time', help="This is the average delay in days between the purchase order confirmation and the reception of goods for this product and for the default supplier. It is used by the scheduler to order requests based on reordering delays."),
'seller_ids': fields.one2many('product.supplierinfo', 'product_id', 'Partners'),
diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml
index 300a2b0f546..ce2cc1ee632 100644
--- a/addons/product/product_data.xml
+++ b/addons/product/product_data.xml
@@ -22,11 +22,12 @@
PCE1.01.0
+ 1.0KGM
- 1.0
+ 1000.01.0
diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml
index 19761704e88..a2405f33b52 100644
--- a/addons/product/product_demo.xml
+++ b/addons/product/product_demo.xml
@@ -164,7 +164,7 @@
- CPU2
+ CPU3150.0100.0
@@ -303,7 +303,7 @@
- CPU_GEN
+ CPU_DEMproduce150.0100.0
diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml
index 360ffef25eb..9bfcb33b050 100644
--- a/addons/product/product_view.xml
+++ b/addons/product/product_view.xml
@@ -193,7 +193,7 @@
-
+
diff --git a/addons/product_margin/security/ir.model.access.csv b/addons/product_margin/security/ir.model.access.csv
new file mode 100644
index 00000000000..51d88da9d81
--- /dev/null
+++ b/addons/product_margin/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_product_margin","product.margin","model_product_margin",,1,0,0,0
diff --git a/addons/profile_manufacturing/security/ir.model.access.csv b/addons/profile_manufacturing/security/ir.model.access.csv
index dc32d522e81..892aa4bce00 100644
--- a/addons/profile_manufacturing/security/ir.model.access.csv
+++ b/addons/profile_manufacturing/security/ir.model.access.csv
@@ -1,2 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_profile_manufacturing_wizard_install","profile manufacturing wizard install","model_profile_manufacturing_config_install_modules_wizard","base.group_system",1,1,1,1
+"access_profile_manufacturing_config_install_modules_wizard_all","profile_manufacturing_config_install_modules_wizard_all","model_profile_manufacturing_config_install_modules_wizard","base.group_system",1,1,1,1
diff --git a/addons/profile_tools/security/ir.model.access.csv b/addons/profile_tools/security/ir.model.access.csv
new file mode 100644
index 00000000000..dbe55929ecc
--- /dev/null
+++ b/addons/profile_tools/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_misc_tools_installer","misc_tools.installer","model_misc_tools_installer",,1,1,1,1
diff --git a/addons/project/i18n/lt.po b/addons/project/i18n/lt.po
index 50591b5ccd0..27d4cb3fc9f 100644
--- a/addons/project/i18n/lt.po
+++ b/addons/project/i18n/lt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-18 05:51+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-19 09:19+0000\n"
+"Last-Translator: Rytis Ūsalis \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-05-20 05:23+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
@@ -206,7 +206,7 @@ msgstr ""
#: view:project.task:0
#: field:project.task,notes:0
msgid "Notes"
-msgstr ""
+msgstr "Pastabos"
#. module: project
#: selection:res.company,project_time_mode:0
@@ -216,7 +216,7 @@ msgstr ""
#. module: project
#: model:project.task.type,name:project.project_tt_analysis
msgid "Analysis"
-msgstr ""
+msgstr "Analizė"
#. module: project
#: model:ir.model,name:project.model_project_project
@@ -224,7 +224,7 @@ msgstr ""
#: field:project.task,project_id:0
#: model:res.request.link,name:project.req_link_project
msgid "Project"
-msgstr ""
+msgstr "Projektas"
#. module: project
#: view:project.task:0
diff --git a/addons/project/project.py b/addons/project/project.py
index f96740219e5..a6c703657d0 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -250,7 +250,8 @@ project()
class task(osv.osv):
_name = "project.task"
- _description = "Tasks"
+ _description = "Task"
+ _log_create = True
_date_name = "date_start"
def _str_get(self, task, level=0, border='***', context={}):
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index cec9ed95c0c..8b65468c158 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -414,20 +414,19 @@
-
+
-
-
-
-
-
+
+
+
+
@@ -444,7 +443,7 @@
tree,form,calendar,gantt,graph
- {"search_default_project_id":context.get('project_id',False)}
+ {"search_default_project_id":project_id, "search_default_user_id":uid}
@@ -612,7 +611,6 @@
-
@@ -631,7 +629,7 @@
formtree,form
- {"search_default_project_id":context.get('project_id',False), "search_default_my_msg":1}
+ {"search_default_project_id":project_id, "search_default_user_id":uid}
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index e099b4544aa..128bdb39378 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -30,17 +30,16 @@ class report_project_task_user(osv.osv):
'name': fields.char('Task Summary', size=128, readonly=True),
'day': fields.char('Day', size=128, readonly=True),
'year': fields.char('Year',size=64,required=False, readonly=True),
- 'user_id':fields.many2one('res.users', 'User', readonly=True),
- 'date_start': fields.datetime('Starting Date',readonly=True),
+ 'user_id':fields.many2one('res.users', 'Assigned To', readonly=True),
+ 'date_start': fields.date('Starting Date',readonly=True),
'no_of_days': fields.integer('#Days', size=128, readonly=True),
'description': fields.text('Description',readonly=True),
- 'date_end': fields.datetime('Ending Date',readonly=True),
+ 'date_end': fields.date('Ending Date',readonly=True),
'date_deadline': fields.date('Deadline',readonly=True),
'project_id':fields.many2one('project.project', 'Project', readonly=True),
'hours_planned': fields.float('Planned Hours', readonly=True),
'hours_effective': fields.float('Effective Hours', readonly=True),
'hours_delay': fields.float('Avg. Plan.-Eff.', readonly=True),
-# 'closing_days': fields.char('Avg Closing Delay', size=64, readonly=True),
'closing_days': fields.float('Avg Closing Delay', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Days to close the task"),
@@ -102,7 +101,6 @@ class report_project_task_user(osv.osv):
t.state,
date_trunc('day',t.date_end),
to_date(to_char(t.date_deadline, 'dd-MM-YYYY'),'dd-MM-YYYY'),
- date_trunc('day',t.date_start),
t.company_id,
t.partner_id,
t.type,
diff --git a/addons/project/report/project_report_view.xml b/addons/project/report/project_report_view.xml
index a4a072849b9..d4443e7ed5c 100644
--- a/addons/project/report/project_report_view.xml
+++ b/addons/project/report/project_report_view.xml
@@ -52,13 +52,13 @@
-
-
+
+ help="Tasks performed in last 30 days"/>
+
-
+
+
-
-
-
-
-
+
+
-
+
+
+
+
diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv
index f31c6f0401f..0cbe980f2e6 100644
--- a/addons/project/security/ir.model.access.csv
+++ b/addons/project/security/ir.model.access.csv
@@ -17,3 +17,4 @@
"access_project_vs_remaining_hours","project.vs.remaining.hours","model_project_vs_remaining_hours","project.group_project_user",1,1,1,1
"access_task_by_days_vs_planned_hours","task.by.days.vs.planned.hour","model_task_by_days_vs_planned_hours","project.group_project_user",1,1,1,1
"access_task_by_days","task.by.days","model_task_by_days","project.group_project_user",1,1,1,1
+"access_close_task","close.task","model_close_task","project.group_project_manager",1,1,1,1
diff --git a/addons/project_gtd/i18n/fr.po b/addons/project_gtd/i18n/fr.po
index 27f868fbae5..abbd2e8dec7 100644
--- a/addons/project_gtd/i18n/fr.po
+++ b/addons/project_gtd/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 14:56+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-21 10:32+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:14+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project_gtd
@@ -78,7 +78,7 @@ msgstr "Projet par défaut"
#. module: project_gtd
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nom de modèle invalide pour la définition de l'action"
#. module: project_gtd
#: field:project.gtd.timebox,context4_id:0
@@ -110,12 +110,12 @@ msgstr "Feuilles de temps"
#. module: project_gtd
#: model:ir.module.module,shortdesc:project_gtd.module_meta_information
msgid "Getting Things Done - Time Management Module"
-msgstr ""
+msgstr "Getting Things Done - Module de Gestion du Temps"
#. module: project_gtd
#: model:ir.actions.act_window,name:project_gtd.act_timebox_tasks
msgid "Timebox Tasks"
-msgstr ""
+msgstr "Tâche de la Timebox"
#. module: project_gtd
#: wizard_view:project.gtd.timebox.fill,init:0
@@ -181,7 +181,7 @@ msgstr "Contexte 3"
#. module: project_gtd
#: wizard_button:project.gtd.timebox.fill,init,process:0
msgid "Add to Timebox"
-msgstr ""
+msgstr "Ajouter une Timebox"
#. module: project_gtd
#: field:project.gtd.timebox,context5_id:0
@@ -277,7 +277,7 @@ msgstr "Séquence"
#. module: project_gtd
#: field:project.gtd.timebox,child_ids:0
msgid "Child Timeboxes"
-msgstr ""
+msgstr "Timeboxes enfant"
#. module: project_gtd
#: model:ir.ui.menu,name:project_gtd.menu_open_time_allinbox
diff --git a/addons/project_gtd/project_gtd.py b/addons/project_gtd/project_gtd.py
index d45576cabb1..059c19e0f40 100644
--- a/addons/project_gtd/project_gtd.py
+++ b/addons/project_gtd/project_gtd.py
@@ -39,7 +39,7 @@ except ImportError:
class project_gtd_context(osv.osv):
_name = "project.gtd.context"
- _description = "Contexts"
+ _description = "Context"
_columns = {
'name': fields.char('Context', size=64, required=True, select=1),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of contexts."),
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index b990142e1ea..513bae085bd 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -31,8 +31,8 @@
'author': 'Tiny',
'website': 'http://www.openerp.com',
'depends': [
- 'crm',
'project',
+ 'hr_timesheet_sheet',
],
'init_xml': [
'project_issue_data.xml'
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 2de1b9f6b59..f67986526cd 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -36,7 +36,7 @@ class project_issue(osv.osv, crm.crm_case):
_name = "project.issue"
_description = "Project Issue"
_order = "priority, id desc"
- _inherit = 'mailgate.thread'
+ _inherits = {'mailgate.thread': 'thread_id'}
def case_open(self, cr, uid, ids, *args):
"""
@@ -110,6 +110,10 @@ class project_issue(osv.osv, crm.crm_case):
return res
_columns = {
+ 'thread_id': fields.many2one('mailgate.thread', 'Thread', required=False),
+ 'id': fields.integer('ID'),
+ 'name': fields.char('Name', size=128, required=True),
+ 'active': fields.boolean('Active', required=False),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Update Date' , readonly=True),
'date_deadline': fields.date('Deadline'),
@@ -138,9 +142,6 @@ class project_issue(osv.osv, crm.crm_case):
'email_cc': fields.text('Watchers Emails', size=252 , help="These people\
will receive a copy of the future" \
" communication between partner and users by email"),
- 'stage_id': fields.many2one('crm.case.stage', 'Stage', \
- domain="[('section_id','=',section_id),\
- ('object_id.model', '=', 'crm.phonecall')]"),
'date_open': fields.datetime('Opened', readonly=True),
# Project Issue fields
'date_closed': fields.datetime('Closed', readonly=True),
@@ -164,13 +165,26 @@ class project_issue(osv.osv, crm.crm_case):
method=True, multi='day_close', type="float", store=True),
'assigned_to' : fields.many2one('res.users', 'Assigned to'),
}
-
+
def _get_project(self, cr, uid, context):
user = self.pool.get('res.users').browse(cr,uid,uid, context=context)
if user.context_project_id:
return user.context_project_id.id
return False
+ _defaults = {
+ 'active': lambda *a: 1,
+ 'user_id': crm.crm_case._get_default_user,
+ 'partner_id': crm.crm_case._get_default_partner,
+ 'partner_address_id': crm.crm_case._get_default_partner_address,
+ 'email_from': crm.crm_case. _get_default_email,
+ 'state': lambda *a: 'draft',
+ 'section_id': crm.crm_case. _get_section,
+ 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
+ 'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
+ 'project_id':_get_project,
+ }
+
def convert_issue_task(self, cr, uid, ids, context=None):
case_obj = self.pool.get('project.issue')
data_obj = self.pool.get('ir.model.data')
@@ -249,9 +263,5 @@ class project_issue(osv.osv, crm.crm_case):
return {'value':{}}
return {'value':{}}
- _defaults = {
- 'project_id':_get_project,
- }
-
project_issue()
diff --git a/addons/project_issue/project_issue_demo.xml b/addons/project_issue/project_issue_demo.xml
index 7c7764a2e37..ed031672360 100644
--- a/addons/project_issue/project_issue_demo.xml
+++ b/addons/project_issue/project_issue_demo.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 40366bc26bd..210ad4ee737 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -188,17 +188,12 @@
-
+
-
-
-
+
@@ -292,12 +287,8 @@
-
-
-
+
+
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 16dc2eb6ae2..70a08e2c7b4 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -66,7 +66,7 @@ class project_issue_report(osv.osv):
('11', 'November'), ('12', 'December')], 'Month', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
'create_date': fields.datetime('Create Date', readonly=True),
- 'day': fields.char('Day', size=128, readonly=True),
+ 'day': fields.char('Day', size=128, readonly=True),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('object_id.model', '=', 'project.issue')]"),
'nbr': fields.integer('# of Issues', readonly=True),
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index a9f8f016dec..5729698392f 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -93,10 +93,7 @@
domain="[('section_id.user_id.company_id','=',uid)]"
help="My company"/>
-
-
-
-
+
@@ -182,7 +179,7 @@
project.issue.reportformgraph,tree
- {"search_default_This Month":1,"search_default_User":1,'group_by_no_leaf':1,'group_by':[]}
+ {"search_default_This Month":1,"search_default_User":1,"search_default_user_id":uid,'group_by_no_leaf':1,'group_by':[]}
@@ -206,4 +203,4 @@
-
\ No newline at end of file
+
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index a925aeeb7aa..ebcc62b7bc3 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -244,7 +244,6 @@ project_resource_allocation()
class project(osv.osv):
_inherit = "project.project"
- _description = "Project"
_columns = {
'phase_ids': fields.one2many('project.phase', 'project_id', "Project Phases"),
'resource_calendar_id': fields.many2one('resource.calendar', 'Working Time', help="Timetable working hours to adjust the gantt diagram report"),
@@ -254,7 +253,6 @@ project()
class task(osv.osv):
_inherit = "project.task"
- _description = "Task"
_columns = {
'phase_id': fields.many2one('project.phase', 'Project Phase'),
'occupation_rate': fields.float('Occupation Rate', help='The occupation rate fields indicates how much of his time a user is working on a task. A 100% occupation rate means the user works full time on the tasks. The ending date of a task is computed like this: Starting Date + Duration / Occupation Rate.'),
@@ -368,4 +366,4 @@ class task(osv.osv):
return super(task, self).write(cr, uid, ids, vals, context=context)
task()
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_messages/security/ir.model.access.csv b/addons/project_messages/security/ir.model.access.csv
new file mode 100644
index 00000000000..96782d5fc82
--- /dev/null
+++ b/addons/project_messages/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_project_messages","project.messages","model_project_messages",,1,1,1,1
diff --git a/addons/project_mrp/__openerp__.py b/addons/project_mrp/__openerp__.py
index 484b9a2e4f1..342ff9e3d91 100644
--- a/addons/project_mrp/__openerp__.py
+++ b/addons/project_mrp/__openerp__.py
@@ -32,7 +32,7 @@ When installed, this module will automatically create a new task
for each procurement order line, when the corresponding product
meets the following characteristics:
* Type = Service
- * Procurement method (Order fulfillment) = MTO (make to order)
+ * Procurement method (Order fulfilment) = MTO (make to order)
* Supply/Procurement method = Produce
The new task is created outside of any existing project, but
@@ -49,8 +49,11 @@ automatically created via sale orders.
'website': 'http://www.openerp.com',
'depends': ['project', 'mrp_procurement', 'sale', 'mrp_jit'],
'init_xml': [],
- 'update_xml': ['project_mrp_workflow.xml', 'process/project_mrp_process.xml'],
+ 'update_xml': ['project_mrp_workflow.xml',
+ #'process/project_mrp_process.xml',
+ ],
'demo_xml': [],
+ 'test': ['test/project_task_procurement.yml'],
'installable': True,
'active': False,
'certificate': '0031976495453',
diff --git a/addons/project_mrp/mrp.py b/addons/project_mrp/mrp.py
index 845d32815a9..350d6b006b7 100644
--- a/addons/project_mrp/mrp.py
+++ b/addons/project_mrp/mrp.py
@@ -29,27 +29,53 @@ class mrp_procurement(osv.osv):
def action_produce_assign_service(self, cr, uid, ids, context={}):
for procurement in self.browse(cr, uid, ids):
sline = self.pool.get('sale.order.line')
- sale_ids = sline.search(cr, uid, [('procurement_id','=',procurement.id)], context)
content = ''
+ sale_order = self.pool.get('sale.order')
+ so_ref = procurement.name.split(':')[0]
+ order_ids = sale_order.search(cr, uid, [('name','=',so_ref)], context)
+
+ if order_ids:
+ sale_ids = sale_order.read(cr, uid, order_ids[0],['order_line'],context=context)['order_line']
+ else:
+ so_ref = procurement.origin.split(':')[0]
+ sale_ids = sline.search(cr, uid, [('procurement_id','=',procurement.id)], context)
l = None
project_id = None
+ analytic_account_id = False
+ partner_id = False
+
for line in sline.browse(cr, uid, sale_ids, context=context):
content += (line.notes or '')
l = line
+ partner_id = line.order_id.partner_id.id
if line.order_id.project_id:
+ analytic_account_id = line.order_id.project_id.id
+ partner_id = line.order_id.partner_id.id
content+="\n\n"+line.order_id.project_id.complete_name
+ break
# Creating a project for task.Project is created from Procurement.
- proj_name = tools.ustr(procurement.name)
+ proj_name = tools.ustr(so_ref)
proj_exist_id = self.pool.get('project.project').search(cr, uid, [('name','=',proj_name)], context=context)
if not proj_exist_id:
- project_id = self.pool.get('project.project').create(cr, uid, {'name':proj_name})
+ project_id = self.pool.get('project.project').create(cr, uid, {'name':proj_name,'category_id':analytic_account_id, 'partner_id':partner_id})
else:
project_id = proj_exist_id[0]
self.write(cr, uid, [procurement.id], {'state':'running'})
+
+ name_task = ('','')
+ if procurement.product_id.type == 'service':
+ proc_name = procurement.name
+ if procurement.origin == proc_name:
+ proc_name = procurement.product_id.name
+
+ name_task = (procurement.origin, proc_name or '')
+ else:
+ name_task = (procurement.product_id.name or procurement.origin, procurement.name or '')
+
task_id = self.pool.get('project.task').create(cr, uid, {
- 'name': '%s:%s' %(procurement.product_id.name or procurement.origin, procurement.name or ''),
+ 'name': '%s:%s' % name_task,
'date_deadline': procurement.date_planned,
'planned_hours': procurement.product_qty,
'remaining_hours': procurement.product_qty,
diff --git a/addons/project_mrp/project_mrp_workflow.xml b/addons/project_mrp/project_mrp_workflow.xml
index a4f038f4ad2..43217d69f83 100644
--- a/addons/project_mrp/project_mrp_workflow.xml
+++ b/addons/project_mrp/project_mrp_workflow.xml
@@ -1,8 +1,8 @@
-
-
+
+ subflow.done
diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml
new file mode 100644
index 00000000000..dda382a128a
--- /dev/null
+++ b/addons/project_mrp/test/project_task_procurement.yml
@@ -0,0 +1,75 @@
+-
+ In order to test project_mrp module with OpenERP I want to create sale orders
+ with product type 'service' so when procurement runs one task is created.
+-
+ I create record for a service type product.
+-
+ !record {model: product.product, id: product_product_partnerstraining0}:
+ categ_id: product.product_category_7
+ cost_method: standard
+ mes_type: fixed
+ name: Partners Training
+ procure_method: make_to_order
+ supply_method: produce
+ type: service
+ uom_id: product.uom_day
+ uom_po_id: product.uom_day
+ warranty: 0.0
+-
+ I create a sale order for product Partners Training which has type 'Service'.
+-
+ !record {model: sale.order, id: sale_order_so0}:
+ date_order: '2010-05-21'
+ invoice_quantity: order
+ name: SO006
+ order_policy: manual
+ partner_id: base.res_partner_asus
+ partner_invoice_id: base.res_partner_address_tang
+ partner_order_id: base.res_partner_address_tang
+ partner_shipping_id: base.res_partner_address_tang
+ order_line:
+ - state: draft
+ delay: 7.0
+ name: Partners Training
+ price_unit: 1.0
+ product_id: product_product_partnerstraining0
+ product_uom: product.uom_day
+ product_uom_qty: 5.0
+ th_weight: 0.0
+ type: make_to_order
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+ user_id: base.user_demo
+-
+ I confirm this sale order.
+-
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0}
+-
+ I check the procurements.
+-
+ !python {model: mrp.procurement}: |
+ from tools.translate import _
+ orderline_obj = self.pool.get('sale.order.line')
+ line_ids = orderline_obj.search(cr, uid, [('order_id','=', ref('sale_order_so0'))])
+ orders = orderline_obj.browse(cr, uid, line_ids)
+ proc_ids = map(lambda x: x.procurement_id.id, orders)
+ assert proc_ids, _('No Procurements!')
+-
+ The scheduler runs.
+-
+ !function {model: mrp.procurement, name: run_scheduler}:
+ - model: mrp.procurement
+ search: "[('state','=','confirmed')]"
+-
+ Now I check the tasks.
+-
+ I see that one task is created for my sale order.
+-
+ !python {model: project.task}: |
+ from tools.translate import _
+ order_obj = self.pool.get('sale.order')
+ order = order_obj.browse(cr, uid, ref('sale_order_so0'))
+ task_id = self.search(cr, uid, [('project_id.name','=', order.name)])
+ assert task_id, _('No Task is created!')
+
\ No newline at end of file
diff --git a/addons/project_planning/project_planning.py b/addons/project_planning/project_planning.py
index bfd2af5566c..09a105cfb53 100644
--- a/addons/project_planning/project_planning.py
+++ b/addons/project_planning/project_planning.py
@@ -184,7 +184,6 @@ report_account_analytic_planning_line()
class account_analytic_account(osv.osv):
_name = 'account.analytic.account'
_inherit = 'account.analytic.account'
- _description = 'Analytic Accounts'
_columns = {
'planning_ids': fields.one2many('report_account_analytic.planning.line', 'account_id', 'Plannings'),
}
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index 6302bb7b440..7dbf2195c16 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -112,7 +112,11 @@
+<<<<<<< TREE
+
+=======
+>>>>>>> MERGE-SOURCE
@@ -162,12 +166,11 @@
-
-
+
@@ -215,6 +218,7 @@
report_account_analytic.planningformtree,form
+ {"search_default_user_id":uid}
diff --git a/addons/project_retro_planning/project_retro_planning.py b/addons/project_retro_planning/project_retro_planning.py
index 60c8279f16f..3300ac0eebe 100644
--- a/addons/project_retro_planning/project_retro_planning.py
+++ b/addons/project_retro_planning/project_retro_planning.py
@@ -26,7 +26,6 @@ from datetime import datetime
class project_project(osv.osv):
_inherit = 'project.project'
- _description = 'project.project'
def write(self, cr, uid, ids,vals, *args, **kwargs):
if 'date' in vals and vals['date']:
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index 3ab09a390cc..f332067b88f 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -28,7 +28,6 @@ from tools.translate import _
class project_work(osv.osv):
_inherit = "project.task.work"
- _description = "Task Work"
def get_user_related_details(self, cr, uid, user_id):
res = {}
@@ -144,7 +143,6 @@ project_work()
class task(osv.osv):
_inherit = "project.task"
- _description = "Tasks"
def unlink(self, cr, uid, ids, *args, **kwargs):
for task_obj in self.browse(cr, uid, ids, *args, **kwargs):
diff --git a/addons/project_timesheet/report/task_report_view.xml b/addons/project_timesheet/report/task_report_view.xml
index e44e399b292..7093582d7fc 100644
--- a/addons/project_timesheet/report/task_report_view.xml
+++ b/addons/project_timesheet/report/task_report_view.xml
@@ -74,15 +74,9 @@
-
-
-
-
-
-
-
+ formtree,graph[]
+ {"search_default_user_id":uid}
@@ -156,9 +151,7 @@
-
-
-
+
@@ -174,6 +167,7 @@
report.timesheet.task.userformtree
+ {"search_default_user_id":uid}
diff --git a/addons/project_timesheet/security/ir.model.access.csv b/addons/project_timesheet/security/ir.model.access.csv
index 42c3ea0d15c..69075f64e05 100644
--- a/addons/project_timesheet/security/ir.model.access.csv
+++ b/addons/project_timesheet/security/ir.model.access.csv
@@ -1,3 +1,2 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_task_report","report.task.report","model_task_report","project.group_project_manager",1,0,0,0
"access_report_timesheet_task_user","report.timesheet.task.user","model_report_timesheet_task_user","project.group_project_manager",1,0,0,0
diff --git a/addons/purchase/__openerp__.py b/addons/purchase/__openerp__.py
index 553d0342f7a..46d7c3296b9 100644
--- a/addons/purchase/__openerp__.py
+++ b/addons/purchase/__openerp__.py
@@ -51,12 +51,12 @@
'process/purchase_process.xml',
'report/purchase_report_view.xml',
],
- 'demo_xml': ['purchase_demo.xml'],
'test': [
'test/purchase_from_order.yml',
'test/purchase_from_manual.yml',
# 'test/purchase_from_picking.yml',
],
+ 'demo_xml': ['purchase_demo.xml','purchase_unit_test.xml'],
'installable': True,
'active': False,
'certificate': '0057234283549',
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 448f4ccc63b..849e586335c 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -162,7 +162,7 @@ class purchase_order(osv.osv):
"In this case, it will remove the warehouse link and set the customer location."
),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', states={'posted':[('readonly',True)]}),
- 'location_id': fields.many2one('stock.location', 'Destination', required=True),
+ 'location_id': fields.many2one('stock.location', 'Destination', required=True, domain=[('usage','<>','view')]),
'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]}, help="The pricelist sets the currency used for this purchase order. It also computes the supplier price for the selected products/quantities."),
'state': fields.selection([('draft', 'Request for Quotation'), ('wait', 'Waiting'), ('confirmed', 'Waiting Supplier Ack'), ('approved', 'Approved'),('except_picking', 'Shipping Exception'), ('except_invoice', 'Invoice Exception'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, help="The state of the purchase order or the quotation request. A quotation is a purchase order in a 'Draft' state. Then the order has to be confirmed by the user, the state switch to 'Confirmed'. Then the supplier must confirm the order to change the state to 'Approved'. When the purchase order is paid and received, the state becomes 'Done'. If a cancel action occurs in the invoice or in the reception of goods, the state becomes in exception.", select=True),
'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'approved':[('readonly',True)],'done':[('readonly',True)]}),
@@ -210,7 +210,8 @@ class purchase_order(osv.osv):
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.order', context=c),
}
_name = "purchase.order"
- _description = "Purchase order"
+ _description = "Purchase Order"
+ _log_create = True
_order = "name desc"
def unlink(self, cr, uid, ids, context=None):
@@ -414,6 +415,7 @@ class purchase_order(osv.osv):
'purchase_id': order.id,
'company_id': order.company_id.id,
})
+ todo_moves = []
for order_line in order.order_line:
if not order_line.product_id:
continue
@@ -437,8 +439,9 @@ class purchase_order(osv.osv):
})
if order_line.move_dest_id:
self.pool.get('stock.move').write(cr, uid, [order_line.move_dest_id.id], {'location_id':order.location_id.id})
- self.pool.get('stock.move').action_confirm(cr, uid, [move])
- self.pool.get('stock.move').force_assign(cr,uid, [move])
+ todo_moves.append(move)
+ self.pool.get('stock.move').action_confirm(cr, uid, todo_moves)
+ self.pool.get('stock.move').force_assign(cr, uid, todo_moves)
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
return picking_id
@@ -516,6 +519,7 @@ class purchase_order(osv.osv):
'state': 'draft',
'order_line': {},
'notes': '%s' % (porder.notes or '',),
+ 'fiscal_position': porder.fiscal_position and porder.fiscal_position.id or False,
})
else:
#order_infos['name'] += ', %s' % porder.name
@@ -608,7 +612,7 @@ class purchase_order_line(osv.osv):
}
_table = 'purchase_order_line'
_name = 'purchase.order.line'
- _description = 'Purchase Order lines'
+ _description = 'Purchase Order Line'
def copy_data(self, cr, uid, id, default=None,context={}):
if not default:
default = {}
diff --git a/addons/purchase/purchase_unit_test.xml b/addons/purchase/purchase_unit_test.xml
index 890062a66b9..00678589999 100644
--- a/addons/purchase/purchase_unit_test.xml
+++ b/addons/purchase/purchase_unit_test.xml
@@ -8,7 +8,7 @@
-
+
@@ -63,10 +63,10 @@
-
+
-
+
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index a57749e8134..8f76d4b409b 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -5,7 +5,7 @@
groups="group_purchase_user"/>-->
-
@@ -157,12 +157,10 @@
-
-
-
-
-
-
+
+
+
+
@@ -200,8 +198,9 @@
ir.actions.act_windowpurchase.orderform
- {'search_default_draft': 1}
+ {'search_default_draft': 1,'search_create_uid':uid}tree,form,graph,calendar
+
@@ -211,7 +210,8 @@
ir.actions.act_windowpurchase.ordertree,form,graph,calendar
- {'search_default_approved': 1}
+ {'search_default_approved': 1,'search_create_uid':uid}
+
@@ -323,11 +323,11 @@
-
-
-
+
mrp.procurement.form.inheritmrp.procurement
diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py
index 76d018680d2..cf177319ea5 100644
--- a/addons/purchase/report/purchase_report.py
+++ b/addons/purchase/report/purchase_report.py
@@ -54,6 +54,12 @@ class purchase_report(osv.osv):
'location_id': fields.many2one('stock.location', 'Destination', readonly=True),
'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position',readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
+ 'partner_address_id':fields.many2one('res.partner.address', 'Address Contact Name', readonly=True),
+ 'dest_address_id':fields.many2one('res.partner.address', 'Dest. Address Contact Name',readonly=True),
+ 'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', readonly=True),
+ 'date_approve':fields.date('Date Approved', readonly=True),
+ 'expected_date':fields.date('Expected Date', readonly=True),
+ 'validator' : fields.many2one('res.users', 'Validated by', readonly=True),
'company_id':fields.many2one('res.company', 'Company', readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
'quantity': fields.float('# of Products', readonly=True),
@@ -76,6 +82,12 @@ class purchase_report(osv.osv):
to_char(s.date_order, 'MM') as month,
to_char(s.date_order, 'YYYY-MM-DD') as day,
s.state,
+ s.date_approve,
+ date_trunc('day',s.minimum_planned_date) as expected_date,
+ s.partner_address_id,
+ s.dest_address_id,
+ s.pricelist_id,
+ s.validator,
s.warehouse_id as warehouse_id,
s.partner_id as partner_id,
s.fiscal_position,
@@ -97,6 +109,12 @@ class purchase_report(osv.osv):
s.create_uid,
s.partner_id,
s.location_id,
+ s.date_approve,
+ date_trunc('day',s.minimum_planned_date),
+ s.partner_address_id,
+ s.pricelist_id,
+ s.validator,
+ s.dest_address_id,
l.product_id,
s.date_order,
to_char(s.date_order, 'YYYY'),
diff --git a/addons/purchase/report/purchase_report_view.xml b/addons/purchase/report/purchase_report_view.xml
index 93918160bd1..49caced7a6b 100644
--- a/addons/purchase/report/purchase_report_view.xml
+++ b/addons/purchase/report/purchase_report_view.xml
@@ -21,6 +21,8 @@
+
+
@@ -32,6 +34,10 @@
+
+
+
+
@@ -46,7 +52,7 @@
search
-
+
@@ -71,48 +77,60 @@
domain="[('state','=','manual')]"/>
+
+
-
-
-
-
+
+
+
+
-
+
+
+
+
+
-
-
+
+
+
+
+
-
+
+
+
+
+
+
-
+
+
-
+
diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv
index 7d7b78d0cdb..9b0f8bc184e 100644
--- a/addons/purchase/security/ir.model.access.csv
+++ b/addons/purchase/security/ir.model.access.csv
@@ -1,11 +1,19 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_purchase_order","purchase.order","model_purchase_order","purchase.group_purchase_user",1,1,1,1
"access_purchase_order_line","purchase.order.line","model_purchase_order_line","purchase.group_purchase_user",1,1,1,1
-"access_stock_location_purchase_user","stock.location purchase_user","stock.model_stock_location","purchase.group_purchase_user",1,0,0,0
-"access_stock_warehouse_purchase_user","stock.warehouse purchase_user","stock.model_stock_warehouse","purchase.group_purchase_user",1,0,0,0
-"access_stock_picking_purchase_user","stock.picking purchase_user","stock.model_stock_picking","purchase.group_purchase_user",1,1,1,1
-"access_stock_move_purchase_user","stock.move purchase_user","stock.model_stock_move","purchase.group_purchase_user",1,1,1,1
-"access_purchase_order_stock_worker","purchase.order stock_worker","model_purchase_order","stock.group_stock_user",1,0,0,0
-"access_purchase_order_line_stock_worker","purchase.order.line stock_worker","model_purchase_order_line","stock.group_stock_user",1,0,0,0
-"access_account_tax_purchase_user","account.tax purchase_user","account.model_account_tax","purchase.group_purchase_user",1,0,0,0
+"access_stock_location_purchase_user","stock.location","stock.model_stock_location","purchase.group_purchase_user",1,0,0,0
+"access_stock_warehouse_purchase_user","stock.warehouse","stock.model_stock_warehouse","purchase.group_purchase_user",1,0,0,0
+"access_stock_picking_purchase_user","stock.picking","stock.model_stock_picking","purchase.group_purchase_user",1,1,1,1
+"access_stock_move_purchase_user","stock.move","stock.model_stock_move","purchase.group_purchase_user",1,1,1,1
+"access_purchase_order_stock_worker","purchase.order","model_purchase_order","stock.group_stock_user",1,0,0,0
+"access_purchase_order_line_stock_worker","purchase.order.line","model_purchase_order_line","stock.group_stock_user",1,0,0,0
+"access_account_tax_purchase_user","account.tax","account.model_account_tax","purchase.group_purchase_user",1,0,0,0
"access_report_purchase_order","purchase.report","model_purchase_report","purchase.group_purchase_manager",1,0,0,0
+"access_purchase_order_group","purchase.order.group","model_purchase_order_group","purchase.group_purchase_user",1,1,1,1
+"access_purchase_order_manager","purchase.order","model_purchase_order","purchase.group_purchase_manager",1,1,1,1
+"access_purchase_order_line_manager","purchase.order.line","model_purchase_order_line","purchase.group_purchase_manager",1,1,1,1
+"access_stock_location_purchase_user_manager","stock.location","stock.model_stock_location","purchase.group_purchase_manager",1,0,0,0
+"access_stock_warehouse_purchase_user_manager","stock.warehouse","stock.model_stock_warehouse","purchase.group_purchase_manager",1,0,0,0
+"access_stock_picking_purchase_user_manager","stock.picking","stock.model_stock_picking","purchase.group_purchase_manager",1,1,1,1
+"access_stock_move_purchase_user_manager","stock.move","stock.model_stock_move","purchase.group_purchase_manager",1,1,1,1
+"access_account_tax_purchase_user_manager","account.tax","account.model_account_tax","purchase.group_purchase_manager",1,0,0,0
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
index a6e25375bc1..845738165d2 100644
--- a/addons/purchase/wizard/purchase_installer.py
+++ b/addons/purchase/wizard/purchase_installer.py
@@ -25,7 +25,7 @@ class purchase_installer(osv.osv_memory):
_inherit = 'res.config.installer'
_columns = {
- 'purchase_requisition':fields.boolean('Purchase Requisition',help="Manage your Purchase Requisition and regroup and allow you to easily keep track and order all your purchase orders."),
+ 'purchase_requisition':fields.boolean('Purchase Requisition',help="Manages your Purchase Requisition and allow you to easily keep track and manage all your purchase orders."),
}
purchase_installer()
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index e7b1f09aa90..85c35b277c5 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -27,7 +27,7 @@ import time
class purchase_requisition(osv.osv):
_name = "purchase.requisition"
- _description="Purchase requisition"
+ _description="Purchase Requisition"
_columns = {
'name': fields.char('Requisition Reference', size=32,required=True),
'origin': fields.char('Origin', size=32),
@@ -93,25 +93,19 @@ class purchase_requisition_line(osv.osv):
@param product_id: Changed product_id
@return: Dictionary of changed values
"""
- value = {}
-
+ value = {'product_uom_id': ''}
if product_id:
prod = self.pool.get('product.product').browse(cr, uid, [product_id])[0]
value = {'product_uom_id': prod.uom_id.id}
- if product_uom_id != prod.uom_id.id:
- value = {'product_uom_id': prod.uom_id.id}
return {'value': value}
_defaults = {
'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
}
-
purchase_requisition_line()
-
class purchase_order(osv.osv):
_inherit = "purchase.order"
- _description = "purchase order"
_columns = {
'requisition_id' : fields.many2one('purchase.requisition','Purchase Requisition')
}
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 6b31d75e70e..72f11069fcf 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -120,13 +120,11 @@
-
-
-
-
-
-
-
+
+
+
+
+
@@ -148,6 +146,7 @@
purchase.requisitionformtree,form
+ {"search_default_user_id":uid}
diff --git a/addons/purchase_requisition/test/purchase_requisition.yml b/addons/purchase_requisition/test/purchase_requisition.yml
index ff3f10bc425..8983d238e0e 100644
--- a/addons/purchase_requisition/test/purchase_requisition.yml
+++ b/addons/purchase_requisition/test/purchase_requisition.yml
@@ -52,14 +52,12 @@
picking_policy: direct
pricelist_id: product.list0
shop_id: sale.shop
-
-
I confirm the sale order.
-
!workflow {model: sale.order, action: order_confirm, ref: sale_order_testtender0}
-
-
- I launch he scheduler to compute all procurements, and planify all requisitions orders.
+ I launch he scheduler to compute all procurements, and specify all requisitions orders.
-
!python {model: mrp.procurement.compute.all}: |
proc_obj = self.pool.get('mrp.procurement')
@@ -71,10 +69,8 @@
!record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
partner_address_id: base.res_partner_address_7
partner_id: base.res_partner_4
-
-
- I create a new purchase order .
-
+ I create a new purchase order.
-
!python {model: purchase.requisition.partner}: |
req_obj = self.pool.get('purchase.requisition')
@@ -84,16 +80,14 @@
1, "active_ids": ids, "active_id": ids[0], })
-
- I check that I have two purchase orders on the purchase tender
-
+ I check that I have two purchase orders on the purchase tender.
-
!python {model: purchase.order}: |
order_ids =self.search(cr, uid, [('origin','=','TEST/TENDER/0001')])
ids=len(order_ids)
assert (ids==2), "Purchase order hasn't Created"
-
- I set the purchase requisition as 'Not Exclusive'
-
+ I set the purchase requisition as 'Not Exclusive'.
-
!python {model: purchase.requisition}: |
ids =self.search(cr, uid, [('origin','=','TEST/TENDER/0001')])
@@ -101,7 +95,6 @@
-
I change the quantities so that the purchase order for DistriPC includes 3 pieces and the
purchase order for Asustek includes 2 pieces.
-
-
!python {model: purchase.order}: |
line_obj=self.pool.get('purchase.order.line')
@@ -118,7 +111,6 @@
line_obj.write(cr, uid, order_line2, {'product_qty':3})
-
I confirm and validate both purchase orders.
-
-
!python {model: purchase.order}: |
order_ids= self.search(cr, uid, [])
@@ -127,10 +119,8 @@
for id in order_ids:
wf_service.trg_validate(uid, 'purchase.order',id,'purchase_confirm', cr)
wf_service.trg_validate(uid, 'purchase.order',id,'purchase_approve', cr)
-
-
I check that the delivery order of the customer is in state 'Waiting Goods'.
-
-
!python {model: stock.picking }: |
picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001'),('type','=','delivery')])
@@ -138,10 +128,8 @@
pick=self.browse(cr,uid,picking_id[0])
assert (pick.state) =='confirmed'," Order is not confirm"
assert(pick.move_lines[0].state=='wating'),'Order is not wating"'
-
-
I receive the order of the supplier Asustek from the Incoming Products menu.
-
-
!python {model: stock.picking }: |
import time
@@ -165,7 +153,6 @@
self.do_partial(cr, uid, picking_id,partial_datas)
-
I receive the order of the supplier DistriPC from the Incoming Shipments menu.
-
-
!python {model: stock.picking }: |
import time
@@ -186,8 +173,7 @@
}
self.do_partial(cr, uid, picking_id,partial_datas)
-
- Now, I can check that the delivery order of the customer is in the state Available.
-
+ I check that the delivery order of the customer is in the state Available.
-
!python {model: stock.picking }: |
picking_id = self.search(cr, uid, [('origin','=','TEST/TENDER/0001'),('type','=','out')])
diff --git a/addons/purchase_requisition/test/purchase_requisition_exclusive.yml b/addons/purchase_requisition/test/purchase_requisition_exclusive.yml
index 42eb34ea725..e2cba67fca9 100644
--- a/addons/purchase_requisition/test/purchase_requisition_exclusive.yml
+++ b/addons/purchase_requisition/test/purchase_requisition_exclusive.yml
@@ -1,11 +1,9 @@
-
In order to test the purchase requisition module, I will do a sale order -> purchase_requisition ->
purchase flow and I will buy the required products at two different suppliers.
-
-
I start by creating a new product 'Laptop ACER', which is purchased at Asustek, in MTO,
with the generation of purchase requisitions.
-
-
!record {model: product.product, id: product_product_laptopacer1}:
categ_id: product.product_category_3
@@ -23,10 +21,8 @@
type: product
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
-
-
Then I sell 5 Laptop ACER to the customer Agrolait, sale order TEST/TENDER/0002
-
-
!record {model: sale.order, id: sale_order_testtender1}:
date_order: '2010-04-20'
@@ -53,7 +49,6 @@
I confirm sale order.
-
!workflow {model: sale.order, action: order_confirm, ref: sale_order_testtender1}
-
-
I launch he scheduler to compute all procurements, and planify all requisitions orders.
-
@@ -70,14 +65,13 @@
assert len(requisition_ids), "Purchase requisition hasn't Created"
-
On the purchase tender, I create a new purchase order for the supplier 'DistriPC' by clicking on
- the button 'New RfQ'. This opens a window to ask me the supplier and I set DistriPC .
+ the button 'New Request for Quotation'. This opens a window to ask me the supplier and I set DistriPC .
-
I Create purchase.requisition.partner .
-
!record {model: purchase.requisition.partner, id: purchase_requisition_partner_0}:
partner_address_id: base.res_partner_address_7
partner_id: base.res_partner_4
-
-
I create a new purchase order for the supplier 'DistriPC'.
-
@@ -87,7 +81,6 @@
self.create_order(cr, uid, [ref("purchase_requisition_partner_0")], {"lang":
'en_US', "active_model": "purchase.requisition", "tz": False, "record_id":
1, "active_ids": ids, "active_id": ids[0], })
-
-
I set the purchase tender as 'Exclusive'
-
@@ -95,7 +88,7 @@
ids =self.search(cr, uid, [('origin','=','TEST/TENDER/0002')])
self.write(cr,uid,ids[0],{'exclusive': 'exclusive' })
-
- I confirm and validate the RfQ of ASUStek.
+ I confirm and validate the Request for Quotation of ASUStek.
-
!python {model: purchase.order}: |
partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','ASUStek')])[0]
@@ -108,7 +101,7 @@
wf_service.trg_validate(uid, 'purchase.order',purchase_id,'purchase_confirm', cr)
wf_service.trg_validate(uid, 'purchase.order',purchase_id,'purchase_approve', cr)
-
- I check that RfQ of DistriPC is cancelled.
+ I check that Request for Quotation of DistriPC is cancelled.
-
!python {model: purchase.order}: |
partner_id=self.pool.get('res.partner').search(cr,uid,[('name','=','Distrib PC')])[0]
diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml
index 6c6349cddae..68cd5ccbe9b 100644
--- a/addons/resource/resource_view.xml
+++ b/addons/resource/resource_view.xml
@@ -12,9 +12,7 @@
-
-
-
+
@@ -58,7 +56,7 @@
-
+
@@ -191,6 +189,7 @@
Resourcesresource.resourcetree,form
+ {"search_default_user_id":uid}
diff --git a/addons/sale/__openerp__.py b/addons/sale/__openerp__.py
index 651945752a7..d43278381f5 100644
--- a/addons/sale/__openerp__.py
+++ b/addons/sale/__openerp__.py
@@ -65,6 +65,8 @@
'test/shipping_manual_sale_order.yml',
'test/prepaid_sale_order.yml',
'test/advance_invoice.yml',
+ 'test/so_make_line_invoice.yml',
+ 'test/so_make_invoice.yml',
'test/sale_procurement.yml',
],
'installable': True,
diff --git a/addons/sale/i18n/fr.po b/addons/sale/i18n/fr.po
index 3d9f2727a80..c81d4b09f23 100644
--- a/addons/sale/i18n/fr.po
+++ b/addons/sale/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-11-17 10:31+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-22 09:28+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:09+0000\n"
+"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -210,7 +210,7 @@ msgstr "Politique d'expédition"
#. module: sale
#: selection:sale.order,state:0 selection:sale.order.line,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "Annuler"
#. module: sale
#: selection:sale.order,state:0
diff --git a/addons/sale/i18n/pl.po b/addons/sale/i18n/pl.po
index 54f387c1bac..5a29059512f 100644
--- a/addons/sale/i18n/pl.po
+++ b/addons/sale/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-05-17 14:08+0000\n"
+"PO-Revision-Date: 2010-05-21 08:21+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-18 05:15+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: sale
@@ -222,7 +222,7 @@ msgstr "Wydawanie produktów"
#. module: sale
#: view:sale.order:0
msgid "Reference"
-msgstr "Odnośnik"
+msgstr "Numer"
#. module: sale
#: selection:sale.config.picking_policy,picking_policy:0
diff --git a/addons/sale/report/order.rml b/addons/sale/report/order.rml
index 1c205b6c256..1b1256cee19 100644
--- a/addons/sale/report/order.rml
+++ b/addons/sale/report/order.rml
@@ -134,7 +134,7 @@
Shipping address :
- [[ o.partner_id.name ]] [[ o.partner_id.title or '' ]]
+ [[ o.partner_id.title or '' ]] [[ o.partner_id.name ]][[ o.partner_shipping_id.title or '' ]] [[ o.partner_shipping_id.name ]][[ o.partner_shipping_id.street ]][[ o.partner_shipping_id.street2 or '' ]]
@@ -144,10 +144,10 @@
Invoice address :
- [[ o.partner_invoice_id.title or '' ]] [[ o.partner_invoice_id.name or '' ]]
+ [[ o.partner_invoice_id.title or '' ]] [[ o.partner_invoice_id.name or '' ]][[ o.partner_invoice_id.street ]] [[ o.partner_invoice_id.street2 and (', %s' % o.partner_invoice_id.street2 or '') ]][[ o.partner_invoice_id.zip or '' ]] [[ o.partner_invoice_id.city or '' ]]
- [[ o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name or '' ]] [[ o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '' ]]
+ [[ o.partner_invoice_id.state_id and o.partner_invoice_id.state_id.name or '' ]][[ o.partner_invoice_id.country_id and o.partner_invoice_id.country_id.name or '' ]]
@@ -155,7 +155,7 @@
- [[ o.partner_id.name ]] [[ o.partner_id.title or '' ]]
+ [[ o.partner_id.title or '' ]] [[ o.partner_id.name ]][[ o.partner_order_id.title or '' ]] [[ o.partner_order_id.name ]][[ o.partner_order_id.street ]][[ o.partner_order_id.street2 or '' ]]
@@ -187,7 +187,8 @@
Your Reference
- [[ o.state=='draft' and 'Quotation Date' or 'Date Ordered' ]]
+ [[ o.state=='draft' and removeParentNode('para') ]] Date Ordered
+ [[ o.state <> 'draft' and removeParentNode('para') ]] Quotation Date
[[ line.name ]]
@@ -370,4 +371,4 @@
-
+
\ No newline at end of file
diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py
index d1081a4b21f..c8b616ced78 100644
--- a/addons/sale/report/sale_report.py
+++ b/addons/sale/report/sale_report.py
@@ -57,6 +57,12 @@ class sale_report(osv.osv):
('done', 'Done'),
('cancel', 'Cancelled')
], 'Order State', readonly=True),
+ 'partner_invoice_id': fields.many2one('res.partner.address', 'Invoice Address Name', readonly=True),
+ 'partner_order_id': fields.many2one('res.partner.address', 'Ordering Contact Name', readonly=True),
+ 'partner_shipping_id': fields.many2one('res.partner.address', 'Shipping Address Name', readonly=True),
+ 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist', required=True),
+ 'analytic_account_id': fields.many2one('account.analytic.account', 'Analytic Account', readonly=True),
+ 'date_confirm': fields.date('Confirmation Date', readonly=True)
}
_order = 'date desc'
def init(self, cr):
@@ -81,7 +87,13 @@ class sale_report(osv.osv):
sum(l.product_uom_qty*l.price_unit) as price_total,
(sum(l.product_uom_qty*l.price_unit)/sum(l.product_uom_qty * u.factor))::decimal(16,2) as price_average,
count(*) as nbr,
- s.state
+ s.state,
+ s.partner_invoice_id as partner_invoice_id,
+ s.partner_order_id as partner_order_id,
+ s.partner_shipping_id as partner_shipping_id,
+ s.pricelist_id as pricelist_id,
+ s.project_id as analytic_account_id,
+ s.date_confirm as date_confirm
from
sale_order_line l
left join
@@ -97,7 +109,13 @@ class sale_report(osv.osv):
s.shop_id,
s.company_id,
s.fiscal_position,
- s.payment_term
+ s.payment_term,
+ s.partner_invoice_id,
+ s.partner_order_id,
+ s.partner_shipping_id,
+ s.pricelist_id,
+ s.project_id,
+ s.date_confirm
)
""")
sale_report()
@@ -167,10 +185,14 @@ class product_bought_by_sale_order(osv.osv):
_name = "product.bought.by.sale.order"
_description = "Product bought by sale order"
_auto = False
- _rec_name = 'partner'
+ _rec_name = 'month'
_columns = {
'total_products': fields.integer('Total Products', readonly=True),
- 'name': fields.char('Sale order', size=64, readonly=True)
+ 'product_id':fields.many2one('product.product', 'Product', readonly=True),
+ 'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'),
+ ('05','May'), ('06','June'), ('07','July'), ('08','August'), ('09','September'),
+ ('10','October'), ('11','November'), ('12','December')], 'Month',readonly=True),
+ 'year': fields.char('Year', size=64, readonly=True)
}
_order = 'total_products desc'
def init(self, cr):
@@ -179,8 +201,10 @@ class product_bought_by_sale_order(osv.osv):
create or replace view product_bought_by_sale_order as (
select
min(s.id) as id,
- count(*) as total_products,
- s.name as name
+ l.product_id as product_id,
+ to_char(l.create_date, 'MM') as month,
+ to_char(l.create_date, 'YYYY') as year,
+ count(*) as total_products
from
sale_order_line l
left join
@@ -188,7 +212,7 @@ class product_bought_by_sale_order(osv.osv):
where
s.state='manual' or s.state='progress'
group by
- s.name
+ l.product_id, to_char(l.create_date, 'MM'), to_char(l.create_date, 'YYYY')
)
""")
product_bought_by_sale_order()
diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml
index 72707f6e01d..fe88fa33555 100644
--- a/addons/sale/report/sale_report_view.xml
+++ b/addons/sale/report/sale_report_view.xml
@@ -24,6 +24,12 @@
+
+
+
+
+
+
@@ -72,10 +78,6 @@
-
+
+
+
+
+
+
+
+
@@ -112,9 +122,16 @@
+
+
+
+
+
+
+
-
+
@@ -127,7 +144,7 @@
formtree,graph
- {'search_default_month':1,'search_default_User':1,'group_by_no_leaf':1,'group_by':[]}
+ {'search_default_month':1,'search_default_User':1,'search_default_user_id':uid,'group_by_no_leaf':1,'group_by':[]}
@@ -205,7 +222,9 @@
tree
-
+
+
+
@@ -217,8 +236,9 @@
graph
-
-
+
+
+
@@ -227,7 +247,8 @@
Product bought by sale orderproduct.bought.by.sale.orderform
- tree,graph
+ graph,tree
+ [('year','=', time.strftime('%Y'))]
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 718f29f12d7..272ee0ecd70 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -52,6 +52,7 @@ def _incoterm_get(self, cr, uid, context=None):
class sale_order(osv.osv):
_name = "sale.order"
+ _log_create = True
_description = "Sale Order"
def copy(self, cr, uid, id, default=None, context=None):
@@ -106,17 +107,19 @@ class sale_order(osv.osv):
for id in ids:
res[id] = [0.0, 0.0]
cr.execute('''SELECT
- p.sale_id,sum(m.product_qty), m.state
+ p.sale_id,sum(m.product_qty), mp.state as mp_state
FROM
stock_move m
LEFT JOIN
stock_picking p on (p.id=m.picking_id)
+ LEFT JOIN
+ mrp_procurement mp on (mp.move_id=m.id)
WHERE
- p.sale_id = ANY(%s) GROUP BY m.state, p.sale_id''',(ids,))
- for oid, nbr, state in cr.fetchall():
- if state == 'cancel':
+ p.sale_id = ANY(%s) GROUP BY mp.state, p.sale_id''',(ids,))
+ for oid, nbr, mp_state in cr.fetchall():
+ if mp_state == 'cancel':
continue
- if state == 'done':
+ if mp_state == 'done':
res[oid][0] += nbr or 0.0
res[oid][1] += nbr or 0.0
else:
@@ -434,7 +437,7 @@ class sale_order(osv.osv):
'currency_id': order.pricelist_id.currency_id.id,
'comment': order.note,
'payment_term': pay_term,
- 'fiscal_position': order.partner_id.property_account_position.id,
+ 'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id,
'date_invoice' : context.get('date_invoice',False),
'company_id' : order.company_id.id,
}
@@ -508,18 +511,14 @@ class sale_order(osv.osv):
def action_invoice_end(self, cr, uid, ids, context=None):
if context is None:
context = {}
+
for order in self.browse(cr, uid, ids, context=context):
- val = {'invoiced': True}
- if order.state == 'invoice_except':
- val['state'] = 'progress'
-
for line in order.order_line:
- towrite = []
if line.state == 'exception':
- towrite.append(line.id)
- if towrite:
- self.pool.get('sale.order.line').write(cr, uid, towrite, {'state': 'confirmed'}, context=context)
- self.write(cr, uid, [order.id], val)
+ self.pool.get('sale.order.line').write(cr, uid, [line.id], {'state': 'confirmed'}, context=context)
+
+ if order.state == 'invoice_except':
+ self.write(cr, uid, [order.id], {'state' : 'progress'}, context=context)
return True
@@ -553,16 +552,10 @@ class sale_order(osv.osv):
return True
def action_wait(self, cr, uid, ids, *args):
- event_p = self.pool.get('res.partner.event.type').check(cr, uid, 'sale_open')
- event_obj = self.pool.get('res.partner.event')
+ for (id,name) in self.name_get(cr, uid, ids):
+ message = _('Quotation ') + " '" + name + "' "+ _("converted to sale order.")
+ self.log(cr, uid, id, message)
for o in self.browse(cr, uid, ids):
- if event_p:
- event_obj.create(cr, uid, {'name': 'Sale Order: '+ o.name,\
- 'partner_id': o.partner_id.id,\
- 'date': time.strftime('%Y-%m-%d %H:%M:%S'),\
- 'user_id': (o.user_id and o.user_id.id) or uid,\
- 'partner_type': 'customer', 'probability': 1.0,\
- 'planned_revenue': o.amount_untaxed})
if (o.order_policy == 'manual'):
self.write(cr, uid, [o.id], {'state': 'manual', 'date_confirm': time.strftime('%Y-%m-%d')})
else:
@@ -813,7 +806,7 @@ class sale_order_line(osv.osv):
return res
_name = 'sale.order.line'
- _description = 'Sale Order line'
+ _description = 'Sale Order Line'
_columns = {
'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}),
'name': fields.char('Description', size=256, required=True, select=True, readonly=True, states={'draft':[('readonly',False)]}),
@@ -1072,7 +1065,7 @@ class sale_order_line(osv.osv):
'product_uos':
[('category_id', '=', uos_category_id)]}
- elif uos: # only happens if uom is False
+ elif uos and not uom: # only happens if uom is False
result['product_uom'] = product_obj.uom_id and product_obj.uom_id.id
result['product_uom_qty'] = qty_uos / product_obj.uos_coeff
result['th_weight'] = result['product_uom_qty'] * product_obj.weight
@@ -1117,7 +1110,7 @@ class sale_order_line(osv.osv):
uom=False, qty_uos=0, uos=False, name='', partner_id=False,
lang=False, update_tax=True, date_order=False):
res = self.product_id_change(cursor, user, ids, pricelist, product,
- qty=0, uom=uom, qty_uos=qty_uos, uos=uos, name=name,
+ qty=qty, uom=uom, qty_uos=qty_uos, uos=uos, name=name,
partner_id=partner_id, lang=lang, update_tax=update_tax,
date_order=date_order)
if 'product_uom' in res['value']:
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index ba90e82f820..5add715a0cc 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -110,7 +110,7 @@
-
+
@@ -130,7 +130,8 @@
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order, product_packaging, parent.fiscal_position, True)"
/>
+ on_change="product_uom_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order)"
+ widget="selection"/>
-
-
@@ -191,7 +190,7 @@
-
+
@@ -238,7 +237,7 @@
-
+
@@ -256,18 +255,17 @@
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
@@ -279,7 +277,7 @@
sale.orderformtree,form,calendar,graph
- {'search_default_user_id':uid}
+ {"search_default_user_id":uid}
diff --git a/addons/sale/stock.py b/addons/sale/stock.py
index e2f632bf711..48c00d8afba 100644
--- a/addons/sale/stock.py
+++ b/addons/sale/stock.py
@@ -63,11 +63,8 @@ class stock_picking(osv.osv):
user, picking)
def _get_comment_invoice(self, cursor, user, picking):
- if picking.sale_id and picking.sale_id.note:
- if picking.note:
- return picking.note + '\n' + picking.sale_id.note
- else:
- return picking.sale_id.note
+ if picking.note or (picking.sale_id and picking.sale_id.note):
+ return picking.note or picking.sale_id.note
return super(stock_picking, self)._get_comment_invoice(cursor, user,
picking)
@@ -139,6 +136,10 @@ class stock_picking(osv.osv):
sale_lines = picking.sale_id.order_line
invoice_created = invoices[result[picking.id]]
+ for inv in invoice_obj.browse(cursor, user, [invoice_created.id], context=context):
+ if not inv.fiscal_position:
+ invoice_obj.write(cursor, user, [inv.id], {'fiscal_position': picking.sale_id.fiscal_position.id}, context=context)
+
if picking.sale_id.client_order_ref:
inv_name = picking.sale_id.client_order_ref + " : " + invoice_created.name
invoice_obj.write(cursor, user, [invoice_created.id], {'name': inv_name}, context=context)
@@ -188,6 +189,19 @@ class stock_picking(osv.osv):
})
return result
+
+ def action_cancel(self, cr, uid, ids, context={}):
+ res = super(stock_picking, self).action_cancel(cr, uid, ids, context=context)
+ for pick in self.browse(cr, uid, ids, context):
+ call_ship_end = True
+ if pick.sale_id:
+ for picks in pick.sale_id.picking_ids:
+ if picks.state not in ('done','cancel'):
+ call_ship_end = False
+ break
+ if call_ship_end:
+ self.pool.get('sale.order').action_ship_end(cr, uid, [pick.sale_id.id], context)
+ return res
stock_picking()
diff --git a/addons/sale/test/sale_procurement.yml b/addons/sale/test/sale_procurement.yml
index 5a73236f7bc..a5e78117674 100644
--- a/addons/sale/test/sale_procurement.yml
+++ b/addons/sale/test/sale_procurement.yml
@@ -3,6 +3,8 @@
products with different supply method and procurement method.
-
I create two products.
+-
+ I create one product Table.
-
!record {model: product.product, id: product_product_table0}:
categ_id: product.cat1
@@ -12,6 +14,8 @@
type: product
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
+-
+ I create another product Wood.
-
!record {model: product.product, id: product_product_wood0}:
categ_id: product.cat1
@@ -28,7 +32,6 @@
company_id: base.main_company
location_id: stock.stock_location_stock
logic: max
- name: OP/00002
product_id: product_product_wood0
product_max_qty: 15.0
product_min_qty: 10.0
@@ -38,12 +41,11 @@
-
Now I make a sale order for table.
-
- !record {model: sale.order, id: sale_order_so0}:
+ !record {model: sale.order, id: sale_order_so3}:
amount_total: 5.0
amount_untaxed: 5.0
date_order: '2010-04-30'
invoice_quantity: order
- name: SO006
order_line:
- company_id: base.main_company
delay: 7.0
@@ -66,7 +68,7 @@
-
I confirm the order.
-
- !workflow {model: sale.order, action: order_confirm, ref: sale_order_so0}
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so3}
-
I check that one procurement is generated.
-
diff --git a/addons/sale/test/shipping_manual_sale_order.yml b/addons/sale/test/shipping_manual_sale_order.yml
index 4bbbbb74dc5..c030a80c64a 100644
--- a/addons/sale/test/shipping_manual_sale_order.yml
+++ b/addons/sale/test/shipping_manual_sale_order.yml
@@ -211,7 +211,7 @@
!record {model: product.category, id: product_category_services0}:
name: Mobile Services
-
- I define LG Viewty Smart product template.
+ I define New Chocolate Slider Mobile template.
-
!record {model: product.template, id: product_template_newchocolateslidermobile0}:
categ_id: product_category_allproductssellable0
@@ -226,7 +226,7 @@
uom_id: product.product_uom_unit
uom_po_id: product.product_uom_unit
-
- I define LG Viewty Smart product.
+ I define New Chocolate Slider Mobile.
-
!record {model: product.product, id: product_product_newchocolateslidermobile0}:
categ_id: product_category_allproductssellable0
diff --git a/addons/sale/test/so_make_invoice.yml b/addons/sale/test/so_make_invoice.yml
new file mode 100644
index 00000000000..e34b11ffb2b
--- /dev/null
+++ b/addons/sale/test/so_make_invoice.yml
@@ -0,0 +1,341 @@
+-
+ In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
+-
+ I am going to sell my Mobile products to the customer with name Cleartrail
+-
+ I create View Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_view0}:
+ close_method: none
+ code: View
+ name: View
+ sign: 1
+-
+ I create Income Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: Income
+ name: Income
+ sign: 1
+-
+ I create Expense Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: Expense
+ name: Expense
+ sign: 1
+-
+ I create Cash Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_cash0}:
+ close_method: balance
+ code: Cash
+ name: Cash
+ sign: 1
+-
+ I create Minimal Chart Account.
+-
+ !record {model: account.account, id: account_account_minimalchart0}:
+ code: '0'
+ company_id: base.main_company
+ currency_mode: current
+ name: Minimal Chart
+ parent_left: 1
+ parent_right: 12
+ type: view
+ user_type: account_account_type_view0
+-
+ I create Payable Account.
+-
+ !record {model: account.account, id: account_account_payable1}:
+ code: AP
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_id: account_account_minimalchart0
+ parent_left: 2
+ parent_right: 3
+ reconcile: true
+ type: payable
+ user_type: account_account_type_expense0
+-
+ I create Receivable Account.
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: AR
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_id: account_account_minimalchart0
+ parent_left: 4
+ parent_right: 5
+ reconcile: true
+ type: receivable
+ user_type: account_account_type_income0
+-
+ I create Cash Account.
+-
+ !record {model: account.account, id: account_account_cash0}:
+ code: C
+ company_id: base.main_company
+ currency_mode: current
+ name: Cash
+ parent_id: account_account_minimalchart0
+ parent_left: 6
+ parent_right: 7
+ type: other
+ user_type: account_account_type_cash0
+-
+ I create Purchases Account.
+-
+ !record {model: account.account, id: account_account_purchases0}:
+ code: P
+ company_id: base.main_company
+ currency_mode: current
+ name: Purchases
+ parent_id: account_account_minimalchart0
+ parent_left: 8
+ parent_right: 9
+ type: other
+ user_type: account_account_type_expense0
+-
+ I create Sales Account.
+-
+ !record {model: account.account, id: account_account_sales0}:
+ code: S
+ company_id: base.main_company
+ currency_mode: current
+ name: Sales
+ parent_id: account_account_minimalchart0
+ parent_left: 10
+ parent_right: 11
+ type: other
+ user_type: account_account_type_income0
+-
+ I create Purchase Journal.
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: PUJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_purchases0
+ default_debit_account_id: account_account_purchases0
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_view
+-
+ I create Sale Journal.
+-
+ !record {model: account.journal, id: account_journal_salejournal0}:
+ code: SAJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_sales0
+ default_debit_account_id: account_account_sales0
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+-
+ I create Bank Journal.
+-
+ !record {model: account.journal, id: account_journal_bankjournal0}:
+ code: BNK
+ company_id: base.main_company
+ default_credit_account_id: account_account_cash0
+ default_debit_account_id: account_account_cash0
+ name: Bank Journal
+ sequence_id: account.sequence_journal
+ type: cash
+ view_id: account.account_journal_bank_view
+-
+ I create ir.property for account payable.
+-
+ !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_payable
+ name: property_account_expense_categ
+ value_reference: account.account,5
+-
+ I create ir.property for account receivable.
+-
+ !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_receivable
+ name: property_account_income_categ
+ value_reference: account.account,6
+-
+ I create Partner category Customers.
+-
+ !record {model: res.partner.category, id: res_partner_category_customers0}:
+ name: Customers
+-
+ I create Cleartrail Customer.
+-
+ !record {model: res.partner, id: res_partner_cleartrail0}:
+ category_id:
+ - res_partner_category_customers0
+ name: Cleartrail
+-
+ I create contact address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_1}:
+ partner_id: res_partner_cleartrail0
+ street: onam plaza, 14 B palasia A B Road
+ type: contact
+-
+ I create invoice address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_2}:
+ partner_id: res_partner_cleartrail0
+ street: sarda house 24 B palasia, A B Road
+ type: invoice
+-
+ I create delivery address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_3}:
+ partner_id: res_partner_cleartrail0
+ street: sangam house 15 B palasia, A B Road
+ type: delivery
+-
+ Customer Cleartrail has specific instrument requirement regarding the stockable products.
+-
+ I define product category Mobile Products Sellable.
+-
+ !record {model: product.category, id: product_category_allproductssellable0}:
+ name: Mobile Products Sellable
+-
+ I define product category Mobile Services.
+-
+ !record {model: product.category, id: product_category_services0}:
+ name: Mobile Services
+-
+ I define LG Viewty Smart product template.
+-
+ !record {model: product.template, id: product_template_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ procure_method: make_to_order
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define LG Viewty Smart product.
+-
+ !record {model: product.product, id: product_product_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 160.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 170.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define New Chocolate Slider Mobile template.
+-
+ !record {model: product.template, id: product_template_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ procure_method: make_to_order
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define New Chocolate Slider Mobile.
+-
+ !record {model: product.product, id: product_product_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 189.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 200.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I create a Sale Order for LG Viewty Smart for qty 500 having order_policy manual.
+-
+ !record {model: sale.order, id: sale_order_so4}:
+ date_order: '2010-05-12'
+ invoice_quantity: order
+ name: Test_SO004
+ order_line:
+ - name: New Chocolate Slider Mobile
+ price_unit: 200.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_newchocolateslidermobile0
+ product_uos_qty: 500.0
+ type: make_to_order
+ - name: LG Viewty Smart
+ price_unit: 170.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_lgviewtysmart0
+ product_uos_qty: 500.0
+ th_weight: 0.0
+ type: make_to_order
+ order_policy: manual
+ partner_id: sale.res_partner_cleartrail0
+ partner_invoice_id: sale.res_partner_address_2
+ partner_order_id: sale.res_partner_address_1
+ partner_shipping_id: sale.res_partner_address_3
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+-
+ I confirm the Sale Order.
+-
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so4}
+-
+ I create an invoice on sale order.
+-
+ !record {model: sale.make.invoice, id: sale_make_invoice_1}:
+ {}
+-
+ Invoice is created for specific sale order.
+-
+ !python {model: sale.make.invoice}: |
+ self.make_invoices(cr, uid, [ref("sale_make_invoice_1")], {"lang": 'en_US', "search_default_user_id":
+ 1, "tz": False, "active_model": 'sale.order', "active_ids": [ref("sale_order_so4")], "active_id":
+ ref("sale_order_so4"), })
+-
+ I verify that invoice regarding sale order has been created.
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so4"))
+ assert so.invoice_ids, "Invoices has not been generated for sale_order_so0"
+
+
\ No newline at end of file
diff --git a/addons/sale/test/so_make_line_invoice.yml b/addons/sale/test/so_make_line_invoice.yml
new file mode 100644
index 00000000000..de5782c8517
--- /dev/null
+++ b/addons/sale/test/so_make_line_invoice.yml
@@ -0,0 +1,342 @@
+-
+ In order to test the sale module in the Open-ERP, I need to configure details regarding product & customer.
+-
+ I am going to sell my Mobile products to the customer with name Cleartrail
+-
+ I create View Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_view0}:
+ close_method: none
+ code: View
+ name: View
+ sign: 1
+-
+ I create Income Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_income0}:
+ close_method: unreconciled
+ code: Income
+ name: Income
+ sign: 1
+-
+ I create Expense Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_expense0}:
+ close_method: unreconciled
+ code: Expense
+ name: Expense
+ sign: 1
+-
+ I create Cash Account Type.
+-
+ !record {model: account.account.type, id: account_account_type_cash0}:
+ close_method: balance
+ code: Cash
+ name: Cash
+ sign: 1
+-
+ I create Minimal Chart Account.
+-
+ !record {model: account.account, id: account_account_minimalchart0}:
+ code: '0'
+ company_id: base.main_company
+ currency_mode: current
+ name: Minimal Chart
+ parent_left: 1
+ parent_right: 12
+ type: view
+ user_type: account_account_type_view0
+-
+ I create Payable Account.
+-
+ !record {model: account.account, id: account_account_payable1}:
+ code: AP
+ company_id: base.main_company
+ currency_mode: current
+ name: Payable
+ parent_id: account_account_minimalchart0
+ parent_left: 2
+ parent_right: 3
+ reconcile: true
+ type: payable
+ user_type: account_account_type_expense0
+-
+ I create Receivable Account.
+-
+ !record {model: account.account, id: account_account_receivable0}:
+ code: AR
+ company_id: base.main_company
+ currency_mode: current
+ name: Receivable
+ parent_id: account_account_minimalchart0
+ parent_left: 4
+ parent_right: 5
+ reconcile: true
+ type: receivable
+ user_type: account_account_type_income0
+-
+ I create Cash Account.
+-
+ !record {model: account.account, id: account_account_cash0}:
+ code: C
+ company_id: base.main_company
+ currency_mode: current
+ name: Cash
+ parent_id: account_account_minimalchart0
+ parent_left: 6
+ parent_right: 7
+ type: other
+ user_type: account_account_type_cash0
+-
+ I create Purchases Account.
+-
+ !record {model: account.account, id: account_account_purchases0}:
+ code: P
+ company_id: base.main_company
+ currency_mode: current
+ name: Purchases
+ parent_id: account_account_minimalchart0
+ parent_left: 8
+ parent_right: 9
+ type: other
+ user_type: account_account_type_expense0
+-
+ I create Sales Account.
+-
+ !record {model: account.account, id: account_account_sales0}:
+ code: S
+ company_id: base.main_company
+ currency_mode: current
+ name: Sales
+ parent_id: account_account_minimalchart0
+ parent_left: 10
+ parent_right: 11
+ type: other
+ user_type: account_account_type_income0
+-
+ I create Purchase Journal.
+-
+ !record {model: account.journal, id: account_journal_purchasejournal0}:
+ code: PUJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_purchases0
+ default_debit_account_id: account_account_purchases0
+ name: Purchase Journal
+ sequence_id: account.sequence_purchase_journal
+ type: purchase
+ view_id: account.account_journal_view
+-
+ I create Sale Journal.
+-
+ !record {model: account.journal, id: account_journal_salejournal0}:
+ code: SAJ
+ company_id: base.main_company
+ default_credit_account_id: account_account_sales0
+ default_debit_account_id: account_account_sales0
+ name: Sale Journal
+ sequence_id: account.sequence_sale_journal
+ type: sale
+ view_id: account.account_journal_view
+-
+ I create Bank Journal.
+-
+ !record {model: account.journal, id: account_journal_bankjournal0}:
+ code: BNK
+ company_id: base.main_company
+ default_credit_account_id: account_account_cash0
+ default_debit_account_id: account_account_cash0
+ name: Bank Journal
+ sequence_id: account.sequence_journal
+ type: cash
+ view_id: account.account_journal_bank_view
+-
+ I create ir.property for account payable.
+-
+ !record {model: ir.property, id: ir_property_propertyaccountexpensecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_payable
+ name: property_account_expense_categ
+ value_reference: account.account,5
+-
+ I create ir.property for account receivable.
+-
+ !record {model: ir.property, id: ir_property_propertyaccountincomecateg0}:
+ company_id: base.main_company
+ fields_id: account.field_res_partner_property_account_receivable
+ name: property_account_income_categ
+ value_reference: account.account,6
+-
+ I create Partner category Customers.
+-
+ !record {model: res.partner.category, id: res_partner_category_customers0}:
+ name: Customers
+-
+ I create Cleartrail Customer.
+-
+ !record {model: res.partner, id: res_partner_cleartrail0}:
+ category_id:
+ - res_partner_category_customers0
+ name: Cleartrail
+-
+ I create contact address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_1}:
+ partner_id: res_partner_cleartrail0
+ street: onam plaza, 14 B palasia A B Road
+ type: contact
+-
+ I create invoice address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_2}:
+ partner_id: res_partner_cleartrail0
+ street: sarda house 24 B palasia, A B Road
+ type: invoice
+-
+ I create delivery address for Cleartrail.
+-
+ !record {model: res.partner.address, id: res_partner_address_3}:
+ partner_id: res_partner_cleartrail0
+ street: sangam house 15 B palasia, A B Road
+ type: delivery
+-
+ Customer Cleartrail has specific instrument requirement regarding the stockable products.
+-
+ I define product category Mobile Products Sellable.
+-
+ !record {model: product.category, id: product_category_allproductssellable0}:
+ name: Mobile Products Sellable
+-
+ I define product category Mobile Services.
+-
+ !record {model: product.category, id: product_category_services0}:
+ name: Mobile Services
+-
+ I define LG Viewty Smart product template.
+-
+ !record {model: product.template, id: product_template_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ procure_method: make_to_order
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define LG Viewty Smart product.
+-
+ !record {model: product.product, id: product_product_lgviewtysmart0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 170.0
+ mes_type: fixed
+ name: LG Viewty Smart
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 160.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 170.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 160.0
+ supply_method: produce
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define New Chocolate Slider Mobile template.
+-
+ !record {model: product.template, id: product_template_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ procure_method: make_to_order
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I define New Chocolate Slider Mobile.
+-
+ !record {model: product.product, id: product_product_newchocolateslidermobile0}:
+ categ_id: product_category_allproductssellable0
+ cost_method: standard
+ list_price: 200.0
+ mes_type: fixed
+ name: New Chocolate Slider Mobile
+ pricelist_purchase: 'Default Purchase Pricelist (0.00) : 189.00\n'
+ pricelist_sale: 'Public Pricelist (0.00) : 200.00\n'
+ procure_method: make_to_order
+ property_account_expense: sale.account_account_payable1
+ property_account_income: sale.account_account_receivable0
+ seller_delay: '1'
+ standard_price: 189.0
+ supply_method: buy
+ type: product
+ uom_id: product.product_uom_unit
+ uom_po_id: product.product_uom_unit
+-
+ I create a Sale Order for LG Viewty Smart for qty 500 having order_policy manual.
+-
+ !record {model: sale.order, id: sale_order_so3}:
+ date_order: '2010-05-12'
+ invoice_quantity: order
+ name: Test_SO003
+ order_line:
+ - name: New Chocolate Slider Mobile
+ price_unit: 200.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_newchocolateslidermobile0
+ product_uos_qty: 500.0
+ type: make_to_order
+ - name: LG Viewty Smart
+ price_unit: 170.0
+ product_uom: product.product_uom_unit
+ product_uom_qty: 500.0
+ state: draft
+ delay: 7.0
+ product_id: sale.product_product_lgviewtysmart0
+ product_uos_qty: 500.0
+ th_weight: 0.0
+ type: make_to_order
+ order_policy: manual
+ partner_id: sale.res_partner_cleartrail0
+ partner_invoice_id: sale.res_partner_address_2
+ partner_order_id: sale.res_partner_address_1
+ partner_shipping_id: sale.res_partner_address_3
+ picking_policy: direct
+ pricelist_id: product.list0
+ shop_id: sale.shop
+-
+ I confirm the Sale Order.
+-
+ !workflow {model: sale.order, action: order_confirm, ref: sale_order_so3}
+-
+ I create an invoice on sale order line.
+-
+ !record {model: sale.order.line.make.invoice, id: sale_order_line_make_invoice_0}:
+ {}
+-
+ invoice is created for specific sale order line.
+-
+ !python {model: sale.order.line.make.invoice}: |
+ sale_order_obj = self.pool.get('sale.order')
+ so = sale_order_obj.browse(cr, uid, ref("sale_order_so3"))
+ sol = so.order_line[0]
+ self.make_invoices(cr, uid, [ref("sale_order_line_make_invoice_0")], {"lang":
+ 'en_US', "active_model": "sale.order.line", "active_ids": [ref(sol.id)], "tz":
+ False, "active_id": ref(sol.id), })
+-
+ I verify that invoice regarding sale order line has been created.
+-
+ !python {model: sale.order}: |
+ so = self.browse(cr, uid, ref("sale_order_so3"))
+ assert so.invoice_ids, "Invoices has not been generated for sale_order_so0"
diff --git a/addons/sale/wizard/sale_line_invoice.py b/addons/sale/wizard/sale_line_invoice.py
index 4bf3074db54..195931ecb04 100644
--- a/addons/sale/wizard/sale_line_invoice.py
+++ b/addons/sale/wizard/sale_line_invoice.py
@@ -20,22 +20,12 @@
##############################################################################
from osv import fields, osv
-from service import web_services
-import wizard
+from tools.translate import _
import netsvc
-import ir
-import pooler
class sale_order_line_make_invoice(osv.osv_memory):
_name = "sale.order.line.make.invoice"
_description = "Sale OrderLine Make_invoice"
- _columns = {
- 'grouped': fields.boolean('Group the invoices'),
- }
- _default = {
- 'grouped' : lambda *a: False
- }
-
def make_invoices(self, cr, uid, ids, context):
"""
To make invoices.
@@ -82,7 +72,7 @@ class sale_order_line_make_invoice(osv.osv_memory):
'currency_id' : order.pricelist_id.currency_id.id,
'comment': order.note,
'payment_term': pay_term,
- 'fiscal_position': order.partner_id.property_account_position.id
+ 'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id,
}
inv_id = self.pool.get('account.invoice').create(cr, uid, inv)
return inv_id
@@ -110,6 +100,8 @@ class sale_order_line_make_invoice(osv.osv_memory):
wf_service.trg_validate(uid, 'sale.order', line.order_id.id, 'all_lines', cr)
sales_order_obj.write(cr,uid,[line.order_id.id],{'state' : 'progress'})
+ if not invoices:
+ raise osv.except_osv(_('Warning'),_('Invoice cannot be created for this Sale Order Line due to one of the following reasons:\n1.The state of this sale order line is either "draft" or "cancel"!\n2.The Sale Order Line is Invoiced!'))
for result in invoices.values():
order = result[0][0].order_id
il = map(lambda x: x[1], result)
diff --git a/addons/sale/wizard/sale_line_invoice.xml b/addons/sale/wizard/sale_line_invoice.xml
index 90bdf2a6828..436fabc91fc 100644
--- a/addons/sale/wizard/sale_line_invoice.xml
+++ b/addons/sale/wizard/sale_line_invoice.xml
@@ -8,8 +8,6 @@
-
-
diff --git a/addons/sale/wizard/sale_make_invoice.py b/addons/sale/wizard/sale_make_invoice.py
index c5d7bbaceea..5ea01b1db6c 100644
--- a/addons/sale/wizard/sale_make_invoice.py
+++ b/addons/sale/wizard/sale_make_invoice.py
@@ -34,14 +34,19 @@ class sale_make_invoice(osv.osv_memory):
_default = {
'grouped' : lambda *a: False
}
-
+ def view_init(self, cr, uid, fields_list, context=None):
+ record_id = context and context.get('active_id', False)
+ order = self.pool.get('sale.order').browse(cr, uid, record_id)
+ if order.state=='draft':
+ raise osv.except_osv(_('Warning !'),'You can not create invoice when sale order is not confirmed.')
+ return False
def make_invoices(self, cr, uid, ids, context={}):
order_obj = self.pool.get('sale.order')
newinv = []
data=self.read(cr,uid,ids)[0]
order_obj.action_invoice_create(cr, uid, context.get(('active_ids'),[]), data['grouped'],date_inv = data['invoice_date'])
+ wf_service = netsvc.LocalService("workflow")
for id in context.get(('active_ids'),[]):
- wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'sale.order', id, 'manual_invoice', cr)
for o in order_obj.browse(cr, uid, context.get(('active_ids'),[]), context):
diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py
index 2d5320d1ff6..2861a046205 100644
--- a/addons/sale/wizard/sale_make_invoice_advance.py
+++ b/addons/sale/wizard/sale_make_invoice_advance.py
@@ -22,10 +22,6 @@ from osv import fields, osv
from service import web_services
from tools.translate import _
import ir
-import netsvc
-import pooler
-
-
class sale_advance_payment_inv(osv.osv_memory):
_name = "sale.advance.payment.inv"
@@ -95,7 +91,7 @@ class sale_advance_payment_inv(osv.osv_memory):
'currency_id' :sale.pricelist_id.currency_id.id,
'comment': '',
'payment_term':sale.payment_term.id,
- 'fiscal_position': sale.partner_id.property_account_position.id
+ 'fiscal_position': sale.fiscal_position.id or sale.partner_id.property_account_position.id
}
inv_id = inv_obj.create(cr, uid, inv)
diff --git a/addons/sale_crm/sale_crm.py b/addons/sale_crm/sale_crm.py
index 613d8af7b7a..14c1a07e336 100644
--- a/addons/sale_crm/sale_crm.py
+++ b/addons/sale_crm/sale_crm.py
@@ -23,7 +23,6 @@ from osv import osv,fields
class sale_order(osv.osv):
_inherit = 'sale.order'
- _description = 'Sale orders'
_columns = {
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
}
diff --git a/addons/sale_crm/sale_crm_view.xml b/addons/sale_crm/sale_crm_view.xml
index 535dbd39a68..7a8cd419718 100644
--- a/addons/sale_crm/sale_crm_view.xml
+++ b/addons/sale_crm/sale_crm_view.xml
@@ -34,8 +34,7 @@
-
-
+ [[line.product_id.code ]] [[ line.product_id and line.product_id.name or '']]
- [[ (line.prodlot_id and (line.prodlot_id.name + '/' + line.prodlot_id.ref)) or ' ' ]]
+ [[ (line.prodlot_id and (line.prodlot_id.name + (line.prodlot_id.ref and ('/' + line.prodlot_id.ref) or ''))) or ' ' ]]
[[ formatLang(line.product_qty) ]]
diff --git a/addons/sale_journal/picking_journal_view.xml b/addons/sale_journal/picking_journal_view.xml
index 37e7e4846c1..f6b59668150 100644
--- a/addons/sale_journal/picking_journal_view.xml
+++ b/addons/sale_journal/picking_journal_view.xml
@@ -57,7 +57,6 @@
-
@@ -73,6 +72,7 @@
sale_journal.picking.journalformtree,form
+ {"search_default_user_id":uid}
diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py
index c041a934274..8b636241285 100644
--- a/addons/sale_journal/sale_journal.py
+++ b/addons/sale_journal/sale_journal.py
@@ -25,7 +25,7 @@ import time
class sale_journal_invoice_type(osv.osv):
_name = 'sale_journal.invoice.type'
- _description = 'Invoice Types'
+ _description = 'Invoice Type'
_columns = {
'name': fields.char('Invoice Type', size=64, required=True),
'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the invoice type without removing it."),
diff --git a/addons/sale_journal/sale_journal_view.xml b/addons/sale_journal/sale_journal_view.xml
index 23142c3fcaa..c1e415b8833 100644
--- a/addons/sale_journal/sale_journal_view.xml
+++ b/addons/sale_journal/sale_journal_view.xml
@@ -99,7 +99,6 @@
-
@@ -115,6 +114,7 @@
sale_journal.sale.journalformtree,form
+ {"search_default_user_id":uid}
diff --git a/addons/scrum/i18n/fr.po b/addons/scrum/i18n/fr.po
index 5dd1943ab4a..9d1982fc341 100644
--- a/addons/scrum/i18n/fr.po
+++ b/addons/scrum/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 13:49+0000\n"
-"Last-Translator: nel \n"
+"PO-Revision-Date: 2010-05-22 09:49+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:59+0000\n"
+"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: scrum
@@ -29,7 +29,7 @@ msgstr "Nom du Rendez-vous"
#. module: scrum
#: model:process.transition,note:scrum.process_transition_backlogtask0
msgid "From backlog create task."
-msgstr ""
+msgstr "Créer une tâche à partir du référentiel"
#. module: scrum
#: model:ir.actions.act_window,name:scrum.action_view_task4
@@ -46,17 +46,17 @@ msgstr "Mes Sprints Ouverts (Directeur de Produit)"
#. module: scrum
#: model:process.node,note:scrum.process_node_productbacklog0
msgid "Create task from backlogs"
-msgstr ""
+msgstr "Créer une tâche à partir des référentiels"
#. module: scrum
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr ""
+msgstr "Nom de modèle invalide pour la définition de l'action"
#. module: scrum
#: model:ir.module.module,shortdesc:scrum.module_meta_information
msgid "Scrum, Agile Development Method"
-msgstr ""
+msgstr "Scrum, méthode de développement agile"
#. module: scrum
#: field:scrum.project,progress_rate:0
@@ -69,6 +69,8 @@ msgid ""
"Total remaining time, can be re-estimated periodically by the assignee of "
"the task."
msgstr ""
+"Le temps restant total peut être réévalué périodiquement par le prescripteur "
+"de la tâche."
#. module: scrum
#: field:scrum.project,child_id:0
@@ -88,7 +90,7 @@ msgstr "Est-ce que l'estimation du Retard du Sprint est correcte ?"
#. module: scrum
#: field:scrum.project,members:0
msgid "Project Members"
-msgstr ""
+msgstr "Membres du projet"
#. module: scrum
#: view:scrum.project:0
@@ -106,6 +108,8 @@ msgid ""
"Header added at the beginning of the email for the warning message sent to "
"the customer when a task is closed."
msgstr ""
+"L'entête est ajouté au début de l'email pour que le message d'avertissement "
+"soit envoyer au client lorsque la tâche est fermé."
#. module: scrum
#: field:scrum.task,priority:0
@@ -127,6 +131,8 @@ msgstr "Voir le Retard du Projet"
msgid ""
"Project's member. Not used in any computation, just for information purpose."
msgstr ""
+"Membre du projet. Non utilisé dans aucun calcul, juste proposer à titre "
+"d'information"
#. module: scrum
#: selection:scrum.product.backlog,priority:0
@@ -150,6 +156,8 @@ msgid ""
"Estimated time to do the task, usually set by the project manager when the "
"task is in draft state."
msgstr ""
+"Temps estimé pour réaliser la tâche, habituellement fixé par le responsable "
+"du projet quand la tâche est à l'état brouillon"
#. module: scrum
#: field:scrum.project,notes:0
@@ -175,6 +183,8 @@ msgid ""
"If you check this field, the project manager will receive a request each "
"time a task is completed by his team."
msgstr ""
+"Si vous cochez ce champs, le responsable du projet recevra une requête "
+"chaque fois qu'une tâche est completé par son équipe."
#. module: scrum
#: selection:scrum.project,state:0
@@ -190,7 +200,7 @@ msgstr "Nom de l'équipe"
#. module: scrum
#: field:scrum.project,warn_header:0
msgid "Mail Header"
-msgstr ""
+msgstr "En-tête de courrier"
#. module: scrum
#: field:scrum.project,sprint_size:0
@@ -205,7 +215,7 @@ msgstr "Date de fin"
#. module: scrum
#: help:scrum.task,effective_hours:0
msgid "Computed using the sum of the task work done."
-msgstr ""
+msgstr "Calculé en utilisant la somme du travail de tâche effectuée."
#. module: scrum
#: help:scrum.project,warn_customer:0
@@ -213,6 +223,8 @@ msgid ""
"If you check this, the user will have a popup when closing a task that "
"propose a message to send by email to the customer."
msgstr ""
+"Si vous cochez la case, l'utilisateur verra un menu surgissant quand une "
+"tâche sera fermé proposant un message pour envoyer un mail au client."
#. module: scrum
#: model:ir.actions.act_window,name:scrum.action_sprint_task_open
@@ -239,7 +251,7 @@ msgstr "Date limite"
#: field:scrum.project,partner_id:0
#: field:scrum.task,partner_id:0
msgid "Partner"
-msgstr ""
+msgstr "Partenaire"
#. module: scrum
#: field:scrum.product.backlog,planned_hours:0
@@ -251,7 +263,7 @@ msgstr "Heures planifiés"
#. module: scrum
#: selection:scrum.project,state:0
msgid "Template"
-msgstr ""
+msgstr "Modèle"
#. module: scrum
#: field:scrum.product.backlog,priority:0
@@ -268,11 +280,12 @@ msgstr "État"
#: help:scrum.project,progress_rate:0
msgid "Percent of tasks closed according to the total of tasks todo."
msgstr ""
+"Pourcentage des tâches fermés en accord avec le total des tâches à faire."
#. module: scrum
#: help:scrum.project,notes:0
msgid "Internal description of the project."
-msgstr ""
+msgstr "Description interne du projet"
#. module: scrum
#: field:scrum.sprint,meetings_id:0
@@ -282,7 +295,7 @@ msgstr "Scrum Journalier"
#. module: scrum
#: help:scrum.task,total_hours:0
msgid "Computed as: Time Spent + Remaining Time."
-msgstr ""
+msgstr "Calculer comme: Temps passé + Temps restant"
#. module: scrum
#: field:scrum.task,type:0
@@ -292,7 +305,7 @@ msgstr "Type"
#. module: scrum
#: view:scrum.project:0
msgid "Scrum Data"
-msgstr ""
+msgstr "Données Scrum"
#. module: scrum
#: selection:scrum.product.backlog,priority:0
@@ -303,7 +316,7 @@ msgstr "Moyenne"
#. module: scrum
#: field:scrum.project,total_hours:0
msgid "Total Time"
-msgstr ""
+msgstr "Temps Total"
#. module: scrum
#: model:ir.ui.menu,name:scrum.next_id_67
@@ -356,7 +369,7 @@ msgstr "Voir les tâches du projet"
#. module: scrum
#: field:scrum.task,delay_hours:0
msgid "Delay Hours"
-msgstr ""
+msgstr "Delais en heures"
#. module: scrum
#: field:scrum.project,contact_id:0
@@ -392,18 +405,18 @@ msgstr "Créer tâches"
#. module: scrum
#: field:scrum.task,progress:0
msgid "Progress (%)"
-msgstr ""
+msgstr "Progression (%)"
#. module: scrum
#: help:scrum.task,progress:0
msgid "Computed as: Time Spent / Total Time."
-msgstr ""
+msgstr "Calculer comme: Temps passé / Temps total"
#. module: scrum
#: field:scrum.project,scrum:0
#: field:scrum.task,scrum:0
msgid "Is Scrum"
-msgstr ""
+msgstr "Est Scrum"
#. module: scrum
#: model:ir.actions.act_window,name:scrum.action_product_backlog_form_draft
@@ -482,7 +495,7 @@ msgstr "Mes Tâches Ouvertes"
#. module: scrum
#: field:scrum.project,manager:0
msgid "Project Manager"
-msgstr ""
+msgstr "Responsable du projet"
#. module: scrum
#: selection:scrum.project,state:0
@@ -511,13 +524,13 @@ msgstr "Sprints Ouverts"
#. module: scrum
#: field:scrum.project,effective_hours:0
msgid "Time Spent"
-msgstr ""
+msgstr "Temps écoulé"
#. module: scrum
#: field:scrum.project,complete_name:0
#: field:scrum.project,name:0
msgid "Project Name"
-msgstr ""
+msgstr "Nom du Projet"
#. module: scrum
#: field:scrum.project,product_owner_id:0
@@ -561,6 +574,9 @@ msgid ""
"Computed as: Total Time - Estimated Time. It gives the difference of the "
"time estimated by the project manager and the real time to close the task."
msgstr ""
+"Calculer comme: Temps total - Temps estimé. Cela donne la différence de "
+"temps estimé par le responsable projet et le temps réel pour fermer cette "
+"tâche."
#. module: scrum
#: field:scrum.task,timebox_id:0
@@ -576,7 +592,7 @@ msgstr "Sprints Brouillon"
#. module: scrum
#: field:scrum.project,timesheet_id:0
msgid "Working Time"
-msgstr ""
+msgstr "Temps de travail"
#. module: scrum
#: field:scrum.task,work_ids:0
@@ -591,7 +607,7 @@ msgstr "Voir les retards du sprint"
#. module: scrum
#: field:scrum.task,delegated_user_id:0
msgid "Delegated To"
-msgstr ""
+msgstr "Déléguer à"
#. module: scrum
#: field:scrum.task,date_close:0
@@ -611,7 +627,7 @@ msgstr "Retard Correct"
#. module: scrum
#: help:scrum.project,effective_hours:0
msgid "Sum of spent hours of all tasks related to this project."
-msgstr ""
+msgstr "Total des heures passés de toutes les tâches reliés à ce projet"
#. module: scrum
#: help:scrum.task,project_id:0
@@ -619,16 +635,18 @@ msgid ""
"If you have [?] in the project name, it means there are no analytic account "
"linked to this project."
msgstr ""
+"Si vous avez [?] dans le nom du projet, cela signifie que vous n'avez pas de "
+"compte analytique lié à ce projet"
#. module: scrum
#: help:scrum.project,planned_hours:0
msgid "Sum of planned hours of all tasks related to this project."
-msgstr ""
+msgstr "Somme des tâches planifiés de toutes les tâches relier à ce projet."
#. module: scrum
#: field:scrum.project,warn_customer:0
msgid "Warn Partner"
-msgstr ""
+msgstr "Avertir le partenaire"
#. module: scrum
#: model:ir.actions.act_window,name:scrum.action_sprint_open_tree4
@@ -648,6 +666,10 @@ msgid ""
"projects. It enables you to connect projects with budgets, planning, cost "
"and revenue analysis, timesheets on projects, etc."
msgstr ""
+"Lier ce projet à un compte analytique si vous souhaitez une gestion "
+"financière sur les projets. Il vous active la gestion des projets avec les "
+"budgets, agenda, coût, analyse de revenu, feuilles de temps sur le projet, "
+"etc."
#. module: scrum
#: selection:scrum.product.backlog,state:0
@@ -680,12 +702,12 @@ msgstr "Heures effectives"
#. module: scrum
#: field:scrum.project,warn_manager:0
msgid "Warn Manager"
-msgstr ""
+msgstr "Avertir le responsable"
#. module: scrum
#: selection:scrum.task,state:0
msgid "In Progress"
-msgstr ""
+msgstr "En cours"
#. module: scrum
#: field:scrum.sprint,review:0
diff --git a/addons/scrum/scrum_view.xml b/addons/scrum/scrum_view.xml
index 379dc66a4fd..394ea4c4219 100644
--- a/addons/scrum/scrum_view.xml
+++ b/addons/scrum/scrum_view.xml
@@ -44,11 +44,9 @@
-
+
-
-
@@ -149,13 +147,7 @@
domain="[('sprint_id','=',False)]"
help="Backlogs Not Assigned To Sprints."/>
-
-
-
+
@@ -173,6 +165,7 @@
Product Backlogsscrum.product.backlogform
+ {"search_default_user_id":uid}
-
+
-
-
-
+
@@ -298,7 +287,9 @@
scrum.sprintformtree,form
+ {'search_default_filter_current': 1}
+ {"search_default_scrum_master_id":uid}, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-11-26 06:00+0000\n"
+"PO-Revision-Date: 2010-05-22 09:14+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
+"Language-Team: French \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-05-23 03:57+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,bcc:0
+msgid "BCC to"
+msgstr "Copie cachée à"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "__number__ for Invoice / Sales Number"
+msgstr "__number__ pour la facture / Numéro de vente"
+
+#. module: smtpclient
+#: field:email.smtpclient,ssl:0
+msgid "Use SSL?"
+msgstr "Utiliser SSL?"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Start Server"
+msgstr "Démarrer le serveur"
+
+#. module: smtpclient
+#: model:ir.actions.wizard,name:smtpclient.wizard_email_verifycode
+msgid "Verify Server"
+msgstr "Vérifier le serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient,priority:0
+msgid "Server Priority"
+msgstr "Priorité du serveur"
+
+#. module: smtpclient
+#: help:email.sendcode,init,emailto:0
+msgid "Enter the address Email where you want to get the Verification Code"
+msgstr ""
+"Saisir l'adresse email à laquelle vous voulez envoyer le code de vérification"
+
+#. module: smtpclient
+#: selection:email.smtpclient,auth_type:0
+msgid "Other Mail Servers"
+msgstr "Autres serveurs de courrier"
+
+#. module: smtpclient
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Nom de modèle invalide pour la définition de l'action"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,to:0
+msgid "Mail to"
+msgstr "Envoyer par email à"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Message Error!"
+msgstr "Erreur de message!"
+
+#. module: smtpclient
+#: field:email.smtpclient,name:0
+msgid "Server Name"
+msgstr "Nom du serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient,header_ids:0
+msgid "Default Headers"
+msgstr "Entêtes de courrier par défaut"
+
+#. module: smtpclient
+#: wizard_button:email.testemail,init,send:0
+msgid "Send Email"
+msgstr "Envoyer un email"
+
+#. module: smtpclient
+#: field:res.company.address,company_id:0
+msgid "Company"
+msgstr "Société"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Set to Draft"
+msgstr "Mettre en brouillon"
+
+#. module: smtpclient
+#: code:addons/smtpclient/wizard/verifycode.py:0
+#, python-format
+msgid "Server already verified!"
+msgstr "Serveur déjà vérifié!"
+
+#. module: smtpclient
+#: code:addons/smtpclient/wizard/sendcode.py:0
+#: code:addons/smtpclient/wizard/testemail.py:0
+#, python-format
+msgid "Verification Failed. Please check the Server Configuration!"
+msgstr ""
+"Échec de vérification. Merci de vérifier le serveur de configuration!"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "SMTP Server Error!"
+msgstr "Erreur du serveur SMTP!"
+
+#. module: smtpclient
+#: field:email.smtpclient,auth_type:0
+#: field:email.smtpclient,type:0
+msgid "Server Type"
+msgstr "Type de serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient,from_email:0
+msgid "Email From"
+msgstr "Email de"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "User Information"
+msgstr "Information utilisateur"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "OpenERP SMTP server Email Registration Code!"
+msgstr "Code d'enregistrement email du serveur SMTP OpenERP!"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_report_smtp_server
+#: view:report.smtp.server:0
+msgid "Server Statistics"
+msgstr "Statistiques du serveur"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Messages"
+msgstr "Messages"
+
+#. module: smtpclient
+#: selection:email.smtpclient,type:0
+#: selection:res.company.address,name:0
+msgid "Sale"
+msgstr "Vente"
+
+#. module: smtpclient
+#: field:email.headers,value:0
+msgid "Value"
+msgstr "Valeur"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Access Permission"
+msgstr "Permission d'accès"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_email_headers
+msgid "Email Headers"
+msgstr "Entêtes de courrier"
+
+#. module: smtpclient
+#: field:email.smtpclient,delete_queue:0
+msgid "Queue Option"
+msgstr "Option de file d'attente"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Please configure Email Server Messages [Verification / Test]"
+msgstr ""
+"Merci de configurer les messages du serveur email [Vérification / Test]"
+
+#. module: smtpclient
+#: code:addons/smtpclient/wizard/verifycode.py:0
+#, python-format
+msgid "Verification failed. Invalid Verification Code!"
+msgstr "Échec de vérification. Code de vérification non valide!"
+
+#. module: smtpclient
+#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_history
+msgid "Email History"
+msgstr "Historique des emails"
+
+#. module: smtpclient
+#: view:email.smtpclient.history:0
+msgid "Server History"
+msgstr "Historique du serveur"
+
+#. module: smtpclient
+#: selection:email.smtpclient,auth_type:0
+msgid "Yahoo!!! Server"
+msgstr "Serveur Yahoo!"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+#: field:email.smtpclient,test_email:0
+msgid "Test Message"
+msgstr "Message de test"
+
+#. module: smtpclient
+#: field:report.smtp.server,server_id:0
+msgid "Server ID"
+msgstr "ID du serveur"
+
+#. module: smtpclient
+#: help:email.smtpclient,delete_queue_period:0
+msgid "delete emails/contents from email queue after specified no of days"
+msgstr ""
+"effacer les emails/contenu placé en attente après le nombre de jours spécifié"
+
+#. module: smtpclient
+#: field:report.smtp.server,no:0
+msgid "Total No."
+msgstr "Nombre total"
+
+#. module: smtpclient
+#: help:email.smtpclient,process_id:0
+msgid "Mail Transport Agent Process"
+msgstr "Processus d'agent de transport email"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "__user__ for User Name"
+msgstr "__user__ pour le nom d'utilisateur"
+
+#. module: smtpclient
+#: field:email.smtpclient,date_create:0
+msgid "Date Create"
+msgstr "Date de création"
+
+#. module: smtpclient
+#: field:email.smtpclient,state:0
+msgid "Server Status"
+msgstr "État du serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,error:0
+msgid "Last Error"
+msgstr "Dernière erreur"
+
+#. module: smtpclient
+#: wizard_view:email.sendcode,init:0
+#: wizard_button:email.sendcode,init,send:0
+msgid "Send Code"
+msgstr "Envoyer un code"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,name:0
+msgid "Subject"
+msgstr "Sujet"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Read Error!"
+msgstr "Erreur de lecture!"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Unable to read Server Settings"
+msgstr "Impossible de lire les paramètres du serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient,server_statistics:0
+msgid "Statistics"
+msgstr "Statistiques"
+
+#. module: smtpclient
+#: wizard_view:email.testemail,init:0
+msgid "Test Email"
+msgstr "Email de test"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,server_id:0
+msgid "Smtp Server"
+msgstr "Serveur SMTP"
+
+#. module: smtpclient
+#: field:res.company,addresses:0
+msgid "Email Addresses"
+msgstr "Adresses email"
+
+#. module: smtpclient
+#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_history_tree
+#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server_history
+msgid "Email Server History"
+msgstr "Historique du serveur email"
+
+#. module: smtpclient
+#: selection:email.smtpclient.queue,state:0
+msgid "Waiting"
+msgstr "En attente"
+
+#. module: smtpclient
+#: help:email.testemail,init,emailto:0
+msgid "Enter the address Email where you want to get the Test Email"
+msgstr ""
+"Saisir l'adresse email à laquelle vous voulez recevoir l'email de test"
+
+#. module: smtpclient
+#: selection:email.smtpclient,state:0
+msgid "Not Verified"
+msgstr "Non vérifié"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,email:0
+msgid "Email"
+msgstr "Email"
+
+#. module: smtpclient
+#: selection:email.smtpclient.queue,state:0
+msgid "Sent"
+msgstr "Envoyé"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,user_id:0
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#. module: smtpclient
+#: field:res.company.address,name:0
+msgid "Address Type"
+msgstr "Type d'adresse"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Permission"
+msgstr "Permission"
+
+#. module: smtpclient
+#: view:email.smtpclient.queue:0
+msgid "Message with All Headers"
+msgstr "Message avec entêtes complètes"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Message Headers"
+msgstr "Entêtes de message"
+
+#. module: smtpclient
+#: field:ir.actions.server,report_id:0
+msgid "Report"
+msgstr "Rapport"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Other Information"
+msgstr "Autre information"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: smtpclient
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr "Paramètres non valides"
+
+#. module: smtpclient
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "XML non valide pour l'architecture de la vue !"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+#: field:email.smtpclient,disclaimers:0
+msgid "Disclaimers"
+msgstr "Avertissement de responsabilité limitée"
+
+#. module: smtpclient
+#: field:report.smtp.server,name:0
+msgid "Server"
+msgstr "Serveur"
+
+#. module: smtpclient
+#: view:res.company:0
+msgid "SMTP Settings"
+msgstr "Paramètres SMTP"
+
+#. module: smtpclient
+#: help:email.smtpclient,body:0
+msgid ""
+"The message text that will be send along with the email which is send "
+"through this server"
+msgstr "Le message texte qui sera envoyé avec l'email envoyé par ce serveur"
+
+#. module: smtpclient
+#: model:ir.actions.wizard,name:smtpclient.wizard_email_testemail
+msgid "Send Test Email"
+msgstr "Envoyer email de test"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_email_smtpclient_queue
+msgid "Email Queue"
+msgstr "File d'attente email"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Server Information"
+msgstr "Information sur le serveur"
+
+#. module: smtpclient
+#: help:email.verifycode,init,code:0
+msgid "Enter the verification code thay you get in your verification Email"
+msgstr ""
+"Saisir le code de vérification que vous avez reçu dans votre email de "
+"vérification"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_email_smtpclient_history
+msgid "Email Client History"
+msgstr "Historique du client email"
+
+#. module: smtpclient
+#: selection:email.smtpclient,delete_queue:0
+msgid "Never Delete Message"
+msgstr "Ne jamais effacer le message"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "OpenERP Test Email!"
+msgstr "Email de test OpenERP!"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+#: field:email.smtpclient,body:0
+#: view:email.smtpclient.queue:0
+#: field:email.smtpclient.queue,serialized_message:0
+msgid "Message"
+msgstr "Message"
+
+#. module: smtpclient
+#: field:email.smtpclient,process_id:0
+msgid "MTA Process"
+msgstr "Processus MTA"
+
+#. module: smtpclient
+#: field:email.headers,server_id:0
+#: view:email.smtpclient:0
+#: field:email.smtpclient,server:0
+#: field:email.smtpclient.queue,server_id:0
+#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server
+msgid "SMTP Server"
+msgstr "Serveur SMTP"
+
+#. module: smtpclient
+#: selection:email.smtpclient,auth_type:0
+msgid "Google Server"
+msgstr "Serveur Google"
+
+#. module: smtpclient
+#: selection:email.smtpclient,state:0
+msgid "Verified"
+msgstr "Vérifié"
+
+#. module: smtpclient
+#: help:email.smtpclient,priority:0
+msgid ""
+"Priority between 0 to 10, will be used to define the MTA process priotiry"
+msgstr ""
+"Priorité de 0 à 10, utilisé pour définir les priorités des processus MTA"
+
+#. module: smtpclient
+#: field:email.smtpclient,port:0
+msgid "SMTP Port"
+msgstr "Port SMTP"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Email TO Address not Defined !"
+msgstr "Adresse d'envoi non définie!"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "SMTP Server Error !"
+msgstr "Erreur de serveur SMTP!"
+
+#. module: smtpclient
+#: field:email.smtpclient,auth:0
+msgid "Use Auth"
+msgstr "Utiliser l'authentification"
+
+#. module: smtpclient
+#: field:email.smtpclient,pstate:0
+msgid "Server Statue"
+msgstr "État du serveur"
+
+#. module: smtpclient
+#: field:email.smtpclient,user:0
+msgid "User Name"
+msgstr "Nom d'utilisateur"
+
+#. module: smtpclient
+#: field:email.smtpclient,verify_email:0
+msgid "Verify Message"
+msgstr "Vérifiez le message"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_email_smtpclient
+#: model:ir.module.module,shortdesc:smtpclient.module_meta_information
+msgid "Email Client"
+msgstr "Client email"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Disclaimers Message"
+msgstr "Message sur la limitation de garantie"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "__code__ for Verification Code"
+msgstr "__code__ pour le Code de Vérification"
+
+#. module: smtpclient
+#: selection:email.smtpclient.queue,state:0
+msgid "Queued"
+msgstr "File d'attente"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,date_create:0
+#: field:email.smtpclient.queue,date_create:0
+msgid "Date"
+msgstr "Date"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,cc:0
+msgid "CC to"
+msgstr "En copie à"
+
+#. module: smtpclient
+#: model:email.smtpclient,verify_email:smtpclient.email_smtpclient_sendmailserver0
+msgid ""
+"Verification Message. This is the code\n"
+"__code__ \n"
+"you must copy in the OpenERP Email Server (Verify Server wizard).\n"
+"Created by user __user__"
+msgstr ""
+"Message de vérification. Ceci est le code\n"
+"__code__ \n"
+"que vous devez saisir dans le serveur email OpenERP (assistant Vérification "
+"du Serveur).\n"
+"Créé par utilisateur __utilisateur__"
+
+#. module: smtpclient
+#: view:email.smtpclient.queue:0
+#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_queue_tree
+#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_smtp_server_queue
+msgid "Message Queue"
+msgstr "File d'attente des messages"
+
+#. module: smtpclient
+#: selection:email.smtpclient,type:0
+#: selection:res.company.address,name:0
+msgid "Default"
+msgstr "Défaut"
+
+#. module: smtpclient
+#: selection:email.smtpclient,delete_queue:0
+msgid "Delete Content After"
+msgstr "Effacer le contenu après"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "You have no permission to access SMTP Server : %s "
+msgstr "Vous n'avez aucune permission d'accès au serveur SMTP : %s "
+
+#. module: smtpclient
+#: field:email.smtpclient,active:0
+msgid "Active"
+msgstr "Actif"
+
+#. module: smtpclient
+#: model:ir.actions.act_window,name:smtpclient.act_mail_server_2_mail_queue
+msgid "Message Queus"
+msgstr "File d'attente des messages"
+
+#. module: smtpclient
+#: code:addons/smtpclient/wizard/sendcode.py:0
+#: code:addons/smtpclient/wizard/testemail.py:0
+#: code:addons/smtpclient/wizard/verifycode.py:0
+#: view:email.smtpclient.queue:0
+#: selection:email.smtpclient.queue,state:0
+#, python-format
+msgid "Error"
+msgstr "Erreur"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Server Error!"
+msgstr "Erreur serveur !"
+
+#. module: smtpclient
+#: selection:email.smtpclient,delete_queue:0
+msgid "Clear All After"
+msgstr "Tout effacer après"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid ""
+"Please verify Email Server, without verification you can not send Email(s)."
+msgstr ""
+"Merci de vérifier votre serveur email, sans vérification vous ne pouvez pas "
+"envoyer d'email(s)."
+
+#. module: smtpclient
+#: field:email.smtpclient,history_line:0
+#: field:report.smtp.server,history:0
+msgid "History"
+msgstr "Historique"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,priority:0
+msgid "Message Priority"
+msgstr "Priorité du message"
+
+#. module: smtpclient
+#: field:ir.actions.server,file_ids:0
+msgid "Attachments"
+msgstr "Fichiers attachés"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "__name__ for Customer Name"
+msgstr "__name__ pour le Nom du Client"
+
+#. module: smtpclient
+#: view:email.smtpclient.queue:0
+msgid "General"
+msgstr "Général"
+
+#. module: smtpclient
+#: field:email.headers,key:0
+msgid "Header"
+msgstr "Entête"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid ""
+"Verification Message. This is the code\n"
+"\n"
+"__code__\n"
+"\n"
+"you must copy in the OpenERP Email Server (Verify Server wizard).\n"
+"\n"
+"Created by user __user__"
+msgstr ""
+"Message de vérification. Voici le code\n"
+"\n"
+"__code__\n"
+"\n"
+"Vous devez le copier dans le serveur de couriel d'Open ERP (Assistant de "
+"vérification).\n"
+"\n"
+"Créer par l'utilisateur __user__"
+
+#. module: smtpclient
+#: selection:res.company.address,name:0
+msgid "Invoice"
+msgstr "Facture"
+
+#. module: smtpclient
+#: wizard_view:email.verifycode,init:0
+#: wizard_button:email.verifycode,init,check:0
+msgid "Verify Code"
+msgstr "Code de vérification"
+
+#. module: smtpclient
+#: wizard_button:email.sendcode,init,end:0
+#: wizard_button:email.testemail,init,end:0
+#: wizard_button:email.verifycode,init,end:0
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: smtpclient
+#: field:email.smtpclient,delete_queue_period:0
+msgid "Delete after"
+msgstr "Effacer après"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Server is not Verified, Please Verify the Server !"
+msgstr "Le serveur n'est pas vérifié, merci de vérifier le serveur!"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,resource_id:0
+msgid "Resource ID"
+msgstr "ID de la ressource"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "SMTP Data Error !"
+msgstr "Erreur de données SMTP !"
+
+#. module: smtpclient
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"Le nom de l'objet doit commencer par x_ et ne doit pas contenir de "
+"caractères spéciaux !"
+
+#. module: smtpclient
+#: selection:email.smtpclient,delete_queue:0
+msgid "Delete when Email Sent"
+msgstr "Effacer une fois l'email envoyé"
+
+#. module: smtpclient
+#: selection:email.smtpclient,type:0
+msgid "Account"
+msgstr "Compte"
+
+#. module: smtpclient
+#: model:ir.module.module,description:smtpclient.module_meta_information
+msgid ""
+"Email Client module that provides:\n"
+" Sending Email\n"
+" Use Multiple Server\n"
+" Multi Threading\n"
+" Multi Attachment\n"
+" "
+msgstr ""
+"Module de client email qui permet d' :\n"
+" Envoyer des emails\n"
+" Utiliser plusieurs serveurs\n"
+" Utiliser plusieurs files d'envoi (multi-threading)\n"
+" Envoyer plusieurs fichiers attachés\n"
+" "
+
+#. module: smtpclient
+#: selection:email.smtpclient,type:0
+msgid "Stock"
+msgstr "Stock"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,name:0
+msgid "Description"
+msgstr "Description"
+
+#. module: smtpclient
+#: field:email.smtpclient,code:0
+#: wizard_field:email.verifycode,init,code:0
+msgid "Verification Code"
+msgstr "Code de vérifcation"
+
+#. module: smtpclient
+#: selection:email.smtpclient,pstate:0
+msgid "Stop"
+msgstr "Arrêter"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,body:0
+msgid "Email Text"
+msgstr "Texte de l'email"
+
+#. module: smtpclient
+#: selection:res.company.address,name:0
+msgid "Delivery"
+msgstr "Livraison"
+
+#. module: smtpclient
+#: selection:email.smtpclient,pstate:0
+msgid "Running"
+msgstr "En cours"
+
+#. module: smtpclient
+#: view:email.smtpclient.queue:0
+msgid "Last Error occured"
+msgstr "Dernière erreur apparu"
+
+#. module: smtpclient
+#: selection:email.smtpclient,state:0
+msgid "Waiting for Verification"
+msgstr "En attente de vérification"
+
+#. module: smtpclient
+#: field:email.smtpclient,password:0
+msgid "Password"
+msgstr "Mot de passe"
+
+#. module: smtpclient
+#: field:email.smtpclient,users_id:0
+msgid "Users Allowed"
+msgstr "Utilisateurs authorisés"
+
+#. module: smtpclient
+#: code:addons/smtpclient/wizard/sendcode.py:0
+#, python-format
+msgid "Verification Code Already Generated !"
+msgstr "Génération du code de vérification déjà effectuée!"
+
+#. module: smtpclient
+#: wizard_field:email.sendcode,init,emailto:0
+#: field:email.smtpclient,email:0
+#: wizard_field:email.testemail,init,emailto:0
+#: view:res.company:0
+#: field:res.company.address,email:0
+msgid "Email Address"
+msgstr "Adresse courriel"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Verification Message"
+msgstr "Message de vérification"
+
+#. module: smtpclient
+#: view:email.smtpclient:0
+msgid "Stop Server"
+msgstr "Arrêter le serveur"
+
+#. module: smtpclient
+#: model:ir.ui.menu,name:smtpclient.menu_smtpclient_administration_server
+msgid "Email Servers"
+msgstr "Serveurs email"
+
+#. module: smtpclient
+#: model:ir.actions.wizard,name:smtpclient.wizard_email_sendcode
+msgid "Send Verification Code"
+msgstr "Envoyer le code de vérification"
+
+#. module: smtpclient
+#: field:email.smtpclient.history,model:0
+msgid "Model"
+msgstr "Modèle"
+
+#. module: smtpclient
+#: model:ir.actions.act_window,name:smtpclient.action_email_smtpclient_tree
+#: field:ir.actions.server,email_server:0
+msgid "Email Server"
+msgstr "Serveur de couriel"
+
+#. module: smtpclient
+#: code:addons/smtpclient/smtpclient.py:0
+#, python-format
+msgid "Permission Error!"
+msgstr "Erreur de permission !"
+
+#. module: smtpclient
+#: model:ir.model,name:smtpclient.model_res_company_address
+msgid "res.company.address"
+msgstr "res.company.address"
+
+#. module: smtpclient
+#: field:email.smtpclient.queue,state:0
+msgid "Message Status"
+msgstr "État du message"
diff --git a/addons/stock/i18n/ca.po b/addons/stock/i18n/ca.po
index a48c0569f95..a0eb329b4e2 100644
--- a/addons/stock/i18n/ca.po
+++ b/addons/stock/i18n/ca.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-12-31 12:47+0000\n"
-"Last-Translator: Albert Cervera i Areny - http://www.NaN-tic.com \n"
+"PO-Revision-Date: 2010-05-18 13:12+0000\n"
+"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
+"\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:11+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -115,13 +115,13 @@ msgstr "Import"
#. module: stock
#: view:stock.picking:0
msgid "Products Received"
-msgstr "Productes rebuts"
+msgstr ""
#. module: stock
#: model:ir.actions.act_window,name:stock.action_picking_tree4
#: model:ir.ui.menu,name:stock.menu_action_picking_tree4
msgid "Incoming Products"
-msgstr "Productes entrants"
+msgstr ""
#. module: stock
#: field:stock.picking,name:0
@@ -268,7 +268,7 @@ msgstr "STOCK_GOTO_FIRST"
#: model:ir.actions.act_window,name:stock.action_picking_tree6
#: model:ir.ui.menu,name:stock.menu_action_picking_tree6
msgid "Internal Moves"
-msgstr "Moviments interns"
+msgstr "Albarans interns"
#. module: stock
#: field:stock.move,product_packaging:0
@@ -1432,7 +1432,7 @@ msgstr "Data prevista"
#: model:ir.actions.act_window,name:stock.action_picking_tree
#: model:ir.ui.menu,name:stock.menu_action_picking_tree
msgid "Outgoing Products"
-msgstr "Productes sortints"
+msgstr "Albarans de sortida"
#. module: stock
#: selection:stock.location,icon:0
diff --git a/addons/stock/i18n/es.po b/addons/stock/i18n/es.po
index 3673eeebe69..563a23a48e9 100644
--- a/addons/stock/i18n/es.po
+++ b/addons/stock/i18n/es.po
@@ -7,13 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-04-29 11:22+0000\n"
-"Last-Translator: Shay \n"
+"PO-Revision-Date: 2010-05-18 13:11+0000\n"
+"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
+"\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-05-05 03:47+0000\n"
+"X-Launchpad-Export-Date: 2010-05-19 05:11+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -120,7 +121,7 @@ msgstr "Productos recibidos"
#: model:ir.actions.act_window,name:stock.action_picking_tree4
#: model:ir.ui.menu,name:stock.menu_action_picking_tree4
msgid "Incoming Products"
-msgstr "Productos entrantes"
+msgstr "Albaranes de entrada"
#. module: stock
#: field:stock.picking,name:0
@@ -267,7 +268,7 @@ msgstr "STOCK_GOTO_FIRST"
#: model:ir.actions.act_window,name:stock.action_picking_tree6
#: model:ir.ui.menu,name:stock.menu_action_picking_tree6
msgid "Internal Moves"
-msgstr "Movimientos internos"
+msgstr "Albaranes internos"
#. module: stock
#: field:stock.move,product_packaging:0
@@ -1448,7 +1449,7 @@ msgstr "Fecha prevista"
#: model:ir.actions.act_window,name:stock.action_picking_tree
#: model:ir.ui.menu,name:stock.menu_action_picking_tree
msgid "Outgoing Products"
-msgstr "Productos salientes"
+msgstr "Albaranes de salida"
#. module: stock
#: selection:stock.location,icon:0
@@ -2287,8 +2288,8 @@ msgid ""
"Scheduled date for the movement of the products or real date if the move is "
"done."
msgstr ""
-"Fecha fijada para el movimiento de productos o fecha real si el movimiento "
-"ha sido realizado"
+"Fecha programada para el movimiento de productos o fecha real si el "
+"movimiento ha sido realizado."
#. module: stock
#: view:stock.picking:0
diff --git a/addons/stock/i18n/fr.po b/addons/stock/i18n/fr.po
index 9d0c7b40248..26c85ca75c7 100644
--- a/addons/stock/i18n/fr.po
+++ b/addons/stock/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-03-25 14:13+0000\n"
-"Last-Translator: Numérigraphe \n"
+"PO-Revision-Date: 2010-05-21 10:35+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:56+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -66,7 +66,7 @@ msgstr "Nom de modèle non valide dans la définition de l'action."
#: model:ir.module.module,shortdesc:stock.module_meta_information
#: model:ir.ui.menu,name:stock.menu_stock_root
msgid "Inventory Management"
-msgstr ""
+msgstr "Gestion des inventaires"
#. module: stock
#: selection:stock.location,icon:0
@@ -86,7 +86,7 @@ msgstr "STOCK_MEDIA_FORWARD"
#. module: stock
#: rml:lot.location:0
msgid "Total :"
-msgstr ""
+msgstr "Total :"
#. module: stock
#: selection:stock.location,icon:0
@@ -300,7 +300,7 @@ msgstr "Commande(Origine)"
#: rml:lot.stock.overview:0
#: rml:lot.stock.overview_all:0
msgid "Grand Total:"
-msgstr ""
+msgstr "Total:"
#. module: stock
#: view:stock.location:0
@@ -677,7 +677,7 @@ msgstr "Date d'envoi prévue"
#. module: stock
#: rml:stock.picking.list:0
msgid "Shipping Address :"
-msgstr ""
+msgstr "Adresse de livraison"
#. module: stock
#: view:stock.tracking:0
@@ -744,7 +744,7 @@ msgstr "Depuis"
#. module: stock
#: rml:stock.picking.list:0
msgid "weight"
-msgstr ""
+msgstr "poids"
#. module: stock
#: rml:stock.picking.list:0
@@ -1391,7 +1391,7 @@ msgstr "État de la facturation"
#. module: stock
#: rml:lot.location:0
msgid "Units"
-msgstr ""
+msgstr "Unités"
#. module: stock
#: selection:stock.location,icon:0
@@ -1641,7 +1641,7 @@ msgstr "Incoterms"
#: rml:lot.stock.overview:0
#: rml:lot.stock.overview_all:0
msgid "Total:"
-msgstr ""
+msgstr "Total:"
#. module: stock
#: selection:stock.location,icon:0
@@ -1703,7 +1703,7 @@ msgstr "Magasin"
#: selection:stock.move,state:0
#: selection:stock.picking,state:0
msgid "Done"
-msgstr "Terminer"
+msgstr "Terminé"
#. module: stock
#: model:stock.location,name:stock.stock_location_locations_virtual
@@ -2275,6 +2275,8 @@ msgid ""
"Scheduled date for the movement of the products or real date if the move is "
"done."
msgstr ""
+"Date prévisionnelle pour le mouvement du produit ou la date réelle si le "
+"mouvement est terminé."
#. module: stock
#: view:stock.picking:0
diff --git a/addons/stock/i18n/pl.po b/addons/stock/i18n/pl.po
index 942cb5d0730..a4406384e8e 100644
--- a/addons/stock/i18n/pl.po
+++ b/addons/stock/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-02-26 17:56+0000\n"
+"PO-Revision-Date: 2010-05-21 08:22+0000\n"
"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 03:56+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock
@@ -126,7 +126,7 @@ msgstr "Przyjmowanie produktów"
#: field:stock.picking,name:0
#: field:stock.tracking,serial:0
msgid "Reference"
-msgstr "Odnośnik"
+msgstr "Numer"
#. module: stock
#: wizard_field:stock.invoice_onshipping,init,group:0
diff --git a/addons/stock/report/report_stock.py b/addons/stock/report/report_stock.py
index da1dd27ff14..3e7fe147c73 100644
--- a/addons/stock/report/report_stock.py
+++ b/addons/stock/report/report_stock.py
@@ -22,6 +22,7 @@
from osv import osv, fields
from tools.translate import _
import tools
+from tools.sql import drop_view_if_exists
#
# Check if it works with UoM ???
@@ -38,7 +39,7 @@ class stock_report_prodlots(osv.osv):
}
def init(self, cr):
- tools.drop_view_if_exists(cr, 'stock_report_prodlots')
+ drop_view_if_exists(cr, 'stock_report_prodlots')
cr.execute("""
create or replace view stock_report_prodlots as (
select max(id) as id,
@@ -94,7 +95,7 @@ class stock_report_tracklots(osv.osv):
}
def init(self, cr):
- tools.drop_view_if_exists(cr, 'stock_report_tracklots')
+ drop_view_if_exists(cr, 'stock_report_prodlots')
cr.execute("""
create or replace view stock_report_tracklots as (
@@ -149,7 +150,7 @@ class report_stock_lines_date(osv.osv):
'date': fields.datetime('Latest Inventory Date'),
}
def init(self, cr):
- tools.drop_view_if_exists(cr, 'report_stock_lines_date')
+ drop_view_if_exists(cr, 'stock_report_prodlots')
cr.execute("""
create or replace view report_stock_lines_date as (
select
diff --git a/addons/stock/report/report_stock_picking.py b/addons/stock/report/report_stock_picking.py
index 7f4ac801399..b6e2a3d3373 100644
--- a/addons/stock/report/report_stock_picking.py
+++ b/addons/stock/report/report_stock_picking.py
@@ -30,17 +30,30 @@ class report_stock_picking(osv.osv):
'month':fields.selection([('01','January'), ('02','February'), ('03','March'), ('04','April'), ('05','May'), ('06','June'),
('07','July'), ('08','August'), ('09','September'), ('10','October'), ('11','November'), ('12','December')],'Month',readonly=True),
'day': fields.char('Day', size=128, readonly=True),
- 'reference': fields.char('Reference', size=64, select=True),
'nbr': fields.integer('# of Lines', readonly=True),
'nbp': fields.integer('# of Picking', readonly=True),
'partner_id':fields.many2one('res.partner', 'Partner', readonly=True),
'product_qty': fields.float('# of Products', readonly=True),
+ 'product_uos_qty': fields.float('# of Products', readonly=True),
+ 'product_id': fields.many2one('product.product', 'Product', readonly=True),
'date': fields.date('Date', readonly=True),
'avg_days_to_deliver': fields.float('Avg Days to Deliver', digits=(16,2), readonly=True, group_operator="avg",
help="Number of Avg Days to deliver"),
- 'origin': fields.char('Origin', size=64),
'state': fields.selection([('draft', 'Draft'),('auto', 'Waiting'),('confirmed', 'Confirmed'),('assigned', 'Available'),('done', 'Done'),('cancel', 'Cancelled')], 'State'),
'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True),
+ 'company_id': fields.many2one('res.company', 'Company', readonly=True),
+ 'invoice_state': fields.selection([
+ ("invoiced", "Invoiced"),
+ ("2binvoiced", "To Be Invoiced"),
+ ("none", "Not from Picking")], "Invoice Status",readonly=True),
+ 'min_date': fields.date('Expected Date',help="Expected date for Picking. Default it takes current date"),
+ 'order_date': fields.date('Order Date', help="Date of Order"),
+ 'date_done': fields.date('Date Done', help="Date of completion"),
+ 'location_id': fields.many2one('stock.location', 'Source Location', help="Sets a location if you produce at a fixed location. This can be a partner location if you subcontract the manufacturing operations."),
+ 'location_dest_id': fields.many2one('stock.location', 'Dest. Location', help="Location where the system will stock the finished products."),
+ 'max_date': fields.date('Max.Expected Date'),
+ 'product_uos': fields.many2one('product.uom', 'Product UOS'),
+ 'product_uom': fields.many2one('product.uom', 'Product UOM'),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_stock_picking')
@@ -48,6 +61,10 @@ class report_stock_picking(osv.osv):
create or replace view report_stock_picking as (
select
min(sm.id) as id,
+ date_trunc('day',sp.min_date) as min_date,
+ date_trunc('day',sp.date) as order_date,
+ date_trunc('day',sp.date_done) as date_done,
+ date_trunc('day',sp.max_date) as max_date,
to_char(sp.create_date, 'YYYY') as year,
to_char(sp.create_date, 'MM') as month,
to_char(sp.create_date, 'YYYY-MM-DD') as day,
@@ -56,19 +73,37 @@ class report_stock_picking(osv.osv):
count(sm.id) as nbr,
count(distinct sp.id) as nbp,
sum(sm.product_qty) as product_qty,
+ sum(sm.product_uos_qty) as product_uos_qty,
+ sm.product_id as product_id,
+ sm.location_dest_id as location_dest_id,
+ sm.location_id as location_id,
sp.type,
- sp.name as reference,
- sp.origin,
+ sm.product_uos,
+ sm.product_uom,
+ sp.invoice_state,
+ sp.company_id as company_id,
avg(extract('epoch' from (sp.date_done-sp.create_date)))/(3600*24) as avg_days_to_deliver,
sp.state
from stock_move as sm
left join stock_picking as sp ON (sm.picking_id=sp.id)
group by sp.type,
- sp.create_date,
- sp.address_id,
- sp.name,
- sp.origin,
- sp.state
+ sp.create_date,
+ sp.address_id,
+ sm.product_id,
+ to_char(sp.create_date, 'YYYY'),
+ sm.location_dest_id,
+ sm.location_id,
+ to_char(sp.create_date, 'MM'),
+ to_char(sp.create_date, 'YYYY-MM-DD'),
+ sm.product_uos,
+ sm.product_uom,
+ date_trunc('day',sp.min_date),
+ date_trunc('day',sp.date),
+ date_trunc('day',sp.date_done),
+ date_trunc('day',sp.max_date),
+ sp.invoice_state,
+ sp.company_id,
+ sp.state
)""")
report_stock_picking()
diff --git a/addons/stock/report/report_stock_picking_view.xml b/addons/stock/report/report_stock_picking_view.xml
index d4116313a7e..62d1b06fd19 100644
--- a/addons/stock/report/report_stock_picking_view.xml
+++ b/addons/stock/report/report_stock_picking_view.xml
@@ -15,15 +15,20 @@
-
+
-
+
+
+
+
+
+
-
+
@@ -49,29 +54,43 @@
-
-
+
+ help="Picking in last 30 days"/>
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
-
+
+
+
diff --git a/addons/stock/security/ir.model.access.csv b/addons/stock/security/ir.model.access.csv
index 91941341ccf..ca36c8460a7 100644
--- a/addons/stock/security/ir.model.access.csv
+++ b/addons/stock/security/ir.model.access.csv
@@ -37,7 +37,6 @@
"access_stock_location_product","stock.location.product","model_stock_location_product","stock.group_stock_user",1,0,0,0
"access_report_stock_picking","report.stock.picking","model_report_stock_picking","stock.group_stock_user",1,0,0,0
"access_stock_delivery","stock.delivery","model_stock_delivery","stock.group_stock_user",1,0,0,0
-
"access_stock_traceability_upstream","stock.traceability.upstream","model_stock_traceability_upstream","stock.group_stock_user",1,0,0,0
"access_stock_traceability_downstream","stock.traceability.downstream","model_stock_traceability_downstream","stock.group_stock_user",1,0,0,0
"access_stock_traceability_lot_upstream","stock.traceability.lot.upstream","model_stock_traceability_lot_upstream","stock.group_stock_user",1,0,0,0
@@ -45,4 +44,5 @@
"access_stock_partial_picking",stock.partial.picking","model_stock_partial_picking","stock.group_stock_user",1,0,0,0
"access_stock_partial_move","stock.partial.move","model_stock_partial_move","stock.group_stock_user",1,0,0,0
"access_stock_inventory_merge","stock.inventory.merge","model_stock_inventory_merge","stock.group_stock_user",1,0,0,0
-"access_stock_change_standard_price","stock.change.standard.price","model_stock_change_standard_price","stock.group_stock_user",1,0,0,0
\ No newline at end of file
+"access_stock_change_standard_price","stock.change.standard.price","model_stock_change_standard_price","stock.group_stock_user",1,0,0,0
+"access_action_traceability","action.traceability","model_action_traceability","stock.group_stock_user",1,0,0,0
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 17ad742fb7f..27930c8a3e7 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -351,20 +351,18 @@ class stock_tracking(osv.osv):
_name = "stock.tracking"
_description = "Stock Tracking Lots"
- def get_create_tracking_lot(self, cr, uid, ids, context):
- tracking_id = context.get('tracking_id', False)
- tracking_id_list = self.search(cr, uid, [('name', '=', tracking_id)],
+ def get_create_tracking_lot(self, cr, uid, ids, tracking_lot):
+ tracking_lot_list = self.search(cr, uid, [('name', '=', tracking_lot)],
limit=1)
- if tracking_id_list:
- tracking_id = tracking_id_list[0]
- tracking_obj = self.browse(cr, uid, tracking_id)
+ if tracking_lot_list:
+ tracking_lot = tracking_lot_list[0]
+ tracking_obj = self.browse(cr, uid, tracking_lot)
if not tracking_obj:
tracking_lot_vals = {
- 'name': tracking_id
+ 'name': tracking_lot
}
- tracking_id = self.create(cr, uid, tracking_lot_vals,
- context=context)
- return tracking_id
+ tracking_lot = self.create(cr, uid, tracking_lot_vals)
+ return tracking_lot
def checksum(sscc):
salt = '31' * 8 + '3'
sum = 0
@@ -473,7 +471,15 @@ class stock_picking(osv.osv):
def create(self, cr, user, vals, context=None):
if ('name' not in vals) or (vals.get('name')=='/'):
vals['name'] = self.pool.get('ir.sequence').get(cr, user, 'stock.picking')
-
+ type_list = {
+ 'out':_('Packing List'),
+ 'in':_('Reception'),
+ 'internal': _('Internal picking'),
+ 'delivery': _('Delivery order')
+ }
+ if not vals.get('auto_picking', False):
+ message = type_list.get(vals.get('type',_('Picking'))) + " '" + vals['name'] + "' "+ _("created.")
+ self.log(cr, user, id, message)
return super(stock_picking, self).create(cr, user, vals, context)
_columns = {
@@ -546,7 +552,7 @@ class stock_picking(osv.osv):
def action_confirm(self, cr, uid, ids, context={}):
self.write(cr, uid, ids, {'state': 'confirmed'})
todo = []
- for picking in self.browse(cr, uid, ids):
+ for picking in self.browse(cr, uid, ids, context=context):
for r in picking.move_lines:
if r.state == 'draft':
todo.append(r.id)
@@ -613,7 +619,16 @@ class stock_picking(osv.osv):
wf_service.trg_write(uid, 'stock.picking', pick.id, cr)
return True
- def action_assign_wkf(self, cr, uid, ids):
+ def action_assign_wkf(self, cr, uid, ids, context=None):
+ for pick in self.browse(cr, uid, ids, context=context):
+ type_list = {
+ 'out':'Packing List',
+ 'in':'Reception',
+ 'internal': 'Internal picking',
+ 'delivery': 'Delivery order'
+ }
+ message = type_list.get(pick.type, _('Document')) + " '" + pick.name + "' "+ _("is ready to be processed.")
+ self.log(cr, uid, id, message)
self.write(cr, uid, ids, {'state': 'assigned'})
return True
@@ -875,15 +890,23 @@ class stock_picking(osv.osv):
return True
def unlink(self, cr, uid, ids, context=None):
+ move_obj = self.pool.get('stock.move')
+ if not context:
+ context = {}
+
for pick in self.browse(cr, uid, ids, context=context):
if pick.state in ['done','cancel']:
raise osv.except_osv(_('Error'), _('You cannot remove the picking which is in %s state !')%(pick.state,))
- elif pick.state in ['confirmed','assigned']:
+ elif pick.state in ['confirmed','assigned', 'draft']:
ids2 = [move.id for move in pick.move_lines]
- context.update({'call_unlink':True})
- self.pool.get('stock.move').action_cancel(cr, uid, ids2, context)
- else:
- continue
+ ctx = context.copy()
+ ctx.update({'call_unlink':True})
+ if pick.state != 'draft':
+ #Cancelling the move in order to affect Virtual stock of product
+ move_obj.action_cancel(cr, uid, ids2, ctx)
+ #Removing the move
+ move_obj.unlink(cr, uid, ids2, ctx)
+
return super(stock_picking, self).unlink(cr, uid, ids, context=context)
def do_partial(self, cr, uid, ids, partial_datas, context={}):
@@ -1159,6 +1182,7 @@ class stock_move(osv.osv):
return (res and res[0]) or False
_name = "stock.move"
_description = "Stock Move"
+ _log_create = False
def name_get(self, cr, uid, ids, context={}):
res = []
@@ -1283,6 +1307,11 @@ class stock_move(osv.osv):
def create(self, cr, user, vals, context=None):
if vals.get('move_stock_return_history',False):
vals['move_stock_return_history'] = []
+ # Check that the stock.move is in draft state at creation to force
+ # passing through button_confirm
+ if vals.get('state','draft') not in ('draft','done','waiting'):
+ logger = netsvc.Logger()
+ logger.notifyChannel("code", netsvc.LOG_WARNING, "All new stock.move must be in state draft at the creation !")
return super(stock_move, self).create(cr, user, vals, context)
def _auto_init(self, cursor, context):
@@ -1619,15 +1648,15 @@ class stock_move(osv.osv):
'line_id': lines,
'ref': ref,
})
- tracking_id = False
+ tracking_lot = False
if context:
- tracking_id = context.get('tracking_id', False)
- if tracking_id:
+ tracking_lot = context.get('tracking_lot', False)
+ if tracking_lot:
rec_id = context and context.get('active_id', False)
tracking = self.pool.get('stock.tracking')
- tracking_id = tracking.get_create_tracking_lot(cr, uid,[rec_id], context=context )
+ tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
- self.write(cr, uid, ids, {'state': 'done', 'date_planned': time.strftime('%Y-%m-%d %H:%M:%S'), 'tracking_id': tracking_id or False})
+ self.write(cr, uid, ids, {'state': 'done', 'date_planned': time.strftime('%Y-%m-%d %H:%M:%S'), 'tracking_id': tracking_lot or False})
picking_obj = self.pool.get('stock.picking')
for pick in picking_obj.browse(cr, uid, picking_ids):
if all(move.state == 'done' for move in pick.move_lines):
@@ -1639,6 +1668,8 @@ class stock_move(osv.osv):
return True
def unlink(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
for move in self.browse(cr, uid, ids, context=context):
if move.state != 'draft':
raise osv.except_osv(_('UserError'),
@@ -1769,7 +1800,7 @@ class stock_move(osv.osv):
@ return: Consumed lines
'''
- if not context:
+ if context is None:
context = {}
if quantity <= 0:
@@ -1845,7 +1876,7 @@ class stock_move(osv.osv):
partner_id = partial_datas.get('partner_id', False)
address_id = partial_datas.get('address_id', False)
delivery_date = partial_datas.get('delivery_date', False)
- tracking_id = context.get('tracking_id', False)
+ tracking_lot = context.get('tracking_lot', False)
new_moves = []
@@ -1864,7 +1895,7 @@ class stock_move(osv.osv):
if move.product_qty == product_qty:
self.write(cr, uid, move.id,
{
- 'tracking_id': tracking_id
+ 'tracking_id': tracking_lot
})
complete.append(move)
elif move.product_qty > product_qty:
@@ -1910,7 +1941,7 @@ class stock_move(osv.osv):
'state': 'assigned',
'move_dest_id': False,
'price_unit': move.price_unit,
- 'tracking_id': tracking_id,
+ 'tracking_id': tracking_lot,
})
complete.append(self.browse(cr, uid, new_move))
self.write(cr, uid, move.id,
@@ -1925,7 +1956,7 @@ class stock_move(osv.osv):
{
'product_qty': move.product_qty,
'product_uos_qty': move.product_qty,
- 'tracking_id': tracking_id
+ 'tracking_id': tracking_lot
})
complete.append(move)
@@ -2050,7 +2081,7 @@ stock_inventory()
class stock_inventory_line(osv.osv):
_name = "stock.inventory.line"
- _description = "Inventory line"
+ _description = "Inventory Line"
_columns = {
'inventory_id': fields.many2one('stock.inventory', 'Inventory', ondelete='cascade', select=True),
'location_id': fields.many2one('stock.location', 'Location', required=True),
@@ -2086,9 +2117,9 @@ class stock_warehouse(osv.osv):
# 'partner_id': fields.many2one('res.partner', 'Owner'),
'company_id': fields.many2one('res.company','Company',required=True,select=1),
'partner_address_id': fields.many2one('res.partner.address', 'Owner Address'),
- 'lot_input_id': fields.many2one('stock.location', 'Location Input', required=True),
- 'lot_stock_id': fields.many2one('stock.location', 'Location Stock', required=True),
- 'lot_output_id': fields.many2one('stock.location', 'Location Output', required=True),
+ 'lot_input_id': fields.many2one('stock.location', 'Location Input', required=True, domain=[('usage','<>','view')]),
+ 'lot_stock_id': fields.many2one('stock.location', 'Location Stock', required=True, domain=[('usage','<>','view')]),
+ 'lot_output_id': fields.many2one('stock.location', 'Location Output', required=True, domain=[('usage','<>','view')]),
}
_defaults = {
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', context=c),
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 054c56ea507..5cb543b748e 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -69,7 +69,7 @@
stock.inventorytree
-
+
@@ -192,9 +192,9 @@
child_ids
-
-
-
+
+
+
@@ -307,18 +307,18 @@
treemove_history_ids
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -330,18 +330,18 @@
treemove_history_ids2
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -457,7 +457,7 @@
tree
-
+
@@ -582,7 +582,7 @@
stock.pickingtree
-
+
@@ -615,7 +615,7 @@
-
+
@@ -625,7 +625,7 @@
-
+
-
+
@@ -652,9 +652,9 @@
-
+
-
+
-
+
@@ -736,7 +736,7 @@
stock.pickingtree
-
+
@@ -767,7 +767,7 @@
-
+
@@ -777,7 +777,7 @@
-
+
-
+
@@ -805,7 +805,7 @@
-
+
-
+
@@ -915,7 +915,7 @@
stock.pickingtree
-
+
@@ -947,7 +947,7 @@
-
+
@@ -976,7 +976,7 @@
-
+
@@ -985,7 +985,7 @@
-
+
-
+
@@ -1094,7 +1094,7 @@
stock.pickingtree
-
+
@@ -1129,7 +1129,7 @@
-
+
@@ -1152,7 +1152,7 @@
-
+
@@ -1162,7 +1162,7 @@
-
+
-
+
@@ -1312,7 +1312,7 @@
tree
-
+
@@ -1343,7 +1343,7 @@
-
+
@@ -1439,7 +1439,7 @@
tree
-
+
@@ -1470,7 +1470,7 @@
-
+
@@ -1528,7 +1528,7 @@
-
+
diff --git a/addons/stock/test/stock_test.yml b/addons/stock/test/stock_test.yml
index 6a9bf3ff9f3..38ecddffb91 100644
--- a/addons/stock/test/stock_test.yml
+++ b/addons/stock/test/stock_test.yml
@@ -288,6 +288,7 @@
In Order to test the picking I create picking with move lines.
-
!record {model: stock.picking, id: stock_picking_0}:
+ name: test_picking
address_id: res_partner_address_0
company_id: base.main_company
date: '2010-05-11 15:18:52'
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index 22e48631f8b..d2b671e9571 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -41,7 +41,7 @@ class stock_invoice_onshipping(osv.osv_memory):
'invoice_date': fields.date('Invoiced date'),
}
- def _get_type(self, cr, uid, context):
+ def _get_type(self, cr, uid, context=None):
"""
To get invoice type
@@ -53,10 +53,12 @@ class stock_invoice_onshipping(osv.osv_memory):
@return: invoice type
- """
+ """
+ if context is None:
+ context = {}
picking_obj = self.pool.get('stock.picking')
usage = 'customer'
- pick = picking_obj.browse(cr, uid, context['active_id'])
+ pick = picking_obj.browse(cr, uid, context['active_id'], context=context)
if pick.invoice_state == 'invoiced':
raise osv.except_osv(_('UserError'), _('Invoice is already created.'))
if pick.invoice_state == 'none':
@@ -112,7 +114,7 @@ class stock_invoice_onshipping(osv.osv_memory):
context=context)
invoice_ids = res.values()
if not invoice_ids:
- raise osv.except_osv(_('Error'), _('Invoice is not created'))
+ raise osv.except_osv(_('Error'), _('Invoice is not created'))
if type == 'out_invoice':
xml_id = 'action_invoice_tree1'
@@ -124,12 +126,12 @@ class stock_invoice_onshipping(osv.osv_memory):
xml_id = 'action_invoice_tree4'
result = mod_obj._get_id(cr, uid, 'account', xml_id)
- id = mod_obj.read(cr, uid, result, ['res_id'])
- result = act_obj.read(cr, uid, id['res_id'])
+ id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
+ result = act_obj.read(cr, uid, id['res_id'], context=context)
result['res_id'] = invoice_ids
+ result['context'] = context
return result
stock_invoice_onshipping()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-
diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py
index dc4e6d465db..4a5206d1ef0 100644
--- a/addons/stock/wizard/stock_partial_move.py
+++ b/addons/stock/wizard/stock_partial_move.py
@@ -187,11 +187,11 @@ class stock_partial_move(osv.osv_memory):
def do_partial(self, cr, uid, ids, context):
rec_id = context and context.get('active_id', False)
- tracking_id = context.get('tracking_id', False)
- if tracking_id:
+ tracking_lot = context.get('tracking_lot', False)
+ if tracking_lot:
tracking = self.pool.get('stock.tracking')
- tracking_id = tracking.get_create_tracking_lot(cr, uid,[rec_id], context=context )
- context ['tracking_id'] = tracking_id
+ tracking_lot = tracking.get_create_tracking_lot(cr, uid,[rec_id], tracking_lot)
+ context ['tracking_lot'] = tracking_lot
move_obj = self.pool.get('stock.move')
move_ids = context.get('active_ids', False)
partial = self.browse(cr, uid, ids[0], context)
diff --git a/addons/stock/wizard/stock_split_move.py b/addons/stock/wizard/stock_split_move.py
index 0092656f83d..c1354e21578 100644
--- a/addons/stock/wizard/stock_split_move.py
+++ b/addons/stock/wizard/stock_split_move.py
@@ -38,7 +38,7 @@ class stock_split_move_line(osv.osv_memory):
res = super(stock_split_move_line, self).default_get(cr, uid, fields, context=context)
record_id = context and context.get('active_id', False) or False
pick_obj = self.pool.get('stock.picking')
- pick = pick_obj.browse(cr, uid, record_id)
+ pick = pick_obj.browse(cr, uid, record_id, context=context)
for m in [line for line in pick.move_lines]:
res['move%s'%(m.id)] = m.product_qty
return res
@@ -57,7 +57,7 @@ class stock_split_move_line(osv.osv_memory):
if record_id:
pick_obj = self.pool.get('stock.picking')
try:
- pick = pick_obj.browse(cr, uid, record_id)
+ pick = pick_obj.browse(cr, uid, record_id, context=context)
for m in [line for line in pick.move_lines]:
if 'move%s' % m.id not in self._columns:
self._columns['move%s' % m.id] = fields.float(string=m.product_id.name)
@@ -79,7 +79,7 @@ class stock_split_move_line(osv.osv_memory):
record_id = context and context.get('active_id', False) or False
assert record_id,'Active ID not found'
pick_obj = self.pool.get('stock.picking')
- pick = pick_obj.browse(cr, uid, record_id)
+ pick = pick_obj.browse(cr, uid, record_id, context=context)
arch_lst = ['', '
', '']
for m in [line for line in pick.move_lines]:
quantity = m.product_qty
@@ -106,10 +106,10 @@ class stock_split_move_line(osv.osv_memory):
move_obj = self.pool.get('stock.move')
record_id = context and context.get('active_id', False) or False
pick_obj = self.pool.get('stock.picking')
- pick = pick_obj.browse(cr, uid, record_id)
+ pick = pick_obj.browse(cr, uid, record_id, context=context)
data = self.read(cr, uid, ids[0])
move_ids = [m.id for m in [line for line in pick.move_lines]]
- for move in move_obj.browse(cr, uid, move_ids):
+ for move in move_obj.browse(cr, uid, move_ids, context=context):
quantity = data['move%s' % move.id]
if 0 < quantity < move.product_qty:
new_qty = move.product_qty - quantity
diff --git a/addons/stock_invoice_directly/i18n/fr.po b/addons/stock_invoice_directly/i18n/fr.po
index 3467771b8bb..a7092e8621f 100644
--- a/addons/stock_invoice_directly/i18n/fr.po
+++ b/addons/stock_invoice_directly/i18n/fr.po
@@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2009-09-08 14:34+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2010-05-21 10:33+0000\n"
+"Last-Translator: Christophe Chauvet - http://www.syleam.fr/ \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-04-17 04:20+0000\n"
+"X-Launchpad-Export-Date: 2010-05-22 04:00+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_invoice_directly
#: model:ir.module.module,shortdesc:stock_invoice_directly.module_meta_information
msgid "Invoice Picking Directly"
-msgstr ""
+msgstr "Facture la livraison directement"
diff --git a/addons/stock_planning/stock_planning.py b/addons/stock_planning/stock_planning.py
index fa0bec2f5b1..3bdc14bce82 100644
--- a/addons/stock_planning/stock_planning.py
+++ b/addons/stock_planning/stock_planning.py
@@ -161,6 +161,7 @@ class stock_sale_forecast_createlines(osv.osv_memory):
def create_forecast(self,cr, uid, ids, context={}):
product_obj = self.pool.get('product.product')
forecast_obj=self.pool.get('stock.sale.forecast')
+ mod_obj =self.pool.get('ir.model.data')
for f in self.browse(cr, uid, ids, context):
prod_categ_obj=self.pool.get('product.category')
template_obj=self.pool.get('product.template')
@@ -212,11 +213,14 @@ class stock_sale_forecast_createlines(osv.osv_memory):
'product_uom_categ' : p.uom_id.category_id.id,
'product_uos_categ' : prod_uos_categ,
})
+ result = mod_obj._get_id(cr, uid, 'stock_planning', 'view_stock_sale_forecast_filter')
+ id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
return {
'view_type': 'form',
"view_mode": 'tree',
'res_model': 'stock.sale.forecast',
- 'type': 'ir.actions.act_window',
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': id['res_id'],
}
stock_sale_forecast_createlines()
@@ -488,7 +492,7 @@ class stock_planning_createlines(osv.osv_memory):
def create_planning(self,cr, uid, ids, context={}):
product_obj = self.pool.get('product.product')
planning_obj=self.pool.get('stock.planning')
-
+ mod_obj =self.pool.get('ir.model.data')
for f in self.browse(cr, uid, ids, context=context):
if f.forecasted_products:
cr.execute("SELECT product_id \
@@ -562,11 +566,14 @@ class stock_planning_createlines(osv.osv_memory):
'stock_supply_location': stock_supply_location,
})
+ result = mod_obj._get_id(cr, uid, 'stock_planning', 'view_stock_planning_filter')
+ id = mod_obj.read(cr, uid, result, ['res_id'], context=context)
return {
'view_type': 'form',
"view_mode": 'tree',
'res_model': 'stock.planning',
- 'type': 'ir.actions.act_window',
+ 'type': 'ir.actions.act_window',
+ 'search_view_id': id['res_id'],
}
stock_planning_createlines()
diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml
index 5a504e56322..dfca96b0163 100644
--- a/addons/stock_planning/stock_planning_view.xml
+++ b/addons/stock_planning/stock_planning_view.xml
@@ -1,8 +1,8 @@
-
@@ -15,16 +15,16 @@
-
-
+
+
-
+
-
+
Stock and Sales Planning Periods
@@ -35,9 +35,9 @@
new
-
@@ -56,7 +56,7 @@
-
+
stock.period.treestock.period
@@ -78,7 +78,7 @@
tree,form
-
+
-
+
-
+
Create Stock and Sales Forecasts
@@ -120,9 +120,9 @@
new
-
+
-
+
@@ -133,19 +133,19 @@