@@ -306,4 +297,4 @@
-
+
\ No newline at end of file
diff --git a/addons/account/project/report/inverted_analytic_balance.rml b/addons/account/project/report/inverted_analytic_balance.rml
index 5761fc122c6..13bf6328486 100644
--- a/addons/account/project/report/inverted_analytic_balance.rml
+++ b/addons/account/project/report/inverted_analytic_balance.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/account/project/report/quantity_cost_ledger.rml b/addons/account/project/report/quantity_cost_ledger.rml
index 5c7e9331078..f5364039a94 100644
--- a/addons/account/project/report/quantity_cost_ledger.rml
+++ b/addons/account/project/report/quantity_cost_ledger.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/account/project/wizard/__init__.py b/addons/account/project/wizard/__init__.py
index 60f591fcb55..972373f87af 100644
--- a/addons/account/project/wizard/__init__.py
+++ b/addons/account/project/wizard/__init__.py
@@ -24,8 +24,7 @@ import account_analytic_balance_report
import account_analytic_inverted_balance_report
import account_analytic_cost_ledger_report
import account_analytic_cost_ledger_for_journal_report
-import account_analytic_check
import project_account_analytic_line
import account_analytic_chart
-# 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/account/project/wizard/account_analytic_chart_view.xml b/addons/account/project/wizard/account_analytic_chart_view.xml
index 9cc7a32633b..e4c13a07601 100644
--- a/addons/account/project/wizard/account_analytic_chart_view.xml
+++ b/addons/account/project/wizard/account_analytic_chart_view.xml
@@ -39,7 +39,7 @@
action="action_account_analytic_chart"
id="menu_action_analytic_account_tree2"
icon="STOCK_INDENT"
- groups="base.group_extended"/>
+ groups="analytic.group_analytic_accounting"/>
diff --git a/addons/account/project/wizard/account_analytic_check_view.xml b/addons/account/project/wizard/account_analytic_check_view.xml
deleted file mode 100644
index d12acd214a4..00000000000
--- a/addons/account/project/wizard/account_analytic_check_view.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- Account Analytic Check
- account.analytic.check
- form
-
-
-
-
-
-
- Analytic Check
- ir.actions.act_window
- account.analytic.check
- form
- form
-
- new
-
-
-
-
-
- Account Analytic Check
- client_print_multi
-
- action
- account.account
-
-
-
-
-
diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py
index 1883f48b912..119c1edef1a 100644
--- a/addons/account/report/account_aged_partner_balance.py
+++ b/addons/account/report/account_aged_partner_balance.py
@@ -28,195 +28,314 @@ from common_report_header import common_report_header
class aged_trial_report(rml_parse.rml_parse, common_report_header):
- def __init__(self, cr, uid, name, context):
- super(aged_trial_report, self).__init__(cr, uid, name, context=context)
- self.query_line = ''
- self.total_account = []
- self.localcontext.update({
- 'time': time,
- 'get_lines': self._get_lines,
- 'get_total': self._get_total,
- 'get_direction': self._get_direction,
- 'get_for_period': self._get_for_period,
- 'get_company': self._get_company,
- 'get_currency': self._get_currency,
- 'get_partners':self._get_partners,
- 'get_account': self._get_account,
- 'get_fiscalyear': self._get_fiscalyear,
- })
+ def __init__(self, cr, uid, name, context):
+ super(aged_trial_report, self).__init__(cr, uid, name, context=context)
+ self.query_line = ''
+ self.total_account = []
+ self.localcontext.update({
+ 'time': time,
+ 'get_lines_with_out_partner': self._get_lines_with_out_partner,
+ 'get_lines': self._get_lines,
+ 'get_total': self._get_total,
+ 'get_direction': self._get_direction,
+ 'get_for_period': self._get_for_period,
+ 'get_company': self._get_company,
+ 'get_currency': self._get_currency,
+ 'get_partners':self._get_partners,
+ 'get_account': self._get_account,
+ 'get_fiscalyear': self._get_fiscalyear,
+ })
- def set_context(self, objects, data, ids, report_type=None):
- self.query = data['form'].get('query_line', '')
- self.direction_selection = data['form'].get('direction_selection', 'past')
- self.date_from = data['form'].get('date_from', time.strftime('%Y-%m-%d'))
- if (data['form']['result_selection'] == 'customer' ):
- self.ACCOUNT_TYPE = ['receivable']
- elif (data['form']['result_selection'] == 'supplier'):
- self.ACCOUNT_TYPE = ['payable']
- else:
- self.ACCOUNT_TYPE = ['payable','receivable']
- return super(aged_trial_report, self).set_context(objects, data, ids, report_type=report_type)
+ def set_context(self, objects, data, ids, report_type=None):
+ self.query = data['form'].get('query_line', '')
+ self.direction_selection = data['form'].get('direction_selection', 'past')
+ self.date_from = data['form'].get('date_from', time.strftime('%Y-%m-%d'))
+ if (data['form']['result_selection'] == 'customer' ):
+ self.ACCOUNT_TYPE = ['receivable']
+ elif (data['form']['result_selection'] == 'supplier'):
+ self.ACCOUNT_TYPE = ['payable']
+ else:
+ self.ACCOUNT_TYPE = ['payable','receivable']
+ return super(aged_trial_report, self).set_context(objects, data, ids, report_type=report_type)
- def _get_lines(self, form):
- res = []
- account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
- self.cr.execute('SELECT DISTINCT res_partner.id AS id,\
- res_partner.name AS name \
- FROM res_partner,account_move_line AS l, account_account\
- WHERE (l.account_id=account_account.id)\
- AND ((reconcile_id IS NULL)\
- OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
- AND (l.partner_id=res_partner.id)\
- AND ' + self.query + ' \
- ORDER BY res_partner.name' , (self.date_from,))
- partners = self.cr.dictfetchall()
- ## mise a 0 du total
- for i in range(7):
- self.total_account.append(0)
- #
- # Build a string like (1,2,3) for easy use in SQL query
- partner_ids = [x['id'] for x in partners]
+ def _get_lines(self, form):
+ res = []
+ account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
+ self.cr.execute('SELECT DISTINCT res_partner.id AS id,\
+ res_partner.name AS name \
+ FROM res_partner,account_move_line AS l, account_account\
+ WHERE (l.account_id=account_account.id)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND (l.partner_id=res_partner.id)\
+ AND ' + self.query + ' \
+ ORDER BY res_partner.name' , (self.date_from,))
+ partners = self.cr.dictfetchall()
+ ## mise a 0 du total
+ for i in range(7):
+ self.total_account.append(0)
+ #
+ # Build a string like (1,2,3) for easy use in SQL query
+ partner_ids = [x['id'] for x in partners]
- # This dictionary will store the debit-credit for all partners, using partner_id as key.
- totals = {}
- self.cr.execute('SELECT partner_id, SUM(debit-credit) \
- FROM account_move_line AS l, account_account\
- WHERE (l.account_id = account_account.id)\
- AND (account_account.type IN %s)\
- AND (partner_id IN %s)\
- AND ((reconcile_id IS NULL)\
- OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
- AND ' + self.query + '\
- AND account_account.active\
- GROUP BY partner_id ' , (tuple(self.ACCOUNT_TYPE), tuple(partner_ids), self.date_from,))
- t = self.cr.fetchall()
- for i in t:
- totals[i[0]] = i[1]
+ # This dictionary will store the debit-credit for all partners, using partner_id as key.
+ totals = {}
+ self.cr.execute('SELECT partner_id, SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id = account_account.id)\
+ AND (account_account.type IN %s)\
+ AND (partner_id IN %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND ' + self.query + '\
+ AND account_account.active\
+ GROUP BY partner_id ' , (tuple(self.ACCOUNT_TYPE), tuple(partner_ids), self.date_from,))
+ t = self.cr.fetchall()
+ for i in t:
+ totals[i[0]] = i[1]
- # This dictionary will store the future or past of all partners
- future_past = {}
- if self.direction_selection == 'future':
- self.cr.execute('SELECT partner_id, SUM(debit-credit) \
- FROM account_move_line AS l, account_account\
- WHERE (l.account_id=account_account.id)\
- AND (account_account.type IN %s)\
- AND (COALESCE(date_maturity, date) < %s)\
- AND (partner_id IN %s)\
- AND ((reconcile_id IS NULL)\
- OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
- AND '+ self.query + '\
- AND account_account.active\
- GROUP BY partner_id', (tuple(self.ACCOUNT_TYPE), self.date_from, tuple(partner_ids),self.date_from,))
- t = self.cr.fetchall()
- for i in t:
- future_past[i[0]] = i[1]
- elif self.direction_selection == 'past': # Using elif so people could extend without this breaking
- self.cr.execute('SELECT partner_id, SUM(debit-credit) \
- FROM account_move_line AS l, account_account\
- WHERE (l.account_id=account_account.id)\
- AND (account_account.type IN %s)\
- AND (COALESCE(date_maturity,date) > %s)\
- AND (partner_id IN %s)\
- AND ((reconcile_id IS NULL)\
- OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
- AND '+ self.query + '\
- AND account_account.active\
- GROUP BY partner_id' , (tuple(self.ACCOUNT_TYPE), self.date_from, tuple(partner_ids), self.date_from,))
- t = self.cr.fetchall()
- for i in t:
- future_past[i[0]] = i[1]
+ # This dictionary will store the future or past of all partners
+ future_past = {}
+ if self.direction_selection == 'future':
+ self.cr.execute('SELECT partner_id, SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id=account_account.id)\
+ AND (account_account.type IN %s)\
+ AND (COALESCE(date_maturity, date) < %s)\
+ AND (partner_id IN %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active\
+ GROUP BY partner_id', (tuple(self.ACCOUNT_TYPE), self.date_from, tuple(partner_ids),self.date_from,))
+ t = self.cr.fetchall()
+ for i in t:
+ future_past[i[0]] = i[1]
+ elif self.direction_selection == 'past': # Using elif so people could extend without this breaking
+ self.cr.execute('SELECT partner_id, SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id=account_account.id)\
+ AND (account_account.type IN %s)\
+ AND (COALESCE(date_maturity,date) > %s)\
+ AND (partner_id IN %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active\
+ GROUP BY partner_id' , (tuple(self.ACCOUNT_TYPE), self.date_from, tuple(partner_ids), self.date_from,))
+ t = self.cr.fetchall()
+ for i in t:
+ future_past[i[0]] = i[1]
- # Use one query per period and store results in history (a list variable)
- # Each history will contain : history[1] = {'': }
- history = []
- for i in range(5):
- self.cr.execute('SELECT partner_id, SUM(debit-credit)\
- FROM account_move_line AS l, account_account\
- WHERE (l.account_id = account_account.id)\
- AND (account_account.type IN %s)\
- AND (COALESCE(date_maturity,date) BETWEEN %s AND %s)\
- AND (partner_id IN %s)\
- AND ((reconcile_id IS NULL)\
- OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
- AND '+ self.query + '\
- AND account_account.active\
- GROUP BY partner_id' , (tuple(self.ACCOUNT_TYPE), form[str(i)]['start'], form[str(i)]['stop'], tuple(partner_ids) ,self.date_from,))
- t = self.cr.fetchall()
- d = {}
- for i in t:
- d[i[0]] = i[1]
- history.append(d)
+ # Use one query per period and store results in history (a list variable)
+ # Each history will contain : history[1] = {'': }
+ history = []
+ for i in range(5):
+ args_list = (tuple(self.ACCOUNT_TYPE), tuple(partner_ids) ,self.date_from,)
+ dates_query = '(COALESCE(date_maturity,date)'
+ if form[str(i)]['start'] and form[str(i)]['stop']:
+ dates_query += ' BETWEEN %s AND %s)'
+ args_list += (form[str(i)]['start'], form[str(i)]['stop'])
+ elif form[str(i)]['start']:
+ dates_query += ' > %s)'
+ args_list += (form[str(i)]['start'],)
+ else:
+ dates_query += ' < %s)'
+ args_list += (form[str(i)]['stop'],)
+ self.cr.execute('SELECT partner_id, SUM(debit-credit)\
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id = account_account.id)\
+ AND (account_account.type IN %s)\
+ AND (partner_id IN %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active\
+ AND ' + dates_query + '\
+ GROUP BY partner_id' , args_list)
+ t = self.cr.fetchall()
+ d = {}
+ for i in t:
+ d[i[0]] = i[1]
+ history.append(d)
- for partner in partners:
- values = {}
- ## If choise selection is in the future
- if self.direction_selection == 'future':
- # Query here is replaced by one query which gets the all the partners their 'before' value
- before = False
- if future_past.has_key(partner['id']):
- before = [ future_past[partner['id']] ]
- self.total_account[6] = self.total_account[6] + (before and before[0] or 0.0)
- values['direction'] = before and before[0] or 0.0
- elif self.direction_selection == 'past': # Changed this so people could in the future create new direction_selections
- # Query here is replaced by one query which gets the all the partners their 'after' value
- after = False
- if future_past.has_key(partner['id']): # Making sure this partner actually was found by the query
- after = [ future_past[partner['id']] ]
+ for partner in partners:
+ values = {}
+ ## If choise selection is in the future
+ if self.direction_selection == 'future':
+ # Query here is replaced by one query which gets the all the partners their 'before' value
+ before = False
+ if future_past.has_key(partner['id']):
+ before = [ future_past[partner['id']] ]
+ self.total_account[6] = self.total_account[6] + (before and before[0] or 0.0)
+ values['direction'] = before and before[0] or 0.0
+ elif self.direction_selection == 'past': # Changed this so people could in the future create new direction_selections
+ # Query here is replaced by one query which gets the all the partners their 'after' value
+ after = False
+ if future_past.has_key(partner['id']): # Making sure this partner actually was found by the query
+ after = [ future_past[partner['id']] ]
- self.total_account[6] = self.total_account[6] + (after and after[0] or 0.0)
- values['direction'] = after and after[0] or ""
+ self.total_account[6] = self.total_account[6] + (after and after[0] or 0.0)
+ values['direction'] = after and after[0] or ""
- for i in range(5):
- during = False
- if history[i].has_key(partner['id']):
- during = [ history[i][partner['id']] ]
- # Ajout du compteur
- self.total_account[(i)] = self.total_account[(i)] + (during and during[0] or 0)
- values[str(i)] = during and during[0] or ""
+ for i in range(5):
+ during = False
+ if history[i].has_key(partner['id']):
+ during = [ history[i][partner['id']] ]
+ # Ajout du compteur
+ self.total_account[(i)] = self.total_account[(i)] + (during and during[0] or 0)
+ values[str(i)] = during and during[0] or ""
- total = False
- if totals.has_key( partner['id'] ):
- total = [ totals[partner['id']] ]
- values['total'] = total and total[0] or 0.0
- ## Add for total
- self.total_account[(i+1)] = self.total_account[(i+1)] + (total and total[0] or 0.0)
- values['name'] = partner['name']
+ total = False
+ if totals.has_key( partner['id'] ):
+ total = [ totals[partner['id']] ]
+ values['total'] = total and total[0] or 0.0
+ ## Add for total
+ self.total_account[(i+1)] = self.total_account[(i+1)] + (total and total[0] or 0.0)
+ values['name'] = partner['name']
- if values['total']:
- res.append(values)
+ if values['total']:
+ res.append(values)
- total = 0.0
- totals = {}
- for r in res:
- total += float(r['total'] or 0.0)
- for i in range(5)+['direction']:
- totals.setdefault(str(i), 0.0)
- totals[str(i)] += float(r[str(i)] or 0.0)
- return res
+ total = 0.0
+ totals = {}
+ for r in res:
+ total += float(r['total'] or 0.0)
+ for i in range(5)+['direction']:
+ totals.setdefault(str(i), 0.0)
+ totals[str(i)] += float(r[str(i)] or 0.0)
+ return res
- def _get_total(self,pos):
- period = self.total_account[int(pos)]
- return period
+ def _get_lines_with_out_partner(self, form):
+ res = []
+ account_move_line_obj = pooler.get_pool(self.cr.dbname).get('account.move.line')
+ ## mise a 0 du total
+ for i in range(7):
+ self.total_account.append(0)
+ totals = {}
+ self.cr.execute('SELECT SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id = account_account.id)\
+ AND (l.partner_id IS NULL)\
+ AND (account_account.type IN %s)\
+ AND ((reconcile_id IS NULL) \
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND ' + self.query + '\
+ AND account_account.active ' ,(tuple(self.ACCOUNT_TYPE), self.date_from, ))
+ t = self.cr.fetchall()
+ for i in t:
+ totals['No Partner Defined'] = i[0]
+ future_past = {}
+ if self.direction_selection == 'future':
+ self.cr.execute('SELECT SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id=account_account.id)\
+ AND (l.partner_id IS NULL)\
+ AND (account_account.type IN %s)\
+ AND (COALESCE(date_maturity, date) < %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active ', (tuple(self.ACCOUNT_TYPE), self.date_from, self.date_from, ))
+ t = self.cr.fetchall()
+ for i in t:
+ future_past['No Partner Defined'] = i[0]
+ elif self.direction_selection == 'past': # Using elif so people could extend without this breaking
+ self.cr.execute('SELECT SUM(debit-credit) \
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id=account_account.id)\
+ AND (l.partner_id IS NULL)\
+ AND (account_account.type IN %s)\
+ AND (COALESCE(date_maturity,date) > %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active ' , (tuple(self.ACCOUNT_TYPE), self.date_from, self.date_from,))
+ t = self.cr.fetchall()
+ for i in t:
+ future_past['No Partner Defined'] = i[0]
+ history = []
+ for i in range(5):
+ self.cr.execute('SELECT SUM(debit-credit)\
+ FROM account_move_line AS l, account_account\
+ WHERE (l.account_id = account_account.id)\
+ AND (l.partner_id IS NULL)\
+ AND (account_account.type IN %s)\
+ AND (COALESCE(date_maturity,date) BETWEEN %s AND %s)\
+ AND ((reconcile_id IS NULL)\
+ OR (reconcile_id IN (SELECT recon.id FROM account_move_reconcile AS recon WHERE recon.create_date > %s )))\
+ AND '+ self.query + '\
+ AND account_account.active ' , (tuple(self.ACCOUNT_TYPE), form[str(i)]['start'], form[str(i)]['stop'], self.date_from,))
+ t = self.cr.fetchall()
+ d = {}
+ for i in t:
+ d['No Partner Defined'] = i[0]
+ history.append(d)
+
+ values = {}
+ if self.direction_selection == 'future':
+ before = False
+ if future_past.has_key('No Partner Defined'):
+ before = [ future_past['No Partner Defined'] ]
+ self.total_account[6] = self.total_account[6] + (before and before[0] or 0.0)
+ values['direction'] = before and before[0] or 0.0
+ elif self.direction_selection == 'past':
+ after = False
+ if future_past.has_key('No Partner Defined'):
+ after = [ future_past['No Partner Defined'] ]
+ self.total_account[6] = self.total_account[6] + (after and after[0] or 0.0)
+ values['direction'] = after and after[0] or ""
+
+ for i in range(5):
+ during = False
+ if history[i].has_key('No Partner Defined'):
+ during = [ history[i]['No Partner Defined'] ]
+ self.total_account[(i)] = self.total_account[(i)] + (during and during[0] or 0)
+ values[str(i)] = during and during[0] or ""
- def _get_direction(self,pos):
- period = self.total_account[int(pos)]
- return period
+ total = False
+ if totals.has_key( 'No Partner Defined' ):
+ total = [ totals['No Partner Defined'] ]
+ values['total'] = total and total[0] or 0.0
+ ## Add for total
+ self.total_account[(i+1)] = self.total_account[(i+1)] + (total and total[0] or 0.0)
+ values['name'] = 'No Partner Defined'
- def _get_for_period(self,pos):
- period = self.total_account[int(pos)]
- return period
+ if values['total']:
+ res.append(values)
- def _get_partners(self,data):
- if data['form']['result_selection'] == 'customer':
- return 'Receivable Accounts'
- elif data['form']['result_selection'] == 'supplier':
- return 'Payable Accounts'
- elif data['form']['result_selection'] == 'customer_supplier':
- return 'Receivable and Payable Accounts'
- return ''
+ total = 0.0
+ totals = {}
+ for r in res:
+ total += float(r['total'] or 0.0)
+ for i in range(5)+['direction']:
+ totals.setdefault(str(i), 0.0)
+ totals[str(i)] += float(r[str(i)] or 0.0)
+ return res
+
+ def _get_total(self,pos):
+ period = self.total_account[int(pos)]
+ return period
+
+ def _get_direction(self,pos):
+ period = self.total_account[int(pos)]
+ return period
+
+ def _get_for_period(self,pos):
+ period = self.total_account[int(pos)]
+ return period
+
+ def _get_partners(self,data):
+ if data['form']['result_selection'] == 'customer':
+ return 'Receivable Accounts'
+ elif data['form']['result_selection'] == 'supplier':
+ return 'Payable Accounts'
+ elif data['form']['result_selection'] == 'customer_supplier':
+ return 'Receivable and Payable Accounts'
+ return ''
report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner',
- 'addons/account/report/account_aged_partner_balance.rml',parser=aged_trial_report, header="internal landscape")
+ 'addons/account/report/account_aged_partner_balance.rml',parser=aged_trial_report, header="internal landscape")
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/report/account_aged_partner_balance.rml b/addons/account/report/account_aged_partner_balance.rml
index 5a74e46a115..2c5387fc246 100644
--- a/addons/account/report/account_aged_partner_balance.rml
+++ b/addons/account/report/account_aged_partner_balance.rml
@@ -1,6 +1,6 @@
-
+
@@ -23,7 +23,7 @@
-
+
@@ -33,42 +33,19 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
@@ -104,10 +81,10 @@
-
-
-
-
+
+
+
+
@@ -121,7 +98,7 @@
-
+
Chart of Account
@@ -132,14 +109,20 @@
Start Date
+
+ Period Length(days)
+
Partner's
+
+ Analysis Direction
+
Printing Date
-
+
[[ get_account(data) or '' ]]
@@ -147,28 +130,34 @@
[[ get_fiscalyear(data) or '' ]]
+ [[ formatLang(not_partner['direction'] or 0.00) ]]
+
+
+ [[ formatLang(not_partner['4'] or 0.00)]]
+
+
+ [[ formatLang(not_partner['3'] or 0.00)]]
+
+
+ [[ formatLang(not_partner['2'] or 0.00) ]]
+
+
+ [[ formatLang(not_partner['1'] or 0.00) ]]
+
+
+ [[ formatLang(not_partner['0'] or 0.00) ]]
+
+
+ [[ formatLang(not_partner['total'] or 0.00 ) ]]
+
+
-
+
diff --git a/addons/account/report/account_analytic_entries_report_view.xml b/addons/account/report/account_analytic_entries_report_view.xml
index bc40e6235d7..f7e543cb22c 100644
--- a/addons/account/report/account_analytic_entries_report_view.xml
+++ b/addons/account/report/account_analytic_entries_report_view.xml
@@ -107,7 +107,7 @@
A tool search lets you know statistics on your analytics records that match your needs.
-
+
diff --git a/addons/account/report/account_balance.py b/addons/account/report/account_balance.py
index d688741f1aa..19b06b10510 100644
--- a/addons/account/report/account_balance.py
+++ b/addons/account/report/account_balance.py
@@ -33,6 +33,7 @@ class account_balance(report_sxw.rml_parse, common_report_header):
self.sum_credit = 0.00
self.date_lst = []
self.date_lst_string = ''
+ self.result_acc = []
self.localcontext.update({
'time': time,
'lines': self.lines,
@@ -68,6 +69,34 @@ class account_balance(report_sxw.rml_parse, common_report_header):
return super(account_balance ,self)._get_account(data)
def lines(self, form, ids=[], done=None):#, level=1):
+ def _process_child(accounts,disp_acc,parent):
+ account_rec = [acct for acct in accounts if acct['id']==parent][0]
+ res = {
+ 'id': account_rec['id'],
+ 'type': account_rec['type'],
+ 'code': account_rec['code'],
+ 'name': account_rec['name'],
+ 'level': account_rec['level'],
+ 'debit': account_rec['debit'],
+ 'credit': account_rec['credit'],
+ 'balance': account_rec['balance'],
+ 'parent_id':account_rec['parent_id'],
+ 'bal_type':'',
+ }
+ self.sum_debit += account_rec['debit']
+ self.sum_credit += account_rec['credit']
+ if disp_acc == 'bal_movement':
+ if res['credit'] > 0 or res['debit'] > 0 or res['balance'] > 0 :
+ self.result_acc.append(res)
+ elif disp_acc == 'bal_solde':
+ if res['balance'] != 0:
+ self.result_acc.append(res)
+ else:
+ self.result_acc.append(res)
+ if account_rec['child_id']:
+ for child in account_rec['child_id']:
+ _process_child(accounts,disp_acc,child)
+
obj_account = self.pool.get('account.account')
if not ids:
ids = self.ids
@@ -76,8 +105,6 @@ class account_balance(report_sxw.rml_parse, common_report_header):
if not done:
done={}
- res = {}
- result_acc = []
ctx = self.context.copy()
ctx['fiscalyear'] = form['fiscalyear_id']
@@ -86,38 +113,18 @@ class account_balance(report_sxw.rml_parse, common_report_header):
elif form['filter'] == 'filter_date':
ctx['date_from'] = form['date_from']
ctx['date_to'] = form['date_to']
-
+ parents = ids
child_ids = obj_account._get_children_and_consol(self.cr, self.uid, ids, ctx)
if child_ids:
ids = child_ids
- accounts = obj_account.read(self.cr, self.uid, ids, ['type','code','name','debit','credit','balance','parent_id','level'], ctx)
- for account in accounts:
- if account['id'] in done:
- continue
- done[account['id']] = 1
- res = {
- 'id': account['id'],
- 'type': account['type'],
- 'code': account['code'],
- 'name': account['name'],
- 'level': account['level'],
- 'debit': account['debit'],
- 'credit': account['credit'],
- 'balance': account['balance'],
- 'parent_id':account['parent_id'],
- 'bal_type':'',
- }
- self.sum_debit += account['debit']
- self.sum_credit += account['credit']
- if form['display_account'] == 'bal_movement':
- if res['credit'] > 0 or res['debit'] > 0 or res['balance'] > 0 :
- result_acc.append(res)
- elif form['display_account'] == 'bal_solde':
- if res['balance'] != 0:
- result_acc.append(res)
- else:
- result_acc.append(res)
- return result_acc
+ accounts = obj_account.read(self.cr, self.uid, ids, ['type','code','name','debit','credit','balance','parent_id','level','child_id'], ctx)
+
+ for parent in parents:
+ if parent in done:
+ continue
+ done[parent] = 1
+ _process_child(accounts,form['display_account'],parent)
+ return self.result_acc
report_sxw.report_sxw('report.account.account.balance', 'account.account', 'addons/account/report/account_balance.rml', parser=account_balance, header="internal")
diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml
index d6c9ab114e5..eb221a6427b 100644
--- a/addons/account/report/account_balance.rml
+++ b/addons/account/report/account_balance.rml
@@ -1,6 +1,6 @@
-
+
@@ -20,7 +20,7 @@
-
+
@@ -116,7 +116,7 @@
-
+
@@ -208,11 +208,11 @@
-
+
-
[[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]]
- [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
+
[[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]]
+ [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
[[ repeatIn(lines(data['form']), 'a') ]][[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['code'] or removeParentNode('tr') ]]
-
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ '..'*(a['level']-1) ]][[ a['name'] ]]
-
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[formatLang(a['debit']) ]]
-
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font')]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['credit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['credit']) ]]
-
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance']) ]]
+
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ '..'*(a['level']-1) ]][[ a['name'] ]]
+
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]] [[ company.currency_id.symbol ]][[ a['type']<>'view' and removeParentNode('font') ]] [[formatLang(a['debit']) ]] [[ company.currency_id.symbol ]]
+
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font')]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['credit']) ]] [[ company.currency_id.symbol ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['credit']) ]] [[ company.currency_id.symbol ]]
+
[[ (a['level']>2 and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]]
Filter By [[ get_filter(data)!='No Filter' and '' or removeParentNode('font') ]]
-
Display Account
+
Display Account
Printing Date
@@ -194,25 +194,25 @@
[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data)]]
-
[[get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
-
+
-
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
+
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
- [[ repeatIn(get_lines_another('liability'), 'a') ]][[ a['code'] ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
+ [[ repeatIn(get_lines_another('liability'), 'a') ]][[ a['code'] ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
[[ '. '*(a['level']-1) ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]
- [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]]
+ [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
- [[ formatLang(abs(sum_dr())) or 0.0 ]]
+ [[ formatLang(abs(sum_dr())) or 0.0 ]] [[ company.currency_id.symbol ]]
@@ -283,7 +283,7 @@
[[ a['code'] ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]
- [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]]
+ [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]
-
Display Account
+
Display Account
Printing Date
@@ -214,28 +214,28 @@
[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data)]]
-
[[get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
-
+
-
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
+
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
- Total Amount([[ get_currency(data) ]])
+ Total Amount([[ get_currency(data) ]])
@@ -272,7 +272,7 @@
[[ '. '*(a['level']-1) ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]
- [[ a['balance'] and formatLang(abs(a['balance'])) or '' ]]
+ [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['code1'] ]]
@@ -281,24 +281,24 @@
[[ '. '*(a['level1']-1) ]][[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name1'] ]]
- [[ a['balance1'] and formatLang(abs(a['balance1'])) or 0.0 ]]
+ [[ a['balance1'] and formatLang(abs(a['balance1'])) or 0.0 ]] [[ company.currency_id.symbol ]]
[[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]]
- [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
+
[[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]]
+ [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
Fiscal Year
-
Journal
+
Journal
Filter By [[get_filter(data)!='No Filter' and get_filter(data) ]]
Printing Date
@@ -259,37 +259,37 @@
[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data) ]]
-
[[ get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
[[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]]
- [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
+
[[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]]
+ [[ data['model']=='ir.ui.menu' and 'Chart of Account' or removeParentNode('para') ]]
Fiscal Year
Journals
-
Display Account
+
Display Account
Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]
Entries Sorted By
Printing Date
@@ -216,28 +213,28 @@
[[ get_fiscalyear(data) or '' ]]
[[', '.join([ lt or '' for lt in get_journal(data) ]) ]]
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
-
+
[[ get_filter(data)=='No Filter' and get_filter(data) or removeParentNode('para') ]] [[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data) ]]
-
[[get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
+
+
+
diff --git a/addons/account/report/account_invoice_report.py b/addons/account/report/account_invoice_report.py
index 9021878d40a..c07ce03c2bf 100644
--- a/addons/account/report/account_invoice_report.py
+++ b/addons/account/report/account_invoice_report.py
@@ -48,7 +48,8 @@ class account_invoice_report(osv.osv):
'user_id': fields.many2one('res.users', 'Salesman', readonly=True),
'price_total': fields.float('Total Without Tax', readonly=True),
'price_total_tax': fields.float('Total With Tax', readonly=True),
- 'price_average': fields.float('Average Price', readonly=True),
+ 'price_average': fields.float('Average Price', readonly=True, group_operator="avg"),
+ 'currency_rate': fields.float('Currency Rate', readonly=True),
'nbr':fields.integer('# of Lines', readonly=True),
'type': fields.selection([
('out_invoice','Customer Invoice'),
@@ -110,13 +111,24 @@ class account_invoice_report(osv.osv):
ail.quantity*ail.price_unit * -1
else
ail.quantity*ail.price_unit
- end) as price_total,
+ end) / cr.rate as price_total,
sum(case when ai.type in ('out_refund','in_invoice') then
ai.amount_total * -1
else
ai.amount_total
- end) as price_total_tax,
- sum(ail.quantity*ail.price_unit)/sum(ail.quantity*u.factor)*count(ail.product_id)::decimal(16,2) as price_average,
+ end)/(select count(l.id) from account_invoice_line as l
+ left join account_invoice as a ON (a.id=l.invoice_id)
+ where a.id=ai.id) /cr.rate as price_total_tax,
+ (case when ai.type in ('out_refund','in_invoice') then
+ sum(ail.quantity*ail.price_unit*-1)
+ else
+ sum(ail.quantity*ail.price_unit)
+ end)/(case when ai.type in ('out_refund','in_invoice') then
+ sum(ail.quantity*u.factor*-1)
+ else
+ sum(ail.quantity*u.factor)
+ end) / cr.rate as price_average,
+ cr.rate as currency_rate,
sum((select extract(epoch from avg(date_trunc('day',aml.date_created)-date_trunc('day',l.create_date)))/(24*60*60)::decimal(16,2)
from account_move_line as aml
left join account_invoice as a ON (a.move_id=aml.move_id)
@@ -126,16 +138,20 @@ class account_invoice_report(osv.osv):
ai.residual * -1
else
ai.residual
- end)/(select count(l.*) from account_invoice_line as l
+ end)/(select count(l.id) from account_invoice_line as l
left join account_invoice as a ON (a.id=l.invoice_id)
- where a.id=ai.id) as residual
+ where a.id=ai.id) / cr.rate as residual
from account_invoice_line as ail
left join account_invoice as ai ON (ai.id=ail.invoice_id)
left join product_template pt on (pt.id=ail.product_id)
- left join product_uom u on (u.id=ail.uos_id)
+ left join product_uom u on (u.id=ail.uos_id),
+ res_currency_rate cr
+ where cr.id in (select id from res_currency_rate cr2 where (cr2.currency_id = ai.currency_id)
+ and ((ai.date_invoice is not null and cr.name <= ai.date_invoice) or (ai.date_invoice is null and cr.name <= NOW())) limit 1)
group by ail.product_id,
ai.date_invoice,
ai.id,
+ cr.rate,
to_char(ai.date_invoice, 'YYYY'),
to_char(ai.date_invoice, 'MM'),
to_char(ai.date_invoice, 'YYYY-MM-DD'),
@@ -163,4 +179,4 @@ class account_invoice_report(osv.osv):
account_invoice_report()
-# 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/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml
index b241b725673..6333f2d61ee 100644
--- a/addons/account/report/account_invoice_report_view.xml
+++ b/addons/account/report/account_invoice_report_view.xml
@@ -59,52 +59,52 @@
+ help="Validated invoices of last 365 days"/>
+ help="Validated invoices of last 30 days"/>
+ help="Validated invoices during last 7 days"/>
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
@@ -113,9 +113,9 @@
-
+
-
+
@@ -156,10 +156,9 @@
diff --git a/addons/account/report/account_journal.rml b/addons/account/report/account_journal.rml
index 400eed846f3..88b93e06429 100644
--- a/addons/account/report/account_journal.rml
+++ b/addons/account/report/account_journal.rml
@@ -1,6 +1,6 @@
-
+
@@ -189,7 +189,7 @@
- Print Journal
+ Journal
@@ -221,8 +221,8 @@
End Date
-
[[ get_start_date(data) ]]
-
[[ get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
@@ -246,16 +246,16 @@
- [[ display_currency(data) == False or removeParentNode('blockTable') ]]
+ [[ display_currency(data) == False or removeParentNode('blockTable') ]]
- [[ get_data(data) or removeParentNode('para')]]
+ [[ get_data(data) or removeParentNode('para')]]
Chart of Account
Fiscal Year
Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]
-
Display Account
+
Display Account
Printing Date
@@ -220,25 +212,25 @@
[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data)]]
-
[[get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
-
+
-
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
+
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
- [[ repeatIn(get_lines(),'a' ) ]] [[ a['code'] ]][[ a['level']<3 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
+ [[ repeatIn(get_lines(),'a' ) ]] [[ a['code'] ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
- [[ '. '*(a['level']-1) ]][[ a['level']<3 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]
+ [[ '. '*(a['level']-1) ]][[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]
- [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]]
+ [[ a['balance'] and formatLang(abs(a['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
- [[ a['code1'] ]][[ a['level1']<3 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
+ [[ a['code1'] ]][[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]
- [[ '. '*(a['level1']-1) ]][[ a['level1']<3 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name1'] ]]
+ [[ '. '*(a['level1']-1) ]][[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name1'] ]]
- [[ a['balance1'] and formatLang(abs(a['balance1'])) or '' ]]
+ [[ a['balance1'] and formatLang(abs(a['balance1'])) or 0.0 ]] [[ company.currency_id.symbol ]]
@@ -308,7 +300,7 @@
[[ final_result()['type'] == 'Net Profit C.F.B.L.' and final_result()['type'] or '' ]]
- [[ final_result()['balance'] and final_result()['type'] == 'Net Profit C.F.B.L.' and formatLang(abs(final_result()['balance'])) or 0.0 ]]
+ [[ final_result()['balance'] and final_result()['type'] == 'Net Profit C.F.B.L.' and formatLang(abs(final_result()['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
@@ -317,7 +309,7 @@
[[ final_result()['type'] == 'Net Loss C.F.B.L.' and final_result()['type'] or '' ]]
- [[ final_result()['balance'] and final_result()['type'] == 'Net Loss C.F.B.L.' and formatLang(abs(final_result()['balance'])) or 0.0 ]]
+ [[ final_result()['balance'] and final_result()['type'] == 'Net Loss C.F.B.L.' and formatLang(abs(final_result()['balance'])) or 0.0 ]] [[ company.currency_id.symbol ]]
Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]
-
Display Account
+
Display Account
Printing Date
@@ -222,25 +215,25 @@
[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]]
Start Date
-
End Date
-
+
End Date
+
-
[[ get_start_date(data)]]
-
[[get_end_date(data) ]]
+
[[ formatLang(get_start_date(data),date=True) ]]
+
[[ formatLang(get_end_date(data),date=True) ]]
[[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]]
Start Period
-
End Period
-
+
End Period
+
[[ get_start_period(data) or removeParentNode('para') ]]
[[ get_end_period(data) or removeParentNode('para') ]]
-
+
-
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
+
[[ (data['form']['display_account']=='bal_all' and 'All') or (data['form']['display_account']=='bal_movement' and 'With movements') or 'With balance is not equal to 0']]
@@ -55,9 +53,9 @@
attrs="{'invisible':[('partner_id','!=',False)]}"/>
+ string="Contact"
+ on_change="onchange_partner_address_id(partner_address_id, email_from)"
+ colspan="1" />
@@ -142,9 +140,9 @@
-
-
-
+
+
+
@@ -228,6 +226,7 @@
+
-
+
@@ -249,9 +248,6 @@
-
@@ -302,12 +298,12 @@
/>
+
-
-
+ view.res.partner.tree.crm.inherited2res.partnertree
-
+
diff --git a/addons/crm/i18n/fi.po b/addons/crm/i18n/fi.po
index 6c3c0d7a10d..dade4c01bd6 100644
--- a/addons/crm/i18n/fi.po
+++ b/addons/crm/i18n/fi.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 18:50+0000\n"
-"Last-Translator: Heikki Kulhia \n"
+"PO-Revision-Date: 2010-09-08 09:03+0000\n"
+"Last-Translator: OpenERP Administrators \n"
"Language-Team: Finnish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/i18n/hr.po b/addons/crm/i18n/hr.po
index c2c277685ee..7a68dcb2363 100644
--- a/addons/crm/i18n/hr.po
+++ b/addons/crm/i18n/hr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 06:43+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2010-09-04 08:57+0000\n"
+"Last-Translator: Goran Kliska \n"
"Language-Team: Vinteh\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-05 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Language: hr\n"
@@ -337,7 +337,7 @@ msgstr "Kategorije"
#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
#, python-format
msgid "Warning!"
-msgstr ""
+msgstr "Upozorenje!"
#. module: crm
#: view:crm.case:0
@@ -698,6 +698,8 @@ msgid ""
"Default state of mind for period preceeding the 'Max Interval' computation. "
"This is the starting state of mind by default if the partner has no event."
msgstr ""
+"Zadano zadovoljstvo za razdoblje koje prethodi izračunu 'Max. interval'. Ovo "
+"je početno zadovoljstvo partnera dok još nema događaja."
#. module: crm
#: model:crm.case.categ,name:crm.categ_claim3
@@ -884,7 +886,7 @@ msgstr "Televizija"
#. module: crm
#: view:crm.segmentation:0
msgid "Stop Process"
-msgstr ""
+msgstr "Zaustavi proces"
#. module: crm
#: model:crm.case.categ,name:crm.categ_claim1
@@ -910,7 +912,7 @@ msgstr "Dani po Periodu"
#. module: crm
#: field:crm.segmentation.line,expr_value:0
msgid "Value"
-msgstr ""
+msgstr "Vrijednost"
#. module: crm
#: help:caldav.crm.export,init,name:0
@@ -2135,7 +2137,7 @@ msgstr "Nepromijenjen"
#: wizard_view:crm.phonecall.opportunity_set,create_partner:0
#: wizard_view:crm.phonecall.partner_create,init:0
msgid "Convert To Partner"
-msgstr ""
+msgstr "Pretvori u partnera"
#. module: crm
#: field:crm.case.rule,trg_state_from:0
@@ -2425,7 +2427,7 @@ msgstr "Vrati na Nepotvrđen"
#. module: crm
#: view:crm.case:0
msgid "Helpdesk Support"
-msgstr ""
+msgstr "Podrška Helpdesk-a"
#. module: crm
#: field:crm.case,email_cc:0
diff --git a/addons/crm/i18n/lt.po b/addons/crm/i18n/lt.po
index 6b6faea036e..173317f0732 100644
--- a/addons/crm/i18n/lt.po
+++ b/addons/crm/i18n/lt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 07:31+0000\n"
+"PO-Revision-Date: 2010-09-08 09:13+0000\n"
"Last-Translator: Giedrius Slavinskas \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Language: lt\n"
diff --git a/addons/crm/i18n/mn.po b/addons/crm/i18n/mn.po
new file mode 100644
index 00000000000..33726adf66c
--- /dev/null
+++ b/addons/crm/i18n/mn.po
@@ -0,0 +1,3954 @@
+# Mongolian 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: 2010-01-05 05:59+0000\n"
+"PO-Revision-Date: 2010-09-09 03:44+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Mongolian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: crm
+#: field:crm.email.add.cc,name:0
+msgid "Send to"
+msgstr ""
+
+#. module: crm
+#: help:crm.meeting,exdate:0
+msgid ""
+"This property defines the list of date/time exceptions for "
+"arecurring calendar component."
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,act_mail_to_user:0
+msgid ""
+"Check this if you want the rule to send an email to the responsible person."
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Title"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_report_crm_case_section_categ2
+msgid "Cases by section and category2"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.lead.partner_create,init,close:0
+msgid "Close Lead"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+msgid " 7 Days "
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,helpdesk:0
+msgid "Manages an Helpdesk service."
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Pending Jobs"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_state_to:0
+msgid "Button Pressed"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Planned costs"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.job.partner_create,init,close:0
+msgid "Close job request"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.stage,name:0
+msgid "Stage Name"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.case.history:0
+#: model:ir.actions.act_window,name:crm.crm_case_categ0-act
+#: model:ir.actions.act_window,name:crm.crm_case_section_open_act
+#: model:ir.ui.menu,name:crm.menu_crm_case_categ0-act
+#: model:ir.ui.menu,name:crm.next_id_51
+msgid "Cases"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,categ_id:0
+msgid ""
+"The partner category that will be added to partners that match the "
+"segmentation criterions after computation."
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_hr
+msgid "Human Resources"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_categ2
+msgid "Cases by Opportunities, Category and Type"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,claims:0
+msgid ""
+"Manages the supplier and customers claims, including your corrective or "
+"preventive actions."
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Amount"
+msgstr ""
+
+#. module: crm
+#: model:process.transition,note:crm.process_transition_opportunitymeeting0
+msgid "Normal or phone meeting for opportunity"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_claim2
+#: model:crm.case.stage,name:crm.stage_meet1
+msgid "Fixed"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/wizard/crm_job_wizard.py:0
+#: code:addons/crm/wizard/crm_lead_wizard.py:0
+#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#, python-format
+msgid "Please specify user's email address !"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_oppor5
+msgid "Campaign"
+msgstr ""
+
+#. module: crm
+#: view:crm.opportunity:0
+msgid "Search Opportunities"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: wizard_field:crm.job.meeting_set,init,duration:0
+#: wizard_field:crm.phonecall.meeting_set,init,duration:0
+msgid "Duration (Hours)"
+msgstr ""
+
+#. module: crm
+#: selection:crm.meeting,transparent:0
+msgid "TRANSPARENT"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,server_action_id:0
+msgid ""
+"Describes the action name.eg:on which object which ation to be taken on "
+"basis of which condition"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,section_id:0
+msgid ""
+"Section to which Case belongs to. Define Responsible user and Email account "
+"for mail gateway."
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: field:crm.case,partner_id:0
+#: model:crm.case.categ,name:crm.categ_lead4
+#: model:crm.case.categ,name:crm.categ_oppor4
+#: wizard_field:crm.case.opportunity.partner_opportunity,init,partner_id:0
+#: field:crm.case.rule,trg_partner_id:0
+#: selection:crm.email.add.cc,name:0
+#: field:crm.email.add.cc,partner_id:0
+#: wizard_field:crm.lead.opportunity_set,create_partner,partner_id:0
+#: wizard_field:crm.lead.opportunity_set,opportunity,partner_id:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+#: wizard_field:crm.phonecall.opportunity_set,create_partner,partner_id:0
+#: wizard_field:crm.phonecall.opportunity_set,opportunity,partner_id:0
+#: model:process.node,name:crm.process_node_partner0
+msgid "Partner"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.categ,section_id:0
+#: field:crm.case.category2,section_id:0
+#: view:crm.case.section:0
+#: field:crm.case.section,name:0
+#: field:crm.case.stage,section_id:0
+#: model:ir.model,name:crm.model_crm_case_section
+msgid "Case Section"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Proposed Salary"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.section,sequence:0
+msgid "Gives the sequence order when displaying a list of case sections."
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/crm_job_wizard.py:0
+#: code:addons/crm/wizard/crm_opportunity_wizard.py:0
+#: model:crm.case.categ,name:crm.categ_meet3
+#, python-format
+msgid "Phone Call"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_report_crm_case_section_stage
+msgid "Cases by section and stage"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_mail_to_email:0
+msgid "Mail to these emails"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_type:0
+msgid "None"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Special Keywords to Be Used in The Body"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Send New Email"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.history:0
+msgid "My Histories"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,segmentation_line:0
+msgid "Criteria"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_section_act
+#: model:ir.ui.menu,name:crm.menu_crm_case_section_act
+msgid "Sections"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,opportunity:0
+msgid "Tracks identified business opportunities for your sales pipeline."
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Exception Dates"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_type:0
+msgid "Last Action Date"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Appreciation"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job3
+msgid "Second Interview"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_cal_subscribe
+msgid "Subscribe to a Remote calendar"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_categ-act
+#: model:ir.ui.menu,name:crm.menu_crm_case_categ-act
+msgid "Categories"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#, python-format
+msgid "Warning!"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Dates"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Segmentation Test"
+msgstr ""
+
+#. module: crm
+#: model:process.transition,name:crm.process_transition_leadpartner0
+msgid "Prospect Partner"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+#: view:crm.opportunity:0
+msgid "Description Information"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Contact Name"
+msgstr ""
+
+#. module: crm
+#: selection:crm.lead.opportunity_set,create_partner,action:0
+#: selection:crm.phonecall.opportunity_set,create_partner,action:0
+msgid "Link to an existing partner"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_date_range_type:0
+msgid "Delay type"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+msgid "Contact"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Next Interview"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,regex_history:0
+msgid "Regular Expression on Case History"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_email_add_cc
+msgid "Email Add CC"
+msgstr ""
+
+#. module: crm
+#: model:process.transition,name:crm.process_transition_opportunitymeeting0
+msgid "Opportunity Meeting"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,canal_id:0
+msgid ""
+"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."
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Exception Rules"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,opportunity:0
+#: model:ir.actions.report.xml,name:crm.crm_business_opportunities_report
+msgid "Business Opportunities"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_claim1
+msgid "Accepted as Claim"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+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 ""
+
+#. module: crm
+#: field:crm.case,history_line:0
+msgid "Communication"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(email_from)s = Partner email"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead6
+msgid "Dead"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Confirm Meeting"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead1
+#: model:crm.case.categ,name:crm.categ_oppor1
+msgid "Existing Customer"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_meet2
+msgid "Home"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,categ_id:0
+#: field:crm.case.rule,trg_categ_id:0
+#: wizard_field:crm.job.reschedule_phone_call,init,category_id:0
+#: view:crm.opportunity:0
+#: wizard_field:crm.opportunity.reschedule_phone_call,init,category_id:0
+#: field:report.crm.case.section.categ.categ2,categ_id:0
+#: field:report.crm.case.section.categ.stage,categ_id:0
+#: field:report.crm.case.section.stage,categ_id:0
+msgid "Category"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ_stage
+#: 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 ""
+
+#. module: crm
+#: help:crm.case.rule,act_mail_to_watchers:0
+msgid ""
+"Check this if you want the rule to mark CC(mail to any other person defined "
+"in actions)."
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,class:0
+msgid "Privacy"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(partner)s = Partner name"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Action Information"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_user_phone)s = Responsible phone"
+msgstr ""
+
+#. module: crm
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: crm
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_categ0-act_open
+msgid "Open Cases"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.log,name:0
+#: view:crm.claim:0
+#: view:crm.job:0
+msgid "Status"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.case.opportunity.partner_opportunity,init:0
+#: wizard_button:crm.case.opportunity.partner_opportunity,init,confirm:0
+#: wizard_button:crm.lead.opportunity_set,opportunity,confirm:0
+#: wizard_button:crm.phonecall.opportunity_set,opportunity,confirm:0
+#: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity
+#: model:ir.actions.wizard,name:crm.wizard_partner_create_opportunity1
+msgid "Create Opportunity"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "August"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Meetings Tree"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: view:crm.case:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: view:crm.fundraising:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#, python-format
+msgid "Escalate"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_crm_case_categ_meet
+msgid "All Meetings"
+msgstr ""
+
+#. module: crm
+#: model:ir.module.module,shortdesc:crm.module_meta_information
+msgid "Customer & Supplier Relationship Management"
+msgstr ""
+
+#. module: crm
+#: view:crm.email.add.cc:0
+#: model:ir.actions.act_window,name:crm.action_view_crm_email_add_cc_wizard
+msgid "Add CC"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "June"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,som_interval_default:0
+msgid "Default (0=None)"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job7
+msgid "Refused by Company"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,planned_revenue:0
+msgid "Planned Revenue"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,allow_unlink:0
+msgid "Allow Delete"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "October"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor3
+msgid "Value Proposition"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_id)s = Case ID"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_oppor2
+msgid "New Business"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,email_from:0
+msgid "These people will receive email."
+msgstr ""
+
+#. module: crm
+#: help:crm.case.section,calendar:0
+msgid "Allows to show calendar"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+msgid " Today "
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.reschedule_phone_call,init:0
+#: wizard_view:crm.opportunity.reschedule_phone_call,init:0
+msgid "Phone Call Description"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.categ:0
+msgid "Case Category"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,som_interval_default:0
+msgid ""
+"Default state of mind for period preceeding the 'Max Interval' computation. "
+"This is the starting state of mind by default if the partner has no event."
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_claim3
+msgid "Policy Claims"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#: code:addons/crm/wizard/wizard_crm_send_email.py:0
+#, python-format
+msgid ""
+"You must define a responsible user for this case in order to use this action!"
+msgstr ""
+
+#. module: crm
+#: view:crm.phonecall:0
+msgid "Assigned to"
+msgstr ""
+
+#. module: crm
+#: view:res.partner.events:0
+msgid "Partner Events"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job4
+msgid "Contract Proposed"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_crm_case_job_req_main
+msgid "Jobs - Hiring Process"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Related Cases"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "September"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Communication history"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "New Claims"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Meetings Form"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor5
+msgid "Negotiation/Review"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
+#, python-format
+msgid "A partner is already defined on this phonecall."
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_stage
+msgid "Cases by Opportunities and Stage"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Date of Claim"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation.line:0
+msgid "Partner Segmentation Lines"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_category_act_leads_all
+msgid "All Leads"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Leads Form"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+#: model:ir.model,name:crm.model_crm_segmentation
+msgid "Partner Segmentation"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job5
+msgid "Contract Signed"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.subscribe,init:0
+msgid "Subscribe to Remote ICS"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_oppor1
+msgid "Existing Business"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,probability:0
+#: field:crm.case.categ,probability:0
+msgid "Probability (%)"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_lead
+msgid "Leads Cases"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.section,reply_to:0
+msgid ""
+"The email address put in the 'Reply-To' of all emails sent by Open ERP about "
+"cases in this section"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+#: model:ir.model,name:crm.model_crm_case_rule
+msgid "Case Rule"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm_opportunity.py:0
+#: code:addons/crm/wizard/crm_lead_wizard.py:0
+#: code:addons/crm/wizard/crm_opportunity_wizard.py:0
+#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor
+#, python-format
+msgid "Opportunity"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Emails"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead7
+msgid "Television"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Stop Process"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_claim1
+msgid "Factual Claims"
+msgstr ""
+
+#. module: crm
+#: view:crm.phonecall:0
+msgid "Search Phonecalls"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: field:crm.segmentation,som_interval:0
+msgid "Days per Periode"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation.line,expr_value:0
+msgid "Value"
+msgstr ""
+
+#. module: crm
+#: help:caldav.crm.export,init,name:0
+msgid "Save in .ics format"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,text:0
+#: wizard_field:crm.send.mail,init,text:0
+msgid "Message"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,exclusif:0
+msgid ""
+"Check if the category is limited to partners that match the segmentation "
+"criterions. If checked, remove the category from partners that doesn't match "
+"segmentation criterions"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,exclusif:0
+msgid "Exclusive"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,categ_id:0
+msgid ""
+"Category related to the section.Subdivide the CRM cases independently or "
+"section-wise."
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_state:0
+msgid "Set state to"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "Email!"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead6
+msgid "Radio"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_opportunity_assign_wizard
+msgid "crm.opportunity.assign_wizard"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions on States"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_date_type:0
+msgid "Trigger Date"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.history:0
+msgid "Search Histories"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.stage,sequence:0
+msgid "Gives the sequence order when displaying a list of case stages."
+msgstr ""
+
+#. module: crm
+#: model:crm.case.section,name:crm.section_support3
+#: view:crm.opportunity:0
+#: model:ir.ui.menu,name:crm.menu_crm_case_opp
+#: model:process.node,name:crm.process_node_opportunities0
+msgid "Opportunities"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,name:0
+msgid "The name of the segmentation."
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_partner_categ_id:0
+#: field:crm.segmentation,categ_id:0
+msgid "Partner Category"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,sales_purchase_active:0
+msgid "Use The Sales Purchase Rules"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,expr_name:0
+msgid "Purchase Amount"
+msgstr ""
+
+#. module: crm
+#: view:crm.phonecall:0
+msgid "Direction"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,email_cc:0
+#: help:crm.case.rule,act_email_cc:0
+msgid ""
+"These people will receive a copy of the future communication between partner "
+"and users by email"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "March"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Server Action to be Triggered"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_rule-act
+#: model:ir.ui.menu,name:crm.menu_crm_case_rule-act
+msgid "Rules"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.meeting_set,init:0
+#: wizard_view:crm.phonecall.meeting_set,init:0
+msgid "Plan Meeting"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,state:0
+msgid "Set State to"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_crm_send_email.py:0
+#, python-format
+msgid "There is no mail to reply!"
+msgstr ""
+
+#. module: crm
+#: wizard_button:crm.job.partner_create,init,confirm:0
+#: wizard_button:crm.lead.partner_create,init,confirm:0
+#: wizard_button:crm.phonecall.partner_create,init,confirm:0
+#: model:ir.actions.wizard,name:crm.wizard_crm_job_partner_create
+#: 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 ""
+
+#. module: crm
+#: selection:crm.segmentation.line,expr_operator:0
+msgid "<"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_description)s = Case description"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "My Funds"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,partner_mobile:0
+msgid "Mobile"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,name:0
+#: field:crm.segmentation.line,name:0
+msgid "Rule Name"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,planned_cost:0
+msgid "Planned Costs"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_case_history
+msgid "Case history"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_job2
+msgid "Junior Developer"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "My Meetings"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.categ,name:0
+msgid "Case Category Name"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_claim2
+msgid "Preventive"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_email_cc:0
+msgid "Add watchers (Cc)"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.export,init:0
+msgid "Export ICS"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm_claim.py:0
+#: code:addons/crm/crm_helpdesk.py:0
+#: code:addons/crm/crm_meeting.py:0
+#: code:addons/crm/crm_opportunity.py:0
+#: code:addons/crm/crm_phonecall.py:0
+#, python-format
+msgid "You can not assign Closed Case."
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: code:addons/crm/crm_meeting.py:0
+#: code:addons/crm/wizard/crm_job_wizard.py:0
+#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
+#: model:crm.case.section,name:crm.section_support1
+#: view:crm.meeting:0
+#, python-format
+msgid "Meetings"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions on Case Fields"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,date_action_next:0
+msgid "Next Action"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: field:crm.case,date_deadline:0
+#: selection:crm.case.rule,trg_date_type:0
+#: view:crm.opportunity:0
+msgid "Deadline"
+msgstr ""
+
+#. module: crm
+#: wizard_button:caldav.crm.export,init,end:0
+#: wizard_button:caldav.crm.import,init,end:0
+#: wizard_button:caldav.crm.subscribe,init,end:0
+msgid "_Cancel"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,category2_id:0
+msgid "Category Name"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Partner Segmentations"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Recurrency Rule"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_case_categ
+msgid "Category of case"
+msgstr ""
+
+#. module: crm
+#: field:crm.email.add.cc,subject:0
+#: view:crm.meeting:0
+#: wizard_field:crm.new.send.mail,init,subject:0
+#: view:crm.phonecall:0
+#: wizard_field:crm.send.mail,init,subject:0
+msgid "Subject"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,attendees:0
+msgid "Attendees"
+msgstr ""
+
+#. module: crm
+#: model:ir.module.module,description:crm.module_meta_information
+msgid ""
+"The generic Open ERP Customer Relationship Management\n"
+"system enables a group of people to intelligently and efficiently manage\n"
+"leads, opportunities, tasks, issues, requests, bugs, campaign, claims, etc.\n"
+"It manages key tasks such as communication, identification, prioritization,\n"
+"assignment, resolution and notification.\n"
+"\n"
+"Open ERP ensures that all cases are successfully tracked by users, customers "
+"and\n"
+"suppliers. It can automatically send reminders, escalate the request, "
+"trigger\n"
+"specific methods and lots of others actions based on your enterprise own "
+"rules.\n"
+"\n"
+"The greatest thing about this system is that users don't need to do "
+"anything\n"
+"special. They can just send email to the request tracker. Open ERP will "
+"take\n"
+"care of thanking them for their message, automatically routing it to the\n"
+"appropriate staff, and making sure all future correspondence gets to the "
+"right\n"
+"place.\n"
+"\n"
+"The CRM module has a email gateway for the synchronisation interface\n"
+"between mails and Open ERP."
+msgstr ""
+
+#. module: crm
+#: model:process.transition,note:crm.process_transition_leadpartner0
+msgid "Prospect is converting to business partner"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Regex on Case Name"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Pending Claims"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ_stage
+msgid "Cases by Opportunities, Category and Stage"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead4
+msgid "Print"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,som:0
+#: field:crm.case.log,som:0
+#: selection:crm.segmentation.line,expr_name:0
+msgid "State of Mind"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+#: view:crm.meeting:0
+#: field:report.crm.case.section.categ.categ2,category2_id:0
+#: field:report.crm.case.section.categ2,category2_id:0
+msgid "Type"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Refused"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Compute Segmentation"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Email"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_segmentation-act
+#: model:ir.actions.act_window,name:crm.crm_segmentation_tree-act
+#: model:ir.ui.menu,name:crm.menu_crm_segmentation-act
+#: model:ir.ui.menu,name:crm.next_id_53
+msgid "Segmentations"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_type:0
+msgid "Creation Date"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+#: view:crm.phonecall:0
+#: model:process.node,name:crm.process_node_meeting0
+msgid "Meeting"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(partner_email)s = Partner email"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+msgid "Reset to Draft"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_report_crm_case_section_categ_categ2
+msgid "Cases by section, Category and Category2"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor6
+msgid "Closed Won"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.act_crm_case_categ_crm_case_opened
+#: model:ir.actions.act_window,name:crm.act_crm_case_section_crm_case_opened
+#: model:ir.actions.act_window,name:crm.act_res_partner_2_crm_case_opened
+#: 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 ""
+
+#. module: crm
+#: field:crm.case,stage_id:0
+#: view:crm.case.stage:0
+#: field:report.crm.case.section.categ.categ2,stage_id:0
+#: field:report.crm.case.section.categ.stage,stage_id:0
+#: field:report.crm.case.section.categ2,stage_id:0
+#: field:report.crm.case.section.stage,stage_id:0
+msgid "Stage"
+msgstr ""
+
+#. module: crm
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.section,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the case "
+"section without removing it."
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_fund2
+msgid "Learning And Education"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Meeting Date"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.phonecall:0
+msgid "Convert to Partner"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_category_act_meetall3
+msgid "Next Meetings"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,partner_id:0
+msgid "Max Partner ID processed"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "You can not delete this case. You should better cancel it."
+msgstr ""
+
+#. module: crm
+#: wizard_button:caldav.crm.subscribe,init,open:0
+msgid "_Subscribe"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_priority_from:0
+msgid "Minimum Priority"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_meeting_generic_wizard_act
+msgid "Meeting Generic Wizard"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_claim2
+msgid "Value Claims"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.subscribe,display:0
+msgid "Message..."
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_phonecall_assign_wizard
+msgid "crm.phonecall.assign_wizard"
+msgstr ""
+
+#. module: crm
+#: view:report.crm.case.section.categ2:0
+msgid "Cases by Section and Category2"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "done"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+#: view:crm.phonecall:0
+msgid "Reminder"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,sales_purchase_active:0
+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 ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "open"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_remind_attach:0
+msgid "Remind with attachment"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead6
+#: model:crm.case.categ,name:crm.categ_oppor6
+msgid "Website"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_remind_user:0
+msgid "Remind responsible"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,state:0
+msgid "Execution Status"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,jobs:0
+msgid ""
+"Helps you to organise the jobs hiring process: evaluation, meetings, email "
+"integration..."
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Funds"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "draft"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_claim5
+#: model:crm.case.stage,name:crm.stage_meet4
+msgid "Awaiting Response"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,date:0
+#: field:crm.case.log,date:0
+#: selection:crm.case.rule,trg_date_type:0
+#: view:crm.claim:0
+#: view:crm.phonecall:0
+msgid "Date"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Name"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead2
+#: model:crm.case.categ,name:crm.categ_oppor2
+msgid "Self Generated"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_claim3
+msgid "Won't fix"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead4
+msgid "Converted"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Reply to Last Email"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Segmentation Description"
+msgstr ""
+
+#. module: crm
+#: help:crm.meeting,location:0
+msgid "Gives Location of Meeting"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "History"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_job
+msgid "Job Cases"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Jobs - Recruitment Tree"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,regex_name:0
+msgid "Regular Expression on Case Name"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,state:0
+#: field:report.crm.case.section.categ.categ2,state:0
+#: field:report.crm.case.section.categ.stage,state:0
+#: field:report.crm.case.section.categ2,state:0
+#: field:report.crm.case.section.stage,state:0
+msgid "State"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Send Reminder"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "References"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: view:crm.case:0
+#: wizard_button:crm.case.opportunity.partner_opportunity,init,end:0
+#: view:crm.claim:0
+#: view:crm.claim.assign_wizard:0
+#: view:crm.fundraising:0
+#: view:crm.helpdesk.assign_wizard:0
+#: wizard_button:crm.job.meeting_set,init,end:0
+#: wizard_button:crm.job.partner_create,init,end:0
+#: wizard_button:crm.job.reschedule_phone_call,init,end:0
+#: view:crm.lead:0
+#: wizard_button:crm.lead.opportunity_set,create_partner,end:0
+#: wizard_button:crm.lead.opportunity_set,opportunity,end:0
+#: wizard_button:crm.lead.partner_create,init,end:0
+#: view:crm.meeting.generic_wizard:0
+#: wizard_button:crm.new.send.mail,init,end:0
+#: view:crm.opportunity:0
+#: view:crm.opportunity.assign_wizard:0
+#: wizard_button:crm.opportunity.reschedule_phone_call,init,end:0
+#: view:crm.phonecall:0
+#: view:crm.phonecall.assign_wizard:0
+#: wizard_button:crm.phonecall.meeting_set,init,end:0
+#: wizard_button:crm.phonecall.opportunity_set,create_partner,end:0
+#: wizard_button:crm.phonecall.opportunity_set,opportunity,end:0
+#: wizard_button:crm.phonecall.partner_create,init,end:0
+#: wizard_button:crm.send.mail,init,end:0
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "No E-Mail ID Found for your Company address!"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Search Funds"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Type of claim"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Helpdesk Support Tree"
+msgstr ""
+
+#. module: crm
+#: view:res.partner.events:0
+msgid "General Description"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Other Info"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Claim Cost"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+#: view:crm.opportunity:0
+msgid "Schedule a Phone Call"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,ref:0
+msgid "Reference"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,exrule:0
+msgid "Exception Rule"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead2
+msgid "Mail"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_priority:0
+msgid "Set priority to"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor2
+msgid "Needs Analysis"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Search Claims"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_mail_body:0
+msgid "Mail body"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,meeting:0
+msgid "Manages the calendar of meetings of the users."
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,expr_name:0
+msgid "Sale Amount"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Add a CC"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,expr_operator:0
+msgid "="
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: field:crm.menu.config_wizard,name:0
+#: field:crm.segmentation,name:0
+msgid "Name"
+msgstr ""
+
+#. module: crm
+#: view:crm.opportunity:0
+msgid "Sales Stage"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,alarm_id:0
+msgid "Alarm"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_mail_to_watchers:0
+msgid "Mail to watchers (CC)"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+#: view:crm.meeting:0
+msgid "Next Meeting"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid ""
+"No E-Mail ID Found for your Company address or missing reply address in "
+"section!"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.section,allow_unlink:0
+msgid "Allows to delete non draft cases"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor7
+msgid "Closed Lost"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,bugs:0
+msgid "Bug Tracking"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.case.rule:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Actions"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case,priority:0
+#: selection:crm.case.rule,act_priority:0
+#: selection:crm.case.rule,trg_priority_from:0
+#: selection:crm.case.rule,trg_priority_to:0
+msgid "High"
+msgstr ""
+
+#. module: crm
+#: model:process.node,note:crm.process_node_partner0
+msgid "Convert to prospect to business partner"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "In Progress Claims"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_set_rrule
+msgid "Set RRULE"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor4
+msgid "Proposal/Price Quote"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Delay After Trigger Date:"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead5
+msgid "Web"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Campaign Type"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "State of Mind Computation"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#: code:addons/crm/wizard/wizard_crm_send_email.py:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_meeting_generic_wizard
+msgid "crm.meeting.generic_wizard"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_history-act
+msgid "Histories"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_job1
+msgid "Graduate"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.meeting_set,init:0
+#: wizard_view:crm.phonecall.meeting_set,init:0
+msgid ""
+"Note that you can also use the calendar view to graphically schedule your "
+"next meeting."
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Leads Tree"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,caldav_url:0
+msgid "Caldav URL"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Attendee"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "Email Fail!"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_phone1
+#: view:crm.phonecall:0
+#: 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 ""
+
+#. module: crm
+#: constraint:crm.case.section:0
+msgid "Error ! You cannot create recursive sections."
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_crm
+msgid "CRM & SRM"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,document_ics:0
+msgid ""
+" Will allow you to synchronise your Open ERP calendars with your phone, "
+"outlook, Sunbird, ical, ..."
+msgstr ""
+
+#. module: crm
+#: view:report.crm.case.section.categ.categ2:0
+#: view:report.crm.case.section.categ.stage:0
+#: view:report.crm.case.section.categ2:0
+#: view:report.crm.case.section.stage:0
+msgid "This Year"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_remind_partner:0
+msgid "Remind Partner"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case,priority:0
+#: selection:crm.case.rule,act_priority:0
+#: selection:crm.case.rule,trg_priority_from:0
+#: selection:crm.case.rule,trg_priority_to:0
+msgid "Highest"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Contract Data"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_range_type:0
+msgid "Days"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,bugs:0
+msgid "Used by companies to track bugs and support requests on software"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,document_ics:0
+msgid "Shared Calendar"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,reply_to:0
+msgid "Reply-To"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_categ
+msgid "Cases by Leads and Type"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_range_type:0
+msgid "Minutes"
+msgstr ""
+
+#. module: crm
+#: field:report.crm.case.section.categ2,amount_revenue:0
+#: field:report.crm.case.section.stage,amount_revenue:0
+msgid "Est.Revenue"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job1
+msgid "Initial Jobs Demand"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_priority_to:0
+msgid "Maximim Priority"
+msgstr ""
+
+#. module: crm
+#: selection:crm.meeting,transparent:0
+msgid "OPAQUE"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Claims Info"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.category2,name:0
+msgid "Case Category2 Name"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.lead.opportunity_set,opportunity:0
+#: wizard_view:crm.phonecall.opportunity_set,opportunity:0
+#: 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 ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_phone2
+#: view:crm.phonecall:0
+msgid "Held"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Helpdesk Supports"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: selection:crm.new.send.mail,init,state:0
+msgid "Unchanged"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.partner_create,init:0
+#: wizard_view:crm.lead.opportunity_set,create_partner:0
+#: wizard_view:crm.lead.partner_create,init:0
+#: wizard_view:crm.phonecall.opportunity_set,create_partner:0
+#: wizard_view:crm.phonecall.partner_create,init:0
+msgid "Convert To Partner"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_state_from:0
+msgid "Case State"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#: code:addons/crm/wizard/wizard_crm_send_email.py:0
+#, python-format
+msgid "Send"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,priority:0
+#: view:crm.fundraising:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Priority"
+msgstr ""
+
+#. module: crm
+#: view:crm.opportunity:0
+msgid "Source"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,location:0
+msgid "Location"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Payment Mode"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,trg_date_range:0
+msgid ""
+"Delay After Trigger Date, specifies you can put a negative number if you "
+"need a delay before the trigger date, like sending a reminder 15 minutes "
+"before a meeting."
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+#: view:crm.job:0
+#: view:crm.lead:0
+msgid "Stage: "
+msgstr ""
+
+#. module: crm
+#: view:crm.case.section:0
+msgid "Case section"
+msgstr ""
+
+#. module: crm
+#: model:process.node,note:crm.process_node_meeting0
+msgid "Schedule a normal or phone meeting"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/crm_claim.py:0
+#: code:addons/crm/crm_helpdesk.py:0
+#: code:addons/crm/crm_meeting.py:0
+#: code:addons/crm/crm_opportunity.py:0
+#: code:addons/crm/crm_phonecall.py:0
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Fields to Change"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead1
+msgid "Telesales"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_crm_case_history-act_main
+msgid "Cases Histories"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,create_date:0
+msgid "Created"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Information"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_segmentation_line
+msgid "Segmentation line"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.job.reschedule_phone_call,init,deadline:0
+#: wizard_field:crm.opportunity.reschedule_phone_call,init,deadline:0
+#: view:crm.phonecall:0
+msgid "Planned Date"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_range_type:0
+msgid "Hours"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,phonecall:0
+msgid ""
+"Helps you to encode the result of a phone call or to plan a list of phone "
+"calls to process."
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_cal_import
+msgid "Import ICS File"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Attendee Detail"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_job3
+msgid " > Bac +5"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "July"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_oppor1
+msgid "Prospecting"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,partner_name2:0
+msgid "Employee Email"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_meeting
+msgid "Meeting Cases"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Job Info"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Cancel Meeting"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.section,name:crm.section_support0
+msgid "Jobs"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_date)s = Creation date"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_phone3
+#: view:crm.phonecall:0
+msgid "Not Held"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_mail_to_user:0
+msgid "Mail to responsible"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Jobs - Recruitment Form"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_claim1
+msgid "Corrective"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_opportunity
+msgid "Opportunity Cases"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Support Query"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Template of Email to Send"
+msgstr ""
+
+#. module: crm
+#: field:report.crm.case.section.categ.categ2,month:0
+#: field:report.crm.case.section.categ.stage,month:0
+#: field:report.crm.case.section.categ2,month:0
+#: field:report.crm.case.section.stage,month:0
+msgid "Month"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.section,name:crm.section_support2
+#: view:crm.lead:0
+#: field:crm.menu.config_wizard,lead:0
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead
+#: model:ir.ui.menu,name:crm.menu_crm_case_categ0_act_leads
+#: model:process.node,name:crm.process_node_leads0
+msgid "Leads"
+msgstr ""
+
+#. module: crm
+#: wizard_button:crm.new.send.mail,init,send:0
+#: wizard_button:crm.send.mail,init,send:0
+msgid "Send Email"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.new.send.mail,init:0
+msgid "Set case state to"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.categ2_fund3
+msgid "Credit Card"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid ""
+"No E-Mail ID Found for the Responsible Partner or missing reply address in "
+"section!"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Search Jobs"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.history,log_id:0
+msgid "Log"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,fund:0
+msgid ""
+"This may help associations in their fund raising process and tracking."
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Reset to Unconfirmed"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Helpdesk Support"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,email_cc:0
+msgid "Watchers Emails"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Note"
+msgstr ""
+
+#. module: crm
+#: field:report.crm.case.section.categ.categ2,delay_close:0
+#: field:report.crm.case.section.categ.stage,delay_close:0
+#: field:report.crm.case.section.categ2,delay_close:0
+#: field:report.crm.case.section.stage,delay_close:0
+msgid "Delay Close"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case,priority:0
+#: selection:crm.case.rule,act_priority:0
+#: selection:crm.case.rule,trg_priority_from:0
+#: selection:crm.case.rule,trg_priority_to:0
+msgid "Low"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,date_closed:0
+#: selection:crm.case,state:0
+#: selection:crm.case.rule,act_state:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: selection:report.crm.case.section.categ.categ2,state:0
+#: selection:report.crm.case.section.categ.stage,state:0
+#: selection:report.crm.case.section.categ2,state:0
+#: selection:report.crm.case.section.stage,state:0
+msgid "Closed"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Name2"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "cancel"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_meet2
+msgid "Internal Meeting"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: field:crm.case,child_ids:0
+#: view:crm.claim:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+msgid "Events"
+msgstr ""
+
+#. module: crm
+#: help:crm.menu.config_wizard,lead:0
+msgid ""
+"Allows you to track and manage leads which are pre-sales requests or "
+"contacts, the very first contact with a customer request."
+msgstr ""
+
+#. module: crm
+#: help:crm.case,som:0
+msgid ""
+"The minds states allow to define a value scale which representsthe partner "
+"mentality in relation to our services.The scale hasto be created with a "
+"factor for each level from 0 (Very dissatisfied) to 10 (Extremely satisfied)."
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,freebusy:0
+msgid "FreeBusy"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_meet1
+msgid "Customer Meeting"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,doc2:0
+msgid "Attachment2"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,doc3:0
+msgid "Attachment3"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Degree"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,doc1:0
+msgid "Attachment1"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm_phonecall.py:0
+#: model:crm.case.section,name:crm.section_support_phone
+#: field:crm.menu.config_wizard,phonecall:0
+#: view:crm.phonecall:0
+#: model:ir.actions.act_window,name:crm.crm_case_categ_phone0
+#: model:ir.ui.menu,name:crm.menu_crm_case_phone
+#, python-format
+msgid "Phone Calls"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the case "
+"without removing it."
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_menu_config_wizard
+msgid "crm.menu.config_wizard"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.history:0
+msgid "Case History"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,partner_phone:0
+msgid "Phone"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.categ2_fund2
+msgid "Cheque"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,active:0
+#: field:crm.case.rule,active:0
+#: field:crm.case.section,active:0
+msgid "Active"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,act_remind_attach:0
+msgid ""
+"Check this if you want that all documents attached to the case be attached "
+"to the reminder email sent."
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,operator:0
+msgid "Mandatory Expression"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,expr_operator:0
+msgid ">"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Phone"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_send_mail
+msgid "Send Mail"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case.rule,trg_date_range_type:0
+msgid "Months"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim.assign_wizard:0
+#: view:crm.helpdesk.assign_wizard:0
+#: view:crm.opportunity.assign_wizard:0
+#: view:crm.phonecall.assign_wizard:0
+#: model:ir.actions.act_window,name:crm.action_crm_claim_assign_wizard
+#: model:ir.actions.act_window,name:crm.action_crm_helpdesk_assign_wizard
+#: 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 ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_cal_subscribe.py:0
+#, python-format
+msgid "Please provide Proper URL !"
+msgstr ""
+
+#. module: crm
+#: model:process.node,note:crm.process_node_opportunities0
+msgid "When a real project/opportunity is detected"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: wizard_field:crm.lead.opportunity_set,create_partner,action:0
+#: wizard_field:crm.phonecall.opportunity_set,create_partner,action:0
+msgid "Action"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm_claim.py:0
+#: model:crm.case.section,name:crm.section_support_claims
+#: view:crm.claim:0
+#: field:crm.menu.config_wizard,claims:0
+#: view:crm.phonecall:0
+#: model:ir.ui.menu,name:crm.menu_crm_case_claims
+#, python-format
+msgid "Claims"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,som_interval_decrease:0
+msgid "Decrease (0>1)"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_case_history_event
+msgid "History of Events"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_case_category2
+msgid "Category2 of case"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.new.send.mail,init,to:0
+#: wizard_field:crm.send.mail,init,to:0
+msgid "To"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_user_email)s = Responsible email"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_presale
+msgid "Sales"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.phonecall:0
+msgid "General"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead2
+msgid "Assigned"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead5
+msgid "Recycled"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead8
+#: model:crm.case.categ,name:crm.categ_oppor8
+msgid "Other"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.lead:0
+#: selection:crm.new.send.mail,init,state:0
+#: view:crm.opportunity:0
+msgid "Done"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation,som_interval_max:0
+msgid "Max Interval"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_category_act_oppor11
+msgid "All Opportunities"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: view:crm.case:0
+#: selection:crm.case,state:0
+#: selection:crm.case.rule,act_state:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+#: selection:report.crm.case.section.categ.categ2,state:0
+#: selection:report.crm.case.section.categ.stage,state:0
+#: selection:report.crm.case.section.categ2,state:0
+#: selection:report.crm.case.section.stage,state:0
+#, python-format
+msgid "Open"
+msgstr ""
+
+#. module: crm
+#: selection:crm.meeting,class:0
+msgid "PUBLIC"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/crm_job_wizard.py:0
+#: code:addons/crm/wizard/crm_lead_wizard.py:0
+#: code:addons/crm/wizard/crm_phonecall_wizard.py:0
+#, python-format
+msgid "A partner is already existing with the same name."
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_phonecall
+msgid "Phonecall Cases"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,sequence:0
+msgid "Gives the sequence order when displaying a list of case rules."
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,helpdesk:0
+msgid "Helpdesk"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,user_id:0
+#: field:crm.case.rule,trg_user_id:0
+#: view:crm.claim:0
+#: field:crm.claim.assign_wizard,user_id:0
+#: view:crm.fundraising:0
+#: field:crm.helpdesk.assign_wizard,user_id:0
+#: view:crm.job:0
+#: view:crm.meeting:0
+#: field:crm.meeting.generic_wizard,user_id:0
+#: view:crm.opportunity:0
+#: field:crm.opportunity.assign_wizard,user_id:0
+#: field:crm.phonecall.assign_wizard,user_id:0
+msgid "Responsible"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_claim4
+#: model:crm.case.stage,name:crm.stage_meet3
+msgid "Invalid"
+msgstr ""
+
+#. module: crm
+#: wizard_button:crm.job.meeting_set,init,order:0
+#: wizard_button:crm.phonecall.meeting_set,init,order:0
+msgid "Set Meeting"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,meeting:0
+msgid "Calendar of Meetings"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Cases By Stage and Estimates"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid ""
+"You can not escalate this case.\n"
+"You are already at the top level."
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Name"
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Claim/Action Description"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_max_history:0
+msgid "Maximum Communication History"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Meeting For Leads Generation"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.lead.opportunity_set,create_partner:0
+#: wizard_view:crm.lead.partner_create,init:0
+msgid "Are you sure you want to create a partner based on this lead ?"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job6
+msgid "Refused by Employee"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,partner_name:0
+msgid "Employee's Name"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_job2
+msgid "First Interview"
+msgstr ""
+
+#. module: crm
+#: view:report.crm.case.section.categ.categ2:0
+#: view:report.crm.case.section.categ.stage:0
+#: view:report.crm.case.section.categ2:0
+#: view:report.crm.case.section.stage:0
+msgid "This Month"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Availability (weeks)"
+msgstr ""
+
+#. module: crm
+#: view:crm.opportunity:0
+msgid "Opportunities Tree"
+msgstr ""
+
+#. module: crm
+#: help:crm.case,state:0
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
+"If the case needs to be reviewed then the state is set to 'Pending'."
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Open Jobs"
+msgstr ""
+
+#. module: crm
+#: selection:crm.email.add.cc,name:0
+msgid "Email Address"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,som_interval_max:0
+msgid ""
+"The computation is made on all events that occured during this interval, the "
+"past X periods."
+msgstr ""
+
+#. module: crm
+#: field:crm.case,case_id:0
+msgid "Related Case"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,server_action_id:0
+msgid "Server Action"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_categ_claim0
+msgid "All Claims"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.log,user_id:0
+msgid "User Responsible"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#, python-format
+msgid "Email not sent !"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.phonecall.partner_create,init,close:0
+msgid "Close Phonecall"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,email_last:0
+msgid "Latest E-Mail"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Regex on Communication History"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.categ2_fund4
+msgid "Demand Draft"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,id:0
+msgid "ID"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,log_ids:0
+msgid "Logs History"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.lead.opportunity_set,opportunity,name:0
+#: wizard_field:crm.phonecall.opportunity_set,opportunity,name:0
+msgid "Opportunity Summary"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Search Case"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Continue Process"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.history:0
+msgid "Case Description"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: field:crm.case,date_action_last:0
+msgid "Last Action"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,duration:0
+msgid "Duration"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_report_crm_case_section_categ_stage
+msgid "Cases by section, Category and stage"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Hired"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,jobs:0
+msgid "Jobs Hiring Process"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.next_id_52
+msgid "All Cases"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/crm_lead_wizard.py:0
+#, python-format
+msgid "A partner is already defined on this lead."
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Source"
+msgstr ""
+
+#. module: crm
+#: field:report.crm.case.section.categ.categ2,nbr:0
+#: field:report.crm.case.section.categ.stage,nbr:0
+#: field:report.crm.case.section.categ2,nbr:0
+#: field:report.crm.case.section.stage,nbr:0
+msgid "# of Cases"
+msgstr ""
+
+#. module: crm
+#: selection:crm.meeting,class:0
+msgid "PRIVATE"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.subscribe,init:0
+msgid "Provide path for Remote Calendar"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+#: field:crm.segmentation.line,segmentation_id:0
+msgid "Segmentation"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Funds Form"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Search Meetings"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: field:crm.case,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead3
+msgid "In Process"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation,state:0
+msgid "Running"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_user)s = Responsible name"
+msgstr ""
+
+#. 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 ""
+
+#. 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 ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_aftersale
+msgid "After-Sale Services"
+msgstr ""
+
+#. module: crm
+#: wizard_button:caldav.crm.export,init,end:0
+#: wizard_button:caldav.crm.import,display,end:0
+#: wizard_button:caldav.crm.subscribe,display,end:0
+#: view:crm.email.add.cc:0
+msgid "Ok"
+msgstr ""
+
+#. module: crm
+#: wizard_field:caldav.crm.export,init,name:0
+msgid "File name"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Search Leads"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,active:0
+msgid ""
+"If the active field is set to true, it will allow you to hide the case rule "
+"without removing it."
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/wizard/wizard_cal_subscribe.py:0
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_claim_assign_wizard
+msgid "crm.claim.assign_wizard"
+msgstr ""
+
+#. module: crm
+#: 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 ""
+
+#. module: crm
+#: selection:crm.case,state:0
+#: selection:crm.case.rule,act_state:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: selection:report.crm.case.section.categ.categ2,state:0
+#: selection:report.crm.case.section.categ.stage,state:0
+#: selection:report.crm.case.section.categ2,state:0
+#: selection:report.crm.case.section.stage,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Applied Job"
+msgstr ""
+
+#. module: crm
+#: help:crm.meeting,exrule:0
+msgid ""
+"defines a rule or repeating pattern for "
+"anexception to a recurrence set"
+msgstr ""
+
+#. module: crm
+#: view:crm.phonecall:0
+msgid "Relevant"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.case.opportunity.partner_opportunity,init,name:0
+msgid "Opportunity Name"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,rrule:0
+msgid "Recurrent Rule"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.import,init:0
+msgid "Import ICS"
+msgstr ""
+
+#. module: crm
+#: view:crm.phonecall:0
+msgid "Call Summary"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation.line,expr_operator:0
+msgid "Operator"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_case_log
+msgid "Case Communication History"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_oppor_categ
+msgid "Cases by Opportunities and Type"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "%(case_subject)s = Case subject"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,section_id:0
+#: field:crm.case.log,section_id:0
+#: field:crm.case.rule,trg_section_id:0
+#: field:crm.claim.assign_wizard,section_id:0
+#: field:crm.helpdesk.assign_wizard,section_id:0
+#: wizard_field:crm.job.reschedule_phone_call,init,section_id:0
+#: field:crm.meeting.generic_wizard,section_id:0
+#: field:crm.opportunity.assign_wizard,section_id:0
+#: wizard_field:crm.opportunity.reschedule_phone_call,init,section_id:0
+#: field:crm.phonecall.assign_wizard,section_id:0
+#: field:report.crm.case.section.categ.categ2,section_id:0
+#: field:report.crm.case.section.categ.stage,section_id:0
+#: field:report.crm.case.section.categ2,section_id:0
+#: field:report.crm.case.section.stage,section_id:0
+msgid "Section"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation.line,operator:0
+msgid "Optional Expression"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_fund1
+msgid "Social Rehabilitation And Rural Upliftment"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/wizard/crm_job_wizard.py:0
+#, python-format
+msgid "A partner is already defined on this job request."
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_lead1
+msgid "New"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,description:0
+msgid "Your action"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead3
+#: field:crm.case.history,email:0
+#: field:crm.email.add.cc,email:0
+#: view:crm.job:0
+msgid "Email"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,canal_id:0
+#: field:crm.case.log,canal_id:0
+msgid "Channel"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,act_mail_to_email:0
+msgid "Email-id of the persons whom mail is to be sent"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_claim
+msgid "Claim Cases"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "E-Mail Reminders (includes the content of the case)"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_action_report_crm_case_lead_stage
+msgid "Cases by Leads and Stage"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,exdate:0
+msgid "Exception Date/Times"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting.generic_wizard:0
+msgid "Generic Wizard"
+msgstr ""
+
+#. module: crm
+#: model:process.transition,note:crm.process_transition_leadopportunity0
+msgid "Creating business opportunities from Leads"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.next_id_64
+msgid "Reporting"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: view:crm.case:0
+#: selection:crm.case,state:0
+#: selection:crm.case.rule,act_state:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: selection:crm.new.send.mail,init,state:0
+#: view:crm.opportunity:0
+#: selection:report.crm.case.section.categ.categ2,state:0
+#: selection:report.crm.case.section.categ.stage,state:0
+#: selection:report.crm.case.section.categ2,state:0
+#: selection:report.crm.case.section.stage,state:0
+#, python-format
+msgid "Pending"
+msgstr ""
+
+#. module: crm
+#: model:process.transition,name:crm.process_transition_leadopportunity0
+msgid "Prospect Opportunity"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Expected Salary"
+msgstr ""
+
+#. module: crm
+#: model:ir.ui.menu,name:crm.menu_crm_configuration
+msgid "Configuration"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_new_send_mail
+msgid "Send New Mail"
+msgstr ""
+
+#. module: crm
+#: constraint:ir.cron:0
+msgid "Invalid arguments"
+msgstr ""
+
+#. module: crm
+#: field:crm.meeting,transparent:0
+msgid "Trensparent"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "My Cases"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead7
+#: model:crm.case.categ,name:crm.categ_oppor7
+msgid "Word of mouth"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Subject"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+#: view:crm.phonecall:0
+msgid "Convert to Opportunity"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_phone1
+msgid "Planned"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_meet3
+msgid "Customer Office"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Candidate Email"
+msgstr ""
+
+#. module: crm
+#: view:crm.opportunity:0
+msgid "Sales Stage: "
+msgstr ""
+
+#. module: crm
+#: view:crm.claim:0
+msgid "Type of Action"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_user_id:0
+msgid "Set responsible to"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Meeting With Candidates"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,som_interval:0
+msgid ""
+"A period is the average number of days between two cycle of sale or purchase "
+"for this segmentation. It's mainly used to detect if a partner has not "
+"purchased or buy for a too long time, so we suppose that his state of mind "
+"has decreased because he probably bought goods to another supplier. Use this "
+"functionality for recurring businesses."
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "December"
+msgstr ""
+
+#. module: crm
+#: view:report.crm.case.section.categ.categ2:0
+msgid "Search Cases by User"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Condition on Communication History"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_mail_to_partner:0
+msgid "Mail to partner"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Funds Tree"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_method:0
+msgid "Call Object Method"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.act_window,name:crm.crm_case_category_act_fund_all1
+msgid "All Funds"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,calendar:0
+#: view:crm.meeting:0
+#: model:ir.ui.menu,name:crm.menu_crm_case_category_act_meetings
+msgid "Calendar"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_job1
+msgid "Salesman"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.section,name:crm.section_support_help
+msgid "HelpDesk"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,ref2:0
+msgid "Reference 2"
+msgstr ""
+
+#. module: crm
+#: view:crm.segmentation:0
+msgid "Sales Purchase"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+#: 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 ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_fund4
+msgid "Arts And Culture"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_phone2
+#: view:crm.phonecall:0
+#: 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 ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#, python-format
+msgid "Historize"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: crm
+#: selection:crm.segmentation,state:0
+msgid "Not Running"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.case.opportunity.partner_opportunity,init,probability:0
+#: wizard_field:crm.lead.opportunity_set,opportunity,probability:0
+#: wizard_field:crm.phonecall.opportunity_set,opportunity,probability:0
+msgid "Success Probability"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: selection:crm.case,state:0
+#: selection:crm.case.rule,act_state:0
+#: selection:crm.case.rule,trg_state_from:0
+#: selection:crm.case.rule,trg_state_to:0
+#: view:crm.meeting:0
+#: selection:report.crm.case.section.categ.categ2,state:0
+#: selection:report.crm.case.section.categ.stage,state:0
+#: selection:report.crm.case.section.categ2,state:0
+#: selection:report.crm.case.section.stage,state:0
+#, python-format
+msgid "Draft"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,trg_date_range:0
+msgid "Delay after trigger date"
+msgstr ""
+
+#. module: crm
+#: view:crm.lead:0
+msgid "Lead Details"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,act_section_id:0
+msgid "Set section to"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case,priority:0
+#: selection:crm.case.rule,act_priority:0
+#: selection:crm.case.rule,trg_priority_from:0
+#: selection:crm.case.rule,trg_priority_to:0
+msgid "Normal"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
+#: code:addons/crm/wizard/wizard_crm_send_email.py:0
+#, python-format
+msgid "You must put a Partner eMail to use this action!"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.partner_create,init:0
+#: wizard_view:crm.lead.opportunity_set,create_partner:0
+#: wizard_view:crm.lead.partner_create,init:0
+#: 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 ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Qualication"
+msgstr ""
+
+#. module: crm
+#: view:crm.meeting:0
+msgid "Change RRule"
+msgstr ""
+
+#. module: crm
+#: selection:crm.email.add.cc,name:0
+#: field:crm.email.add.cc,user_id:0
+#: field:report.crm.case.section.categ.categ2,user_id:0
+#: field:report.crm.case.section.categ.stage,user_id:0
+#: field:report.crm.case.section.categ2,user_id:0
+#: field:report.crm.case.section.stage,user_id:0
+msgid "User"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "November"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_job2
+msgid "Licenced"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,parent_id:0
+msgid "Parent Section"
+msgstr ""
+
+#. module: crm
+#: wizard_view:crm.job.reschedule_phone_call,init:0
+#: wizard_button:crm.job.reschedule_phone_call,init,order:0
+#: wizard_view:crm.opportunity.reschedule_phone_call,init:0
+#: wizard_button:crm.opportunity.reschedule_phone_call,init,order:0
+#: model:ir.actions.act_window,name:crm.crm_case_categ_phone_create_partner
+#: 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 ""
+
+#. 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 ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "January"
+msgstr ""
+
+#. module: crm
+#: model:process.process,name:crm.process_process_contractprocess0
+msgid "Contract"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,child_ids:0
+msgid "Child Sections"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+msgid "Planned revenue"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_fund3
+msgid "Healthcare"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.claim.assign_wizard:0
+#: view:crm.helpdesk.assign_wizard:0
+#: view:crm.meeting:0
+#: view:crm.meeting.generic_wizard:0
+#: view:crm.opportunity:0
+#: view:crm.opportunity.assign_wizard:0
+#: view:crm.phonecall:0
+#: view:crm.phonecall.assign_wizard:0
+msgid "Assign"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,partner_address_id:0
+msgid "Partner Contact"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_meet1
+msgid "Office"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_fundraising
+msgid "Fund Raising Cases"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_case_stage
+msgid "Stage of case"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.fundraising:0
+#: view:crm.opportunity:0
+msgid "Estimates"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,user_id:0
+msgid "Responsible User"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: view:crm.case:0
+#, python-format
+msgid "Close"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_helpdesk_assign_wizard
+msgid "crm.helpdesk.assign_wizard"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions on Case Partner"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.section,code:0
+msgid "Section Code"
+msgstr ""
+
+#. module: crm
+#: wizard_field:crm.job.meeting_set,init,date:0
+#: wizard_field:crm.phonecall.meeting_set,init,date:0
+msgid "Meeting date"
+msgstr ""
+
+#. module: crm
+#: selection:crm.meeting,class:0
+msgid "CONFIDENTIAL"
+msgstr ""
+
+#. module: crm
+#: help:crm.case.rule,act_mail_body:0
+msgid "Content of mail"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_meet2
+msgid "Not fixed"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.categ,name:crm.categ_lead3
+#: model:crm.case.categ,name:crm.categ_oppor3
+msgid "Employee"
+msgstr ""
+
+#. module: crm
+#: field:crm.case,email_from:0
+msgid "Partner Email"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "% = The '%' Character"
+msgstr ""
+
+#. module: crm
+#: view:crm.case:0
+#: field:crm.case,name:0
+#: field:crm.case.history,description:0
+#: field:crm.case.history,note:0
+#: view:crm.job:0
+#: view:crm.meeting:0
+#: view:crm.opportunity:0
+#: view:crm.phonecall:0
+#: field:crm.segmentation,description:0
+msgid "Description"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "May"
+msgstr ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "Internal Notes"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: view:crm.case:0
+#: view:crm.claim:0
+#: view:crm.fundraising:0
+#: view:crm.job:0
+#: view:crm.lead:0
+#: wizard_field:crm.new.send.mail,init,cc:0
+#: view:crm.opportunity:0
+#: wizard_field:crm.send.mail,init,cc:0
+msgid "CC"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation.line,operator:0
+msgid "Mandatory / Optional"
+msgstr ""
+
+#. module: crm
+#: wizard_button:caldav.crm.import,init,open:0
+msgid "_Import"
+msgstr ""
+
+#. module: crm
+#: code:addons/crm/crm.py:0
+#: field:crm.case.log,case_id:0
+#: field:crm.claim,inherit_case_id:0
+#: field:crm.fundraising,inherit_case_id:0
+#: field:crm.helpdesk,inherit_case_id:0
+#: field:crm.job,inherit_case_id:0
+#: field:crm.lead,inherit_case_id:0
+#: field:crm.meeting,inherit_case_id:0
+#: field:crm.opportunity,inherit_case_id:0
+#: field:crm.phonecall,inherit_case_id:0
+#: model:ir.model,name:crm.model_crm_case
+#: model:res.request.link,name:crm.req_link_case
+#, python-format
+msgid "Case"
+msgstr ""
+
+#. module: crm
+#: selection:crm.case,priority:0
+#: selection:crm.case.rule,act_priority:0
+#: selection:crm.case.rule,trg_priority_from:0
+#: selection:crm.case.rule,trg_priority_to:0
+msgid "Lowest"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "February"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions on Priority Range"
+msgstr ""
+
+#. module: crm
+#: help:crm.segmentation,som_interval_decrease:0
+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 ""
+
+#. module: crm
+#: wizard_view:crm.new.send.mail,init:0
+#: wizard_view:crm.send.mail,init:0
+msgid "Mass Mailing"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "E-Mail Actions"
+msgstr ""
+
+#. module: crm
+#: field:report.crm.case.section.categ.categ2,name:0
+#: field:report.crm.case.section.categ.stage,name:0
+#: field:report.crm.case.section.categ2,name:0
+#: field:report.crm.case.section.stage,name:0
+msgid "Year"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.categ2_fund1
+msgid "Cash"
+msgstr ""
+
+#. module: crm
+#: view:crm.fundraising:0
+msgid "Funds by Categories"
+msgstr ""
+
+#. module: crm
+#: model:process.node,note:crm.process_node_leads0
+msgid "Very first contact with new prospect"
+msgstr ""
+
+#. module: crm
+#: selection:report.crm.case.section.categ.categ2,month:0
+#: selection:report.crm.case.section.categ.stage,month:0
+#: selection:report.crm.case.section.categ2,month:0
+#: selection:report.crm.case.section.stage,month:0
+msgid "April"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.stage,name:crm.stage_meet5
+msgid "Future"
+msgstr ""
+
+#. module: crm
+#: wizard_field:caldav.crm.export,init,file_path:0
+msgid "Save ICS file"
+msgstr ""
+
+#. module: crm
+#: wizard_field:caldav.crm.subscribe,init,url_path:0
+msgid "Provide path for remote calendar"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.log:0
+msgid "Case logs"
+msgstr ""
+
+#. module: crm
+#: view:crm.case.rule:0
+msgid "Conditions on Timing"
+msgstr ""
+
+#. module: crm
+#: model:ir.model,name:crm.model_crm_helpdesk
+msgid "Helpdesk Cases"
+msgstr ""
+
+#. module: crm
+#: model:ir.actions.wizard,name:crm.wizard_crm_cal_export
+msgid "Export ICS File"
+msgstr ""
+
+#. module: crm
+#: field:crm.case.rule,sequence:0
+#: field:crm.case.section,sequence:0
+#: field:crm.case.stage,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.import,init:0
+#: wizard_field:caldav.crm.import,init,file_path:0
+msgid "Select ICS file"
+msgstr ""
+
+#. module: crm
+#: wizard_view:caldav.crm.import,display:0
+msgid "Import Message"
+msgstr ""
+
+#. module: crm
+#: field:crm.segmentation.line,expr_name:0
+msgid "Control Variable"
+msgstr ""
+
+#. 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 ""
+
+#. module: crm
+#: view:crm.job:0
+msgid "New Jobs"
+msgstr ""
+
+#. module: crm
+#: field:crm.menu.config_wizard,fund:0
+msgid "Fund Raising Operations"
+msgstr ""
+
+#. module: crm
+#: model:crm.case.category2,name:crm.category_lead8
+msgid "Newsletter"
+msgstr ""
diff --git a/addons/crm/i18n/nl.po b/addons/crm/i18n/nl.po
index 7f30ac31938..23897d6aa9d 100644
--- a/addons/crm/i18n/nl.po
+++ b/addons/crm/i18n/nl.po
@@ -7,19 +7,19 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-07 07:38+0000\n"
+"PO-Revision-Date: 2010-09-02 07:24+0000\n"
"Last-Translator: OpenERP Administrators \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-08-12 03:47+0000\n"
+"X-Launchpad-Export-Date: 2010-09-03 03:46+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
#: field:crm.email.add.cc,name:0
msgid "Send to"
-msgstr ""
+msgstr "Verzenden naar"
#. module: crm
#: help:crm.meeting,exdate:0
@@ -27,27 +27,31 @@ msgid ""
"This property defines the list of date/time exceptions for "
"arecurring calendar component."
msgstr ""
+"Deze eigenschap definieert een lijst met datum/tijd uitgezonderingen bij "
+"herhalingsafspraken in de agenda."
#. module: crm
#: help:crm.case.rule,act_mail_to_user:0
msgid ""
"Check this if you want the rule to send an email to the responsible person."
msgstr ""
+"Vink dit aan wanneer de regel een email moet zenden naar de "
+"verantwoordelijke persoon."
#. module: crm
#: view:crm.meeting:0
msgid "Title"
-msgstr ""
+msgstr "Titel"
#. module: crm
#: model:ir.model,name:crm.model_report_crm_case_section_categ2
msgid "Cases by section and category2"
-msgstr ""
+msgstr "Dossiers op sectie en categorie2"
#. module: crm
#: wizard_field:crm.lead.partner_create,init,close:0
msgid "Close Lead"
-msgstr ""
+msgstr "Lead afsluiten"
#. module: crm
#: view:crm.job:0
@@ -55,17 +59,17 @@ msgstr ""
#: view:crm.opportunity:0
#: view:crm.phonecall:0
msgid " 7 Days "
-msgstr ""
+msgstr " 7 Dagen "
#. module: crm
#: help:crm.menu.config_wizard,helpdesk:0
msgid "Manages an Helpdesk service."
-msgstr ""
+msgstr "Beheert een helpdesk-service."
#. module: crm
#: view:crm.job:0
msgid "Pending Jobs"
-msgstr ""
+msgstr "Wachtende vacatures"
#. module: crm
#: field:crm.case.rule,trg_state_to:0
@@ -80,12 +84,12 @@ msgstr "Geraamde kosten"
#. module: crm
#: wizard_field:crm.job.partner_create,init,close:0
msgid "Close job request"
-msgstr ""
+msgstr "Vacature afsluiten"
#. module: crm
#: field:crm.case.stage,name:0
msgid "Stage Name"
-msgstr ""
+msgstr "Naam stadium"
#. module: crm
#: view:crm.case:0
@@ -109,12 +113,12 @@ msgstr ""
#. module: crm
#: model:ir.ui.menu,name:crm.menu_hr
msgid "Human Resources"
-msgstr ""
+msgstr "Personeelszaken"
#. 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 "Dossiers op kansen, categorie en soort"
#. module: crm
#: help:crm.menu.config_wizard,claims:0
@@ -122,22 +126,24 @@ msgid ""
"Manages the supplier and customers claims, including your corrective or "
"preventive actions."
msgstr ""
+"Beheert de claims van leveranciers en klanten, inclusief uw corrigerende of "
+"preventieve acties."
#. module: crm
#: view:crm.fundraising:0
msgid "Amount"
-msgstr ""
+msgstr "Bedrag"
#. module: crm
#: model:process.transition,note:crm.process_transition_opportunitymeeting0
msgid "Normal or phone meeting for opportunity"
-msgstr ""
+msgstr "Normale- of telefonische bespreking voor kans"
#. module: crm
#: model:crm.case.stage,name:crm.stage_claim2
#: model:crm.case.stage,name:crm.stage_meet1
msgid "Fixed"
-msgstr ""
+msgstr "Opgelost"
#. module: crm
#: code:addons/crm/crm.py:0
@@ -152,17 +158,17 @@ msgstr "Waarschuwing!"
#: code:addons/crm/wizard/wizard_crm_new_send_email.py:0
#, python-format
msgid "Please specify user's email address !"
-msgstr ""
+msgstr "A.u.b. emailadres gebruiker invoeren!"
#. module: crm
#: model:crm.case.categ,name:crm.categ_oppor5
msgid "Campaign"
-msgstr ""
+msgstr "Campagne"
#. module: crm
#: view:crm.opportunity:0
msgid "Search Opportunities"
-msgstr ""
+msgstr "Zoek kansen"
#. module: crm
#: model:ir.ui.menu,name:crm.menu_crm_case_section_stage_tree
diff --git a/addons/crm/i18n/pl.po b/addons/crm/i18n/pl.po
index 8a22c73cf24..06440c7a95d 100644
--- a/addons/crm/i18n/pl.po
+++ b/addons/crm/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 19:54+0000\n"
-"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
+"PO-Revision-Date: 2010-09-08 09:03+0000\n"
+"Last-Translator: OpenERP Administrators \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-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/i18n/pt.po b/addons/crm/i18n/pt.po
index 4f1655d6296..c2c44919832 100644
--- a/addons/crm/i18n/pt.po
+++ b/addons/crm/i18n/pt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 07:31+0000\n"
+"PO-Revision-Date: 2010-09-08 08:58+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/i18n/sk.po b/addons/crm/i18n/sk.po
index 34539ac2668..822168430ba 100644
--- a/addons/crm/i18n/sk.po
+++ b/addons/crm/i18n/sk.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 06:31+0000\n"
+"PO-Revision-Date: 2010-09-08 09:12+0000\n"
"Last-Translator: Radoslav Sloboda \n"
"Language-Team: Slovak \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/i18n/tr.po b/addons/crm/i18n/tr.po
index fa2d1a40b14..10611335406 100644
--- a/addons/crm/i18n/tr.po
+++ b/addons/crm/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2010-01-05 05:59+0000\n"
-"PO-Revision-Date: 2010-08-25 07:30+0000\n"
+"PO-Revision-Date: 2010-09-08 09:11+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm
diff --git a/addons/crm/res_partner_view.xml b/addons/crm/res_partner_view.xml
index 375d09d6888..4dad9f3dfdd 100644
--- a/addons/crm/res_partner_view.xml
+++ b/addons/crm/res_partner_view.xml
@@ -12,7 +12,7 @@
-
+
@@ -35,7 +35,7 @@
+ type="object" attrs="{'invisible':[('type','=','opportunity')]}" />
@@ -68,7 +68,7 @@
+ type="object" attrs="{'invisible':[('type','=','opportunity')]}" />
diff --git a/addons/crm/test/test_crm_meeting.yml b/addons/crm/test/test_crm_meeting.yml
index ef86261f091..07a05caa09a 100644
--- a/addons/crm/test/test_crm_meeting.yml
+++ b/addons/crm/test/test_crm_meeting.yml
@@ -78,6 +78,7 @@
-
!record {model: base_calendar.invite.attendee, id: base_calendar_invite_attendee_0}:
type: internal
+ send_mail: False
partner_id: base.res_partner_9
user_ids:
- base.user_demo
diff --git a/addons/crm/wizard/crm_lead_to_partner.py b/addons/crm/wizard/crm_lead_to_partner.py
index 98a075ba1ba..8592a934647 100644
--- a/addons/crm/wizard/crm_lead_to_partner.py
+++ b/addons/crm/wizard/crm_lead_to_partner.py
@@ -154,7 +154,7 @@ class crm_lead2partner(osv.osv_memory):
'mobile': lead.mobile,
'email': lead.email_from,
'fax': lead.fax,
- 'title': lead.title,
+ 'title': lead.title and lead.title.id or False,
'function': lead.function,
'street': lead.street,
'street2': lead.street2,
diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall.py b/addons/crm/wizard/crm_opportunity_to_phonecall.py
index 8c40201243c..fdf5cfc1f37 100644
--- a/addons/crm/wizard/crm_opportunity_to_phonecall.py
+++ b/addons/crm/wizard/crm_opportunity_to_phonecall.py
@@ -125,7 +125,7 @@ class crm_opportunity2phonecall(osv.osv_memory):
'partner_phone' : opp.phone or (opp.partner_address_id and opp.partner_address_id.phone or False),
'partner_mobile' : opp.partner_address_id and opp.partner_address_id.mobile or False,
'priority': opp.priority,
- 'opp_id': opp.id
+ 'opportunity_id': opp.id
}, context=context)
phonecall_obj.case_open(cr, uid, [new_case])
diff --git a/addons/crm_claim/i18n/fr.po b/addons/crm_claim/i18n/fr.po
index 61aa78278f3..494d9d576da 100644
--- a/addons/crm_claim/i18n/fr.po
+++ b/addons/crm_claim/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 12:07:13+0000\n"
-"PO-Revision-Date: 2010-08-20 12:07:13+0000\n"
+"POT-Creation-Date: 2010-08-20 12:07+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_claim
#: field:crm.claim,planned_revenue:0
@@ -87,12 +88,17 @@ msgstr ""
#. module: crm_claim
#: help:crm.claim,canal_id:0
-msgid "The channels represent the different communicationmodes available with the customer. With each commercial opportunity, you can indicate thecanall which is this opportunity source."
+msgid ""
+"The channels represent the different communicationmodes available with the "
+"customer. With each commercial opportunity, you can indicate thecanall which "
+"is this opportunity source."
msgstr ""
#. module: crm_claim
#: help:crm.claim,section_id:0
-msgid "Sales team to which Case belongs to.Define Responsible user and Email account for mail gateway."
+msgid ""
+"Sales team to which Case belongs to.Define Responsible user and Email "
+"account for mail gateway."
msgstr ""
#. module: crm_claim
@@ -383,7 +389,10 @@ msgstr ""
#. module: crm_claim
#: help:crm.claim,email_cc:0
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
msgstr ""
#. module: crm_claim
@@ -493,8 +502,10 @@ msgstr ""
#. module: crm_claim
#: model:ir.module.module,description:crm_claim.module_meta_information
-msgid "\n"
-"This modules allows you to track your customers/suppliers claims and flames.\n"
+msgid ""
+"\n"
+"This modules allows you to track your customers/suppliers claims and "
+"flames.\n"
"It is fully integrated with the email gateway so that you can create\n"
"automatically new claims based on incoming emails.\n"
" "
@@ -605,7 +616,8 @@ msgstr ""
#. module: crm_claim
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: crm_claim
@@ -677,9 +689,13 @@ msgstr ""
#. module: crm_claim
#: help:crm.claim,state:0
-msgid "The state is set to 'Draft', when a case is created. \n"
-"If the case is in progress the state is set to 'Open'. \n"
-"When the case is over, the state is set to 'Done'. \n"
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
@@ -745,4 +761,3 @@ msgstr ""
#: field:crm.claim.report,name:0
msgid "Year"
msgstr ""
-
diff --git a/addons/crm_fundraising/i18n/fr.po b/addons/crm_fundraising/i18n/fr.po
index fe6536bdb15..0d13dcc83cc 100644
--- a/addons/crm_fundraising/i18n/fr.po
+++ b/addons/crm_fundraising/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 12:29:52+0000\n"
-"PO-Revision-Date: 2010-08-20 12:29:52+0000\n"
+"POT-Creation-Date: 2010-08-20 12:29+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_fundraising
#: field:crm.fundraising,planned_revenue:0
@@ -38,7 +39,10 @@ msgstr ""
#. module: crm_fundraising
#: help:crm.fundraising,canal_id:0
-msgid "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."
+msgid ""
+"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."
msgstr ""
#. module: crm_fundraising
@@ -390,7 +394,10 @@ msgstr ""
#. module: crm_fundraising
#: help:crm.fundraising,email_cc:0
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
msgstr ""
#. module: crm_fundraising
@@ -567,7 +574,8 @@ msgstr ""
#. module: crm_fundraising
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: crm_fundraising
@@ -583,7 +591,9 @@ msgstr ""
#. module: crm_fundraising
#: help:crm.fundraising,section_id:0
-msgid "Sales team to which Case belongs to. Define Responsible user and Email account for mail gateway."
+msgid ""
+"Sales team to which Case belongs to. Define Responsible user and Email "
+"account for mail gateway."
msgstr ""
#. module: crm_fundraising
@@ -639,9 +649,13 @@ msgstr ""
#. module: crm_fundraising
#: help:crm.fundraising,state:0
-msgid "The state is set to 'Draft', when a case is created. \n"
-"If the case is in progress the state is set to 'Open'. \n"
-"When the case is over, the state is set to 'Done'. \n"
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
@@ -727,4 +741,3 @@ msgstr ""
#: field:crm.fundraising,duration:0
msgid "Duration"
msgstr ""
-
diff --git a/addons/crm_helpdesk/i18n/fr.po b/addons/crm_helpdesk/i18n/fr.po
index 50bebada7f4..dcabaf99fc3 100644
--- a/addons/crm_helpdesk/i18n/fr.po
+++ b/addons/crm_helpdesk/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 13:01:32+0000\n"
-"PO-Revision-Date: 2010-08-20 13:01:32+0000\n"
+"POT-Creation-Date: 2010-08-20 13:01+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_helpdesk
#: field:crm.helpdesk.report,nbr:0
@@ -257,7 +258,10 @@ msgstr ""
#. module: crm_helpdesk
#: help:crm.helpdesk,email_cc:0
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
msgstr ""
#. module: crm_helpdesk
@@ -461,7 +465,9 @@ msgstr ""
#. module: crm_helpdesk
#: help:crm.helpdesk,section_id:0
-msgid "Sales team to which Case belongs to. Define Responsible user and Email account for mail gateway."
+msgid ""
+"Sales team to which Case belongs to. Define "
+"Responsible user and Email account for mail gateway."
msgstr ""
#. module: crm_helpdesk
@@ -503,7 +509,8 @@ msgstr ""
#. module: crm_helpdesk
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: crm_helpdesk
@@ -547,7 +554,9 @@ msgstr ""
#. module: crm_helpdesk
#: help:crm.helpdesk,canal_id:0
-msgid "The channels represent the different communication modes available with the customer."
+msgid ""
+"The channels represent the different communication modes available with the "
+"customer."
msgstr ""
#. module: crm_helpdesk
@@ -557,9 +566,13 @@ msgstr ""
#. module: crm_helpdesk
#: help:crm.helpdesk,state:0
-msgid "The state is set to 'Draft', when a case is created. \n"
-"If the case is in progress the state is set to 'Open'. \n"
-"When the case is over, the state is set to 'Done'. \n"
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
@@ -635,4 +648,3 @@ msgstr ""
#: field:crm.helpdesk,duration:0
msgid "Duration"
msgstr ""
-
diff --git a/addons/crm_helpdesk/report/crm_helpdesk_report.py b/addons/crm_helpdesk/report/crm_helpdesk_report.py
index 631e03699f2..70a3adc369e 100644
--- a/addons/crm_helpdesk/report/crm_helpdesk_report.py
+++ b/addons/crm_helpdesk/report/crm_helpdesk_report.py
@@ -50,9 +50,6 @@ class crm_helpdesk_report(osv.osv):
('07', 'July'), ('08', 'August'),\
('09', 'September'), ('10', 'October'),\
('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),
'delay_close': fields.char('Delay to close', size=20, readonly=True),
'partner_id': fields.many2one('res.partner', 'Partner' , readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
diff --git a/addons/crm_profiling/i18n/nl.po b/addons/crm_profiling/i18n/nl.po
index d4d2ff52c45..1d9591b12b2 100644
--- a/addons/crm_profiling/i18n/nl.po
+++ b/addons/crm_profiling/i18n/nl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 04:54+0000\n"
-"Last-Translator: mga (Open ERP) \n"
+"PO-Revision-Date: 2010-09-02 07:22+0000\n"
+"Last-Translator: OpenERP Administrators \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-08-12 04:03+0000\n"
+"X-Launchpad-Export-Date: 2010-09-03 03:48+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_profiling
@@ -48,7 +48,7 @@ msgstr "crm_profiling beheer"
#. module: crm_profiling
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr "Ongeldige modelnaam in de definitie van de actie."
+msgstr "Ongeldige modelnaam in de actie-definitie."
#. module: crm_profiling
#: field:crm_profiling.answer,name:0
diff --git a/addons/crm_profiling/i18n/pl.po b/addons/crm_profiling/i18n/pl.po
index ed7fd9d01f5..992b0d16ec4 100644
--- a/addons/crm_profiling/i18n/pl.po
+++ b/addons/crm_profiling/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 19:09+0000\n"
-"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
+"PO-Revision-Date: 2010-08-26 06:38+0000\n"
+"Last-Translator: OpenERP Administrators \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-08-27 03:41+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_profiling
diff --git a/addons/crm_profiling/i18n/tr.po b/addons/crm_profiling/i18n/tr.po
index 6cf4ff61b90..59d09b8ddef 100644
--- a/addons/crm_profiling/i18n/tr.po
+++ b/addons/crm_profiling/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 08:02+0000\n"
+"PO-Revision-Date: 2010-09-08 08:56+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: crm_profiling
diff --git a/addons/decimal_precision/i18n/fr.po b/addons/decimal_precision/i18n/fr.po
index 90cfeda23dc..b6c89a7def6 100644
--- a/addons/decimal_precision/i18n/fr.po
+++ b/addons/decimal_precision/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 05:24:00+0000\n"
-"PO-Revision-Date: 2010-08-20 05:24:00+0000\n"
+"POT-Creation-Date: 2010-08-20 05:24+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:58+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: decimal_precision
#: field:decimal.precision,digits:0
@@ -27,7 +28,8 @@ msgstr ""
#. module: decimal_precision
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: decimal_precision
@@ -48,12 +50,13 @@ msgstr ""
#. module: decimal_precision
#: model:ir.module.module,description:decimal_precision.module_meta_information
-msgid "\n"
-"This module allows to configure the price accuracy you need for different kind\n"
+msgid ""
+"\n"
+"This module allows to configure the price accuracy you need for different "
+"kind\n"
"of usage: accounting, sales, purchases, ...\n"
"\n"
"The decimal precision is configured per company.\n"
-""
msgstr ""
#. module: decimal_precision
@@ -75,4 +78,3 @@ msgstr ""
#: model:ir.model,name:decimal_precision.model_decimal_precision
msgid "decimal.precision"
msgstr ""
-
diff --git a/addons/decimal_precision/i18n/mn.po b/addons/decimal_precision/i18n/mn.po
new file mode 100644
index 00000000000..627bfe63cf7
--- /dev/null
+++ b/addons/decimal_precision/i18n/mn.po
@@ -0,0 +1,81 @@
+# Mongolian 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: 2010-08-20 05:24+0000\n"
+"PO-Revision-Date: 2010-09-09 03:44+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Mongolian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: decimal_precision
+#: field:decimal.precision,digits:0
+msgid "Digits"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: decimal_precision
+#: view:decimal.precision:0
+msgid "Decimal Precision"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
+#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
+msgid "Decimal Accuracy Definitions"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.module.module,description:decimal_precision.module_meta_information
+msgid ""
+"\n"
+"This module allows to configure the price accuracy you need for different "
+"kind\n"
+"of usage: accounting, sales, purchases, ...\n"
+"\n"
+"The decimal precision is configured per company.\n"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: decimal_precision
+#: field:decimal.precision,name:0
+msgid "Usage"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.module.module,shortdesc:decimal_precision.module_meta_information
+msgid "Decimal Precision Configuration"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.model,name:decimal_precision.model_decimal_precision
+msgid "decimal.precision"
+msgstr ""
diff --git a/addons/decimal_precision/i18n/pt_BR.po b/addons/decimal_precision/i18n/pt_BR.po
new file mode 100644
index 00000000000..57253ab12b9
--- /dev/null
+++ b/addons/decimal_precision/i18n/pt_BR.po
@@ -0,0 +1,81 @@
+# Brazilian Portuguese 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: 2010-08-20 05:24+0000\n"
+"PO-Revision-Date: 2010-08-31 22:33+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Brazilian Portuguese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-02 03:55+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: decimal_precision
+#: field:decimal.precision,digits:0
+msgid "Digits"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: decimal_precision
+#: view:decimal.precision:0
+msgid "Decimal Precision"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.actions.act_window,name:decimal_precision.action_decimal_precision_form
+#: model:ir.ui.menu,name:decimal_precision.menu_decimal_precision_form
+msgid "Decimal Accuracy Definitions"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.module.module,description:decimal_precision.module_meta_information
+msgid ""
+"\n"
+"This module allows to configure the price accuracy you need for different "
+"kind\n"
+"of usage: accounting, sales, purchases, ...\n"
+"\n"
+"The decimal precision is configured per company.\n"
+msgstr ""
+
+#. module: decimal_precision
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: decimal_precision
+#: field:decimal.precision,name:0
+msgid "Usage"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.module.module,shortdesc:decimal_precision.module_meta_information
+msgid "Decimal Precision Configuration"
+msgstr ""
+
+#. module: decimal_precision
+#: model:ir.model,name:decimal_precision.model_decimal_precision
+msgid "decimal.precision"
+msgstr ""
diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml
index fdef01e2ef2..0dbba7323e2 100644
--- a/addons/delivery/delivery_view.xml
+++ b/addons/delivery/delivery_view.xml
@@ -99,8 +99,8 @@
-
-
+
+
@@ -144,6 +144,7 @@
+
@@ -156,6 +157,7 @@
+
@@ -168,6 +170,7 @@
+
@@ -183,6 +186,7 @@
+
@@ -207,6 +211,7 @@
+
@@ -219,6 +224,7 @@
+
@@ -231,6 +237,7 @@
+
@@ -243,6 +250,7 @@
+
@@ -255,6 +263,7 @@
+
@@ -267,6 +276,7 @@
+
diff --git a/addons/delivery/i18n/de.po b/addons/delivery/i18n/de.po
index da21c11edaa..0b9fa4548c7 100644
--- a/addons/delivery/i18n/de.po
+++ b/addons/delivery/i18n/de.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 03:23+0000\n"
+"PO-Revision-Date: 2010-08-29 10:21+0000\n"
"Last-Translator: Ferdinand-chricar \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-08-12 03:44+0000\n"
+"X-Launchpad-Export-Date: 2010-08-30 03:56+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
@@ -178,7 +178,9 @@ msgstr "Name"
#. module: delivery
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
-msgstr "Fehler: UOS sollte in einer anderen Kategorie sein als UOM"
+msgstr ""
+"Fehler: Die Verkaufseinheit sollte in einer anderen Kategorie sein als die "
+"Mengeneinheit"
#. module: delivery
#: field:delivery.grid,country_ids:0
@@ -190,8 +192,8 @@ msgstr "Länder"
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
-"Fehler: Die Standard UOM sowie die Beschaffungs UOM muss in derselben "
-"Kategorie sein."
+"Fehler: Die Standard Mengeneinheit sowie die Beschaffungs Mengeneinheit muss "
+"in derselben Kategorie sein."
#. module: delivery
#: view:sale.order:0
diff --git a/addons/delivery/i18n/ru.po b/addons/delivery/i18n/ru.po
index 4df773eb8ed..c1081028b7e 100644
--- a/addons/delivery/i18n/ru.po
+++ b/addons/delivery/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:26+0000\n"
+"PO-Revision-Date: 2010-09-08 09:13+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
diff --git a/addons/delivery/i18n/tr.po b/addons/delivery/i18n/tr.po
index 79666a02cbd..608204a300c 100644
--- a/addons/delivery/i18n/tr.po
+++ b/addons/delivery/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:46+0000\n"
+"PO-Revision-Date: 2010-09-08 09:07+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: delivery
diff --git a/addons/delivery/report/shipping.rml b/addons/delivery/report/shipping.rml
index 5089d261fe3..2c7107c2386 100644
--- a/addons/delivery/report/shipping.rml
+++ b/addons/delivery/report/shipping.rml
@@ -1,6 +1,6 @@
-
+
@@ -67,17 +67,16 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -103,8 +102,8 @@
+
- [[repeatIn(objects,'o')]]
@@ -114,20 +113,20 @@
- [[ o.sale_id and o.sale_id.partner_invoice_id and 'Invoiced to' or '' ]]
- [[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.partner_id.name or '']]
+ Invoiced to[[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.name or '']][[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.street or '']]
- [[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.zip or '']]
- [[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.city or '' ]]
+ [[ (o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.street2) or removeParentNode('para')]]
+ [[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.zip or '']] [[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.city or '' ]]
+ [[ (o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.state_id and o.sale_id.partner_invoice_id.state_id.name) or removeParentNode('para') ]][[ o.sale_id and o.sale_id.partner_invoice_id and o.sale_id.partner_invoice_id.country_id and o.sale_id.partner_invoice_id.country_id.name or '']]
- [[ o.address_id and o.address_id.partner_id and o.address_id.partner_id.name or '']]
- [[ o.address_id and o.address_id.name or '']]
+ [[ o.address_id and o.address_id.partner_id and o.address_id.partner_id.name or '' ]][[ o.address_id and o.address_id.street or '']]
- [[ o.address_id and o.address_id.zip or '']]
- [[ o.address_id and o.address_id.city or '']]
+ [[ o.address_id and o.address_id.street2 or removeParentNode('para')]]
+ [[ o.address_id and o.address_id.zip or '']] [[ o.address_id and o.address_id.city or '']]
+ [[ (o.address_id and o.address_id.state_id and o.address_id.state_id.name) or removeParentNode('para') ]][[ o.address_id and o.address_id.country_id and o.address_id.country_id.name or '']]
@@ -161,7 +160,7 @@
[[ o.sale_id and o.sale_id.name ]]
[[line.product_id.code ]] [[ line.product_id and line.product_id.name or '']]
@@ -204,10 +203,7 @@
[[ (line.prodlot_id and (line.prodlot_id.name + (line.prodlot_id.ref and ('/' + line.prodlot_id.ref) or ''))) or ' ' ]]
- [[ formatLang(line.product_qty) ]]
-
-
- [[ line.product_uom and line.product_uom.name ]]
+ [[ formatLang(line.product_qty) ]] [[ line.product_uom and line.product_uom.name ]]
@@ -219,4 +215,4 @@
-
+
\ No newline at end of file
diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py
index 76897d46e58..c9fd50986f7 100644
--- a/addons/delivery/stock.py
+++ b/addons/delivery/stock.py
@@ -32,10 +32,16 @@ class stock_picking(osv.osv):
res = {}
uom_obj = self.pool.get('product.uom')
for picking in self.browse(cr, uid, ids, context):
- total_weight = 0.00
+ total_weight = total_weight_net = 0.00
+
for move in picking.move_lines:
total_weight += move.weight
- res[picking.id] = total_weight
+ total_weight_net += move.weight_net
+
+ res[picking.id] = {
+ 'weight': total_weight,
+ 'weight_net': total_weight_net,
+ }
return res
@@ -48,7 +54,12 @@ class stock_picking(osv.osv):
_columns = {
'carrier_id':fields.many2one("delivery.carrier","Carrier"),
'volume': fields.float('Volume'),
- 'weight': fields.function(_cal_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'),
+ 'weight': fields.function(_cal_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
+ store={
+ 'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20),
+ 'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20),
+ }),
+ 'weight_net': fields.function(_cal_weight, method=True, type='float', string='Net Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
store={
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 20),
'stock.move': (_get_picking_line, ['product_id','product_qty','product_uom','product_uos_qty'], 20),
@@ -128,22 +139,34 @@ class stock_move(osv.osv):
res = {}
uom_obj = self.pool.get('product.uom')
for move in self.browse(cr, uid, ids, context):
- weight = 0.00
+ weight = weight_net = 0.00
if move.product_id.weight > 0.00:
converted_qty = move.product_qty
-
+
if move.product_uom.id <> move.product_id.uom_id.id:
converted_qty = uom_obj._compute_qty(cr, uid, move.product_uom.id, move.product_qty, move.product_id.uom_id.id)
weight = (converted_qty * move.product_id.weight)
- res[move.id] = weight
+
+ if move.product_id.weight_net > 0.00:
+ weight_net = (converted_qty * move.product_id.weight_net)
+
+ res[move.id] = {
+ 'weight': weight,
+ 'weight_net': weight_net,
+ }
return res
-
+
_columns = {
- 'weight': fields.function(_cal_move_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'),
+ 'weight': fields.function(_cal_move_weight, method=True, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
store={
'stock.move': (lambda self, cr, uid, ids, c={}: ids, ['product_id', 'product_qty', 'product_uom'], 20),
}),
+ 'weight_net': fields.function(_cal_move_weight, method=True, type='float', string='Net weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_move_weight',
+ store={
+ 'stock.move': (lambda self, cr, uid, ids, c={}: ids, ['product_id', 'product_qty', 'product_uom'], 20),
+ }),
+
}
stock_move()
diff --git a/addons/document/document.py b/addons/document/document.py
index f60531f40ef..624af24c1fb 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -20,9 +20,7 @@
##############################################################################
import base64
-
from osv import osv, fields
-
import os
# from psycopg2 import Binary
@@ -48,12 +46,12 @@ class document_file(osv.osv):
result = {}
bin_size = context.get('bin_size', False)
for fbro in fbrl:
- fnode = nodes.node_file(None, None, nctx, fbro)
- if not bin_size:
- data = fnode.get_data(cr, fbro)
- result[fbro.id] = base64.encodestring(data or '')
- else:
- result[fbro.id] = fnode.get_data_len(cr, fbro)
+ fnode = nodes.node_file(None, None, nctx, fbro)
+ if not bin_size:
+ data = fnode.get_data(cr, fbro)
+ result[fbro.id] = base64.encodestring(data or '')
+ else:
+ result[fbro.id] = fnode.get_data_len(cr, fbro)
return result
@@ -166,7 +164,6 @@ class document_file(osv.osv):
dbro = None
dnode = None
ids2 = []
- result = False
for fbro in self.browse(cr, uid, ids, context=context):
if ('parent_id' not in vals or fbro.parent_id.id == vals['parent_id']) \
and ('name' not in vals or fbro.name == vals['name']) :
@@ -193,7 +190,7 @@ class document_file(osv.osv):
return result
def create(self, cr, uid, vals, context=None):
- if not context:
+ if context is None:
context = {}
vals['parent_id'] = context.get('parent_id', False) or vals.get('parent_id', False)
if not vals['parent_id']:
@@ -241,7 +238,7 @@ class document_file(osv.osv):
return bro.address_id.partner_id.id
return False
- def unlink(self, cr, uid, ids, context={}):
+ def unlink(self, cr, uid, ids, context=None):
stor = self.pool.get('document.storage')
unres = []
# We have to do the unlink in 2 stages: prepare a list of actual
@@ -251,7 +248,15 @@ class document_file(osv.osv):
for f in self.browse(cr, uid, ids, context):
# TODO: update the node cache
- r = stor.prepare_unlink(cr, uid, f.parent_id.storage_id, f)
+ par = f.parent_id
+ storage_id = None
+ while par:
+ if par.storage_id:
+ storage_id = par.storage_id
+ break
+ par = par.parent_id
+ assert storage_id, "Strange, found file #%s w/o storage!" % f.id
+ r = stor.prepare_unlink(cr, uid, storage_id, f)
if r:
unres.append(r)
res = super(document_file, self).unlink(cr, uid, ids, context)
diff --git a/addons/document/document_directory.py b/addons/document/document_directory.py
index 8fdbac0a5db..3486359f183 100644
--- a/addons/document/document_directory.py
+++ b/addons/document/document_directory.py
@@ -110,7 +110,7 @@ class document_directory(osv.osv):
('no_selfparent', 'check(parent_id <> id)', 'Directory cannot be parent of itself!'),
('dir_parented', 'check(parent_id IS NOT NULL OR storage_id IS NOT NULL)', 'Directory must have a parent or a storage')
]
- def name_get(self, cr, uid, ids, context={}):
+ def name_get(self, cr, uid, ids, context=None):
res = []
if not self.search(cr,uid,[('id','in',ids)]):
ids = []
diff --git a/addons/document/i18n/mn.po b/addons/document/i18n/mn.po
index 4c33b51a4ca..a0b922d4b94 100644
--- a/addons/document/i18n/mn.po
+++ b/addons/document/i18n/mn.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-08-25 07:34+0000\n"
+"PO-Revision-Date: 2010-09-08 09:08+0000\n"
"Last-Translator: ub121 \n"
"Language-Team: Mongolian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
diff --git a/addons/document/i18n/ru.po b/addons/document/i18n/ru.po
index f5dc23b3182..f6e6ed93ad2 100644
--- a/addons/document/i18n/ru.po
+++ b/addons/document/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 08:03+0000\n"
+"PO-Revision-Date: 2010-09-08 08:58+0000\n"
"Last-Translator: devcode \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
diff --git a/addons/document/i18n/tr.po b/addons/document/i18n/tr.po
index ffa85df4ac1..e8721532285 100644
--- a/addons/document/i18n/tr.po
+++ b/addons/document/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 08:01+0000\n"
+"PO-Revision-Date: 2010-09-08 08:55+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
diff --git a/addons/document/i18n/zh_CN.po b/addons/document/i18n/zh_CN.po
index e61f62c7dbb..a900fefb99e 100644
--- a/addons/document/i18n/zh_CN.po
+++ b/addons/document/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:53+0000\n"
+"PO-Revision-Date: 2010-09-08 09:15+0000\n"
"Last-Translator: Black Jack \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document
diff --git a/addons/document/nodes.py b/addons/document/nodes.py
index cf590dafdad..b849396498d 100644
--- a/addons/document/nodes.py
+++ b/addons/document/nodes.py
@@ -121,7 +121,7 @@ class node_context(object):
if fbro.parent_id:
parent = self.get_dir_node(cr, fbro.parent_id)
- return node_file(fbro.name,parent,self,fbro)
+ return node_file(fbro.name, parent, self, fbro)
class node_descriptor(object):
@@ -644,7 +644,7 @@ class node_dir(node_database):
if (not self.parent) and ndir_node:
if not dbro.parent_id:
raise IOError(errno.EPERM, "Cannot move the root directory!")
- self.parent = self.context.get_dir_node(cr, dbro.parent_id.id)
+ self.parent = self.context.get_dir_node(cr, dbro.parent_id)
assert self.parent
if self.parent != ndir_node:
@@ -1187,7 +1187,7 @@ class node_file(node_class):
return ''
def move_to(self, cr, ndir_node, new_name=False, fil_obj=None, ndir_obj=None, in_write=False):
- if ndir_node.context != self.context:
+ if ndir_node and ndir_node.context != self.context:
raise NotImplementedError("Cannot move files between contexts")
if (not self.check_perms(8)) and ndir_node.check_perms(2):
@@ -1205,11 +1205,11 @@ class node_file(node_class):
if (not self.parent):
# there *must* be a parent node for this one
- self.parent = self.context.get_dir_node(cr, dbro.parent_id.id)
+ self.parent = self.context.get_dir_node(cr, dbro.parent_id)
assert self.parent
ret = {}
- if self.parent != ndir_node:
+ if ndir_node and self.parent != ndir_node:
if not (isinstance(self.parent, node_dir) and isinstance(ndir_node, node_dir)):
logger.debug('Cannot move file %r from %r to %r', self, self.parent, ndir_node)
raise NotImplementedError('Cannot move files between dynamic folders')
diff --git a/addons/document/report/document_report.py b/addons/document/report/document_report.py
index 130a313dfd6..646f39ec590 100644
--- a/addons/document/report/document_report.py
+++ b/addons/document/report/document_report.py
@@ -40,7 +40,6 @@ class report_document_user(osv.osv):
'file_size': fields.integer('File Size', readonly=True),
'nbr':fields.integer('# of Files', readonly=True),
'type':fields.char('Directory Type',size=64,readonly=True),
- 'partner':fields.char('Partner',size=64,readonly=True),
}
def init(self, cr):
tools.drop_view_if_exists(cr, 'report_document_user')
@@ -72,12 +71,8 @@ class report_files_partner(osv.osv):
_auto = False
_columns = {
'name': fields.char('Year',size=64,required=False, readonly=True),
- 'directory': fields.char('Directory',size=64,readonly=True),
- 'create_date': fields.datetime('Date Created', readonly=True),
- 'change_date': fields.datetime('Modified Date', readonly=True),
'file_size': fields.integer('File Size', readonly=True),
'nbr':fields.integer('# of Files', readonly=True),
- 'type':fields.char('Directory Type',size=64,readonly=True),
'partner':fields.char('Partner',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),
@@ -86,15 +81,17 @@ class report_files_partner(osv.osv):
tools.drop_view_if_exists(cr, 'report_files_partner')
cr.execute("""
CREATE VIEW report_files_partner as (
- select min(f.id) as id,count(*) as nbr,
- to_char(f.create_date,'YYYY') as name,
- min(to_char(f.create_date,'MM')) as month,
- p.name as partner
- from ir_attachment f
- inner join res_partner p
- on (f.partner_id=p.id)
- where f.datas_fname is not null
- group by p.name, to_char(f.create_date,'YYYY')
+ SELECT min(f.id) AS id,
+ COUNT(*) AS nbr,
+ to_char(date_trunc('month', f.create_date),'YYYY') AS name,
+ to_char(date_trunc('month', f.create_date),'MM') AS month,
+ SUM(f.file_size) AS file_size,
+ p.name AS partner
+
+ FROM ir_attachment f
+ LEFT JOIN res_partner p ON (f.partner_id=p.id)
+ WHERE f.datas_fname IS NOT NULL
+ GROUP BY p.name, date_trunc('month', f.create_date)
)
""")
report_files_partner()
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index 00f308ff022..f69a0bbbaad 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -74,7 +74,7 @@ class abstracted_fs(object):
if not cr.fetchone():
continue
- cr.execute("SELECT id FROM ir_module_module WHERE name = 'document_ftp' AND state IN ('installed', 'to upgrade') ")
+ cr.execute("SELECT id FROM ir_module_module WHERE name = 'document_ftp' AND state IN ('installed', 'to install', 'to upgrade') ")
res = cr.fetchone()
if res and len(res):
self.db_name_list.append(db_name)
@@ -287,7 +287,7 @@ class abstracted_fs(object):
raise IOError(errno.EPERM, 'Cannot perform operation at root dir')
dbname = p_parts[0]
if dbname not in self.db_list():
- raise IOError(errno.ENOENT,'Invalid database path')
+ raise IOError(errno.ENOENT,'Invalid database path: %s' % dbname)
try:
db = pooler.get_db(dbname)
except Exception:
diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml
index e9ac2d84582..5a4df87fbe4 100644
--- a/addons/document_ftp/test/document_ftp_test2.yml
+++ b/addons/document_ftp/test/document_ftp_test2.yml
@@ -120,13 +120,23 @@
I delete the test2.txt from the server (RPC).
-
!delete { model: ir.attachment, id:, search: "[('name','=','test2.txt')]" }
+-
+ I also commit, because ftp would run in a different transaction.
+-
+ !python {model: ir.attachment}: |
+ cr.commit()
-
I check through FTP that test2.txt does not appear.
-
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
+ import ftplib
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
- assert ftp.nlst("test2.txt") == []
+ try:
+ nlst_result = ftp.nlst("test2.txt")
+ except ftplib.error_perm: # 550 error: 'path not exists'
+ nlst_result = []
+ assert "test2.txt" not in nlst_result, "Files: %r" % nlst_result
-
I create a "test-name.txt" file
-
@@ -152,7 +162,7 @@
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
try:
res = ftp.nlst("test-name.txt")
- assert res == []
+ assert res == [], "File has not been renamed!"
except error_perm, e:
pass
assert ftp.nlst("test-renamed.txt") == ['test-renamed.txt']
@@ -178,7 +188,7 @@
!python {model: ir.attachment}: |
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
- assert ftp.nlst("test3.txt") == ['test3.txt']
+ assert ftp.nlst("test3.txt") == ['test3.txt'], "File test3.txt is not there!"
-
I create a new folder, 'Test-Folder3', through FTP
I try to move test3.txt to 'Test-Folder3'
@@ -211,10 +221,10 @@
from document_ftp import test_easyftp as te
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
# TODO speed
- assert len(ftp.nlst()) > 200
+ assert len(ftp.nlst()) >= 200, "We haven't managed to store 200 files!"
-
I read the 200 files, check speed
# TODO
-
I move the 200 files to 'Test-Folder2'
- # TODO
\ No newline at end of file
+ # TODO
diff --git a/addons/document_ftp/test/document_ftp_test4.yml b/addons/document_ftp/test/document_ftp_test4.yml
index 9c3baed0844..eeed4b17dda 100644
--- a/addons/document_ftp/test/document_ftp_test4.yml
+++ b/addons/document_ftp/test/document_ftp_test4.yml
@@ -110,7 +110,7 @@
I check at the server that the file is attached to Partner1
-
!assert {model: ir.attachment, id: , search: "[('name','=','pat1-dynamic.txt')]" }:
- - parent_id.name == 'Partners of Test'
+ - parent_id.name == 'Documents'
- res_model == 'res.partner'
- res_id != False
-
diff --git a/addons/document_ics/i18n/tr.po b/addons/document_ics/i18n/tr.po
index cee29289a55..3ce39dce841 100644
--- a/addons/document_ics/i18n/tr.po
+++ b/addons/document_ics/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:31+0000\n"
+"PO-Revision-Date: 2010-09-08 09:12+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document_ics
diff --git a/addons/document_ics/i18n/zh_CN.po b/addons/document_ics/i18n/zh_CN.po
index df13fb1f652..a1557a6c35e 100644
--- a/addons/document_ics/i18n/zh_CN.po
+++ b/addons/document_ics/i18n/zh_CN.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:28+0000\n"
+"PO-Revision-Date: 2010-09-08 09:12+0000\n"
"Last-Translator: Black Jack \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: document_ics
diff --git a/addons/document_webdav/i18n/nl.po b/addons/document_webdav/i18n/nl.po
new file mode 100644
index 00000000000..a09b3d028f6
--- /dev/null
+++ b/addons/document_webdav/i18n/nl.po
@@ -0,0 +1,31 @@
+# Dutch 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-05-30 15:14+0000\n"
+"PO-Revision-Date: 2010-09-02 07:26+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Dutch \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-03 03:49+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: document_webdav_old
+#: model:ir.module.module,description:document_webdav_old.module_meta_information
+msgid ""
+"This is a complete document management system:\n"
+"\t* WebDav Interface\n"
+"\t* User Authentification\n"
+"\t* Document Indexation\n"
+msgstr ""
+"Dit is een compleet document management systeem:\n"
+"\t* WebDav Interface\n"
+"\t* Gebruiker authentificatie\n"
+"\t* Document Indexatie\n"
diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py
index 39fcfcd24c4..85225505237 100644
--- a/addons/email_template/email_template.py
+++ b/addons/email_template/email_template.py
@@ -123,7 +123,7 @@ class email_template(osv.osv):
_columns = {
'name' : fields.char('Name', size=100, required=True),
- 'object_name':fields.many2one('ir.model', 'Model'),
+ 'object_name':fields.many2one('ir.model', 'Resource'),
'model_int_name':fields.char('Model Internal Name', size=200,),
'from_account':fields.many2one(
'email_template.account',
@@ -132,31 +132,35 @@ class email_template(osv.osv):
'def_to':fields.char(
'Recipient (To)',
size=250,
- help="The default recipient of email."
- "Placeholders can be used here."),
+ help="The Recipient of email. "
+ "Placeholders can be used here. "
+ "e.g. ${object.email_to}"),
'def_cc':fields.char(
'CC',
size=250,
help="Carbon Copy address(es), comma-separated."
- " Placeholders can be used here."),
+ " Placeholders can be used here. "
+ "e.g. ${object.email_cc}"),
'def_bcc':fields.char(
'BCC',
size=250,
help="Blind Carbon Copy address(es), comma-separated."
- " Placeholders can be used here."),
+ " Placeholders can be used here. "
+ "e.g. ${object.email_bcc}"),
'reply_to':fields.char('Reply-To',
size=250,
help="The address recipients should reply to,"
- " if different from the From address."
- " Placeholders can be used here."),
+ " if different from the From address."
+ " Placeholders can be used here. "
+ "e.g. ${object.email_reply_to}"),
'message_id':fields.char('Message-ID',
size=250,
- help="The Message-ID header value, if you need to"
- "specify it, for example to automatically recognize the replies later."
- " Placeholders can be used here."),
- 'track_campaign_item':fields.boolean('Track campaign items',
- help="Enable this if you want the outgoing e-mails to include a tracking"
- " marker that makes it possible to identify the replies an link them back to the campaign item"),
+ help="Specify the Message-ID SMTP header to use in outgoing emails. Please note that this overrides the Resource tracking option! Placeholders can be used here."),
+ 'track_campaign_item':fields.boolean('Resource Tracking',
+ help="Enable this is you wish to include a special \
+tracking marker in outgoing emails so you can identify replies and link \
+them back to the corresponding resource record. \
+This is useful for CRM leads for example"),
'lang':fields.char(
'Language',
size=250,
@@ -164,9 +168,9 @@ class email_template(osv.osv):
" Placeholders can be used here. "
"eg. ${object.partner_id.lang}"),
'def_subject':fields.char(
- 'Default Subject',
+ 'Subject',
size=200,
- help="The default subject of email."
+ help="The subject of email."
" Placeholders can be used here.",
translate=True),
'def_body_text':fields.text(
@@ -182,10 +186,9 @@ class email_template(osv.osv):
help="the signature from the User details"
" will be appended to the mail"),
'file_name':fields.char(
- 'File Name Pattern',
+ 'Report Filename',
size=200,
- help="File name pattern can be specified with placeholders."
- "eg. 2009_SO003.pdf",
+ help="Name of the generated report file. Placeholders can be used in the filename. eg: 2009_SO003.pdf",
translate=True),
'report_template':fields.many2one(
'ir.actions.report.xml',
@@ -201,10 +204,12 @@ class email_template(osv.osv):
'ref_ir_act_window':fields.many2one(
'ir.actions.act_window',
'Window Action',
+ help="Action that will open this email template on Resource records",
readonly=True),
'ref_ir_value':fields.many2one(
'ir.values',
'Wizard Button',
+ help="Button in the side bar of the form view of this Resource that will invoke the Window Action",
readonly=True),
'allowed_groups':fields.many2many(
'res.groups',
@@ -636,9 +641,13 @@ class email_template(osv.osv):
'mail_type':'multipart/alternative',
}
- if template['track_campaign_item']:
- # get appropriate message-id
- mailbox_values.update(message_id=tools.misc.generate_tracking_message_id(record_id))
+ if template['message_id']:
+ # use provided message_id with placeholders
+ mailbox_values.update({'message_id': get_value(cursor, user, record_id, template['message_id'], template, context)})
+
+ elif template['track_campaign_item']:
+ # get appropriate message-id
+ mailbox_values.update({'message_id': tools.misc.generate_tracking_message_id(record_id)})
if not mailbox_values['account_id']:
raise Exception("Unable to send the mail. No account linked to the template.")
@@ -724,7 +733,7 @@ class email_template_preview(osv.osv_memory):
context = {}
#Fills up the selection box which allows records from the selected object to be displayed
self.context = context
- if 'template_id' in context.keys():
+ if 'template_id' in context:
ref_obj_id = self.pool.get('email.template').read(cr, uid, context['template_id'], ['object_name'], context)
ref_obj_name = self.pool.get('ir.model').read(cr, uid, ref_obj_id['object_name'][0], ['model'], context)['model']
model_obj = self.pool.get(ref_obj_name)
@@ -736,6 +745,16 @@ class email_template_preview(osv.osv_memory):
ref_obj_ids.insert(0, default_id)
return model_obj.name_get(cr, uid, ref_obj_ids, context)
+ def default_get(self, cr, uid, fields, context=None):
+ if context is None:
+ context = {}
+ result = super(email_template_preview, self).default_get(cr, uid, fields, context=context)
+ if (not fields or 'rel_model_ref' in fields) and 'template_id' in context \
+ and not result.get('rel_model_ref'):
+ selectables = self._get_model_recs(cr, uid, context=context)
+ result['rel_model_ref'] = selectables and selectables[0][0] or False
+ return result
+
def _default_model(self, cursor, user, context=None):
"""
Returns the default value for model field
@@ -776,7 +795,7 @@ class email_template_preview(osv.osv_memory):
}
_defaults = {
'ref_template': lambda self, cr, uid, ctx:ctx['template_id'],
- 'rel_model': _default_model
+ 'rel_model': _default_model,
}
def on_change_ref(self, cr, uid, ids, rel_model_ref, context=None):
if context is None:
diff --git a/addons/email_template/email_template_account.py b/addons/email_template/email_template_account.py
index b54d0fac4c5..24b7958276d 100644
--- a/addons/email_template/email_template_account.py
+++ b/addons/email_template/email_template_account.py
@@ -80,22 +80,27 @@ class email_template_account(osv.osv):
'name': fields.char('Description',
size=64, required=True,
readonly=True, select=True,
+ help="The description is used as the Sender name along with the provided From Email, \
+unless it is already specified in the From Email, e.g: John Doe ",
states={'draft':[('readonly', False)]}),
+ 'auto_delete': fields.boolean('Auto Delete', size=64, readonly=True,
+ help="Permanently delete emails after sending",
+ states={'draft':[('readonly', False)]}),
'user':fields.many2one('res.users',
'Related User', required=True,
readonly=True, states={'draft':[('readonly', False)]}),
'email_id': fields.char('From Email',
size=120, required=True,
readonly=True, states={'draft':[('readonly', False)]} ,
- help="eg: yourname@yourdomain.com "),
+ help="eg: 'john@doe.com' or 'John Doe '"),
'smtpserver': fields.char('Server',
size=120, required=True,
readonly=True, states={'draft':[('readonly', False)]},
- help="Enter name of outgoing server, eg:smtp.gmail.com "),
- 'smtpport': fields.integer('SMTP Port ',
+ help="Enter name of outgoing server, eg: smtp.yourdomain.com"),
+ 'smtpport': fields.integer('SMTP Port',
size=64, required=True,
readonly=True, states={'draft':[('readonly', False)]},
- help="Enter port number,eg:SMTP-587 "),
+ help="Enter port number, eg: 25 or 587"),
'smtpuname': fields.char('User Name',
size=120, required=False,
readonly=True, states={'draft':[('readonly', False)]},
@@ -133,7 +138,7 @@ class email_template_account(osv.osv):
('suspended', 'Suspended'),
('approved', 'Approved')
],
- 'Status', required=True, readonly=True),
+ 'State', required=True, readonly=True),
}
_defaults = {
@@ -189,25 +194,7 @@ class email_template_account(osv.osv):
'Error: You are not allowed to have more than 1 account.',
[])
]
-
- def on_change_emailid(self, cursor, user, ids, name=None, email_id=None, context=None):
- """
- Called when the email ID field changes.
-
- UI enhancement
- Writes the same email value to the smtpusername
- and incoming username
- """
- #TODO: Check and remove the write. Is it needed?
- self.write(cursor, user, ids, {'state':'draft'}, context=context)
- return {
- 'value': {
- 'state': 'draft',
- 'smtpuname':email_id,
- 'isuser':email_id
- }
- }
-
+
def get_outgoing_server(self, cursor, user, ids, context=None):
"""
Returns the Out Going Connection (SMTP) object
diff --git a/addons/email_template/email_template_account_view.xml b/addons/email_template/email_template_account_view.xml
index 544ad016136..0c30d7d478f 100644
--- a/addons/email_template/email_template_account_view.xml
+++ b/addons/email_template/email_template_account_view.xml
@@ -18,16 +18,17 @@
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
@@ -40,10 +41,10 @@
-
-
-
-
+
+
+
+
@@ -54,14 +55,15 @@
email_template.accounttree
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -71,16 +73,17 @@
email_template.accountsearch
-
-
-
-
-
+
+
+
+
+
+
+
-
@@ -97,11 +100,25 @@
-
+ id="base.menu_marketing_config_root" sequence="20" groups="base.group_system"/>
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/email_template/email_template_mailbox.py b/addons/email_template/email_template_mailbox.py
index 015d8ec297e..2eb0df13791 100644
--- a/addons/email_template/email_template_mailbox.py
+++ b/addons/email_template/email_template_mailbox.py
@@ -63,6 +63,7 @@ class email_template_mailbox(osv.osv):
def send_this_mail(self, cr, uid, ids=None, context=None):
result = True
+ attachment_pool = self.pool.get('ir.attachment')
for id in (ids or []):
try:
account_obj = self.pool.get('email_template.account')
@@ -70,7 +71,7 @@ class email_template_mailbox(osv.osv):
payload = {}
if values['attachments_ids']:
for attid in values['attachments_ids']:
- attachment = self.pool.get('ir.attachment').browse(cr, uid, attid, context)#,['datas_fname','datas'])
+ attachment = attachment_pool.browse(cr, uid, attid, context)#,['datas_fname','datas'])
payload[attachment.datas_fname] = attachment.datas
result = account_obj.send_mail(cr, uid,
[values['account_id'][0]],
@@ -84,8 +85,15 @@ class email_template_mailbox(osv.osv):
message_id=values['message_id'],
context=context)
if result == True:
- self.write(cr, uid, id, {'folder':'sent', 'state':'na', 'date_mail':time.strftime("%Y-%m-%d %H:%M:%S")}, context)
- self.historise(cr, uid, [id], "Email sent successfully", context)
+ account = account_obj.browse(cr, uid, values['account_id'][0], context=context)
+ if account.auto_delete:
+ self.write(cr, uid, id, {'folder': 'trash'}, context=context)
+ self.unlink(cr, uid, [id], context=context)
+ # Remove attachments for this mail
+ attachment_pool.unlink(cr, uid, values['attachments_ids'], context=context)
+ else:
+ self.write(cr, uid, id, {'folder':'sent', 'state':'na', 'date_mail':time.strftime("%Y-%m-%d %H:%M:%S")}, context)
+ self.historise(cr, uid, [id], "Email sent successfully", context)
else:
error = result['error_msg']
self.historise(cr, uid, [id], error, context)
@@ -100,7 +108,7 @@ class email_template_mailbox(osv.osv):
def historise(self, cr, uid, ids, message='', context=None):
for id in ids:
history = self.read(cr, uid, id, ['history'], context).get('history', '')
- self.write(cr, uid, id, {'history':history or '' + "\n" + time.strftime("%Y-%m-%d %H:%M:%S") + ": " + tools.ustr(message)}, context)
+ self.write(cr, uid, id, {'history': (history or '' )+ "\n" + time.strftime("%Y-%m-%d %H:%M:%S") + ": " + tools.ustr(message)}, context)
_columns = {
'email_from':fields.char(
@@ -171,8 +179,7 @@ class email_template_mailbox(osv.osv):
('na', 'Not Applicable'),
('sending', 'Sending'),
], 'Status', required=True),
- 'date_mail':fields.datetime(
- 'Rec/Sent Date'),
+ 'date_mail':fields.datetime('Rec/Sent Date', help="Date on which Email Sent or Received"),
'history':fields.text(
'History',
readonly=True,
@@ -184,6 +191,24 @@ class email_template_mailbox(osv.osv):
'folder': lambda * a: 'outbox',
}
+ def unlink(self, cr, uid, ids, context=None):
+ """
+ It just changes the folder of the item to "Trash", if it is no in Trash folder yet,
+ or completely deletes it if it is already in Trash.
+ """
+ if not context:
+ context = {}
+ to_update = []
+ to_remove = []
+ for mail in self.browse(cr, uid, ids, context=context):
+ if mail.folder == 'trash':
+ to_remove.append(mail.id)
+ else:
+ to_update.append(mail.id)
+ # Changes the folder to trash
+ self.write(cr, uid, to_update, {'folder': 'trash'}, context=context)
+ return super(email_template_mailbox, self).unlink(cr, uid, to_remove, context=context)
+
email_template_mailbox()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/email_template/email_template_mailbox_view.xml b/addons/email_template/email_template_mailbox_view.xml
index 018b1800ccc..38757ba7d68 100644
--- a/addons/email_template/email_template_mailbox_view.xml
+++ b/addons/email_template/email_template_mailbox_view.xml
@@ -7,7 +7,7 @@
email_template.mailboxform
-
@@ -64,12 +59,14 @@
email_template.mailboxtree
-
+
+
-
-
+
+
+
@@ -79,37 +76,54 @@
email_template.mailboxsearch
-
-
+
+
-
-
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
- Mailbox
+ Emailsemail_template.mailboxform
- form,tree
+ tree,form
- {'group_by': [], 'search_default_draft': 1, 'search_default_outbox': 1}
+ {'group_by': [], 'search_default_outbox': 1}
-
-
-
+
+
+
+
+
+
+
diff --git a/addons/email_template/email_template_scheduler_data.xml b/addons/email_template/email_template_scheduler_data.xml
index 30d69f99398..45a9be04ac7 100644
--- a/addons/email_template/email_template_scheduler_data.xml
+++ b/addons/email_template/email_template_scheduler_data.xml
@@ -1,12 +1,12 @@
-
+ Email Template scheduler1hours
- 12
+ -1
diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml
index 79867a5bff3..36e7a5f9037 100644
--- a/addons/email_template/email_template_view.xml
+++ b/addons/email_template/email_template_view.xml
@@ -1,7 +1,8 @@
-
+
+
email_template.preview.formemail_template.preview
@@ -67,25 +68,26 @@
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -107,27 +109,33 @@
+ type="action" colspan="4" target="new" icon="gtk-zoom-fit"/>
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -143,15 +151,17 @@
tree
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -162,14 +172,21 @@
search
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -183,9 +200,12 @@
-
+
+
diff --git a/addons/email_template/i18n/email_template.pot b/addons/email_template/i18n/email_template.pot
index 3a077c82d17..6d0d31cf430 100644
--- a/addons/email_template/i18n/email_template.pot
+++ b/addons/email_template/i18n/email_template.pot
@@ -335,11 +335,6 @@ msgstr ""
msgid "Send/Receive"
msgstr ""
-#. module: email_template
-#: model:ir.ui.menu,name:email_template.menu_email_template_mailbox_all_main2
-msgid "MailBox"
-msgstr ""
-
#. module: email_template
#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
msgid "Template Preview"
diff --git a/addons/email_template/i18n/en_US.po b/addons/email_template/i18n/en_US.po
index 00e682ea025..be4a81a7954 100644
--- a/addons/email_template/i18n/en_US.po
+++ b/addons/email_template/i18n/en_US.po
@@ -174,8 +174,8 @@ msgstr "Approve Account"
#. module: email_template
#: model:ir.ui.menu,name:email_template.menu_email_template_all
-msgid "E-MAIL Templates"
-msgstr "E-MAIL Templates"
+msgid "Email Templates"
+msgstr "Email Templates"
#. module: email_template
#: field:email_template.preview,rel_model_ref:0
@@ -221,8 +221,8 @@ msgstr "Download Full Mail"
#. module: email_template
#: help:email.template,def_to:0
-msgid "The default recipient of email.Placeholders can be used here."
-msgstr "The default recipient of email.Placeholders can be used here."
+msgid "The recipient of email. Placeholders can be used here. e.g. ${object.email_to}"
+msgstr "The recipient of email. Placeholders can be used here. e.g. ${object.email_to}"
#. module: email_template
#: view:email_template.mailbox:0
@@ -258,8 +258,8 @@ msgstr "Accounts"
#. module: email_template
#: field:email.template,track_campaign_item:0
-msgid "Track campaign items"
-msgstr "Track campaign items"
+msgid "Resource Tracking"
+msgstr "Resource Tracking"
#. module: email_template
#: view:email_template.preview:0
@@ -275,8 +275,8 @@ msgstr "Tip: Multiple emails are sent in the same language (the first one is pro
#: help:email.template,reply_to:0
#: help:email_template.preview,reply_to:0
#: help:email_template.send.wizard,reply_to:0
-msgid "The address recipients should reply to, if different from the From address. Placeholders can be used here."
-msgstr "The address recipients should reply to, if different from the From address. Placeholders can be used here."
+msgid "The address recipients should reply to, if different from the From address. Placeholders can be used here. e.g. ${object.email_reply_to}"
+msgstr "The address recipients should reply to, if different from the From address. Placeholders can be used here. e.g. ${object.email_reply_to}"
#. module: email_template
#: field:email_template.mailbox,subject:0
@@ -335,11 +335,6 @@ msgstr "Body(Html)"
msgid "Send/Receive"
msgstr "Send/Receive"
-#. module: email_template
-#: model:ir.ui.menu,name:email_template.menu_email_template_mailbox_all_main2
-msgid "MailBox"
-msgstr "MailBox"
-
#. module: email_template
#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
msgid "Template Preview"
@@ -762,8 +757,8 @@ msgstr "Save in Drafts"
#. module: email_template
#: help:email.template,def_subject:0
-msgid "The default subject of email. Placeholders can be used here."
-msgstr "The default subject of email. Placeholders can be used here."
+msgid "The subject of email. Placeholders can be used here."
+msgstr "The subject of email. Placeholders can be used here."
#. module: email_template
#: field:email_template.account,smtptls:0
@@ -772,8 +767,8 @@ msgstr "TLS"
#. module: email_template
#: view:email_template.send.wizard:0
-msgid "Add here all attachments of the current document you want to include in the e-mail."
-msgstr "Add here all attachments of the current document you want to include in the e-mail."
+msgid "Add here all attachments of the current document you want to include in the Email."
+msgstr "Add here all attachments of the current document you want to include in the Email."
#. module: email_template
#: model:ir.model,name:email_template.model_email_template_send_wizard
@@ -786,6 +781,8 @@ msgstr "This is the wizard for sending mail"
#: code:addons/email_template/email_template_mailbox.py:0
#: code:addons/email_template/wizard/email_template_send_wizard.py:0
#: model:ir.ui.menu,name:email_template.menu_email_template
+#: model:ir.ui.menu,name:email_template.menu_email_template_config_tools
+#: model:ir.ui.menu,name:email_template.menu_email_template_configuration
#, python-format
msgid "Email Template"
msgstr "Email Template"
@@ -1023,8 +1020,8 @@ msgstr "Password"
#: help:email.template,message_id:0
#: help:email_template.preview,message_id:0
#: help:email_template.send.wizard,message_id:0
-msgid "The Message-ID header value, if you need tospecify it, for example to automatically recognize the replies later. Placeholders can be used here."
-msgstr "The Message-ID header value, if you need tospecify it, for example to automatically recognize the replies later. Placeholders can be used here."
+msgid "Specify the Message-ID SMTP header to use in outgoing emails. Please note that this overrides the Resource tracking option! Placeholders can be used here."
+msgstr "Specify the Message-ID SMTP header to use in outgoing emails. Please note that this overrides the Resource tracking option! Placeholders can be used here."
#. module: email_template
#: model:ir.ui.menu,name:email_template.menu_email_template_configuration
@@ -1113,11 +1110,6 @@ msgstr "Corporate"
msgid "Enter name of outgoing server, eg:smtp.gmail.com "
msgstr "Enter name of outgoing server, eg:smtp.gmail.com "
-#. module: email_template
-#: model:ir.ui.menu,name:email_template.menu_email_template_company_mails
-msgid "Company Mails"
-msgstr "Company Mails"
-
#. module: email_template
#: view:email.template:0
msgid "Addresses"
@@ -1130,13 +1122,13 @@ msgstr "Emails will be sent from this approved account."
#. module: email_template
#: field:email.template,def_subject:0
-msgid "Default Subject"
-msgstr "Default Subject"
+msgid "Subject"
+msgstr "Subject"
#. module: email_template
#: help:email.template,def_bcc:0
-msgid "Blind Carbon Copy address(es), comma-separated. Placeholders can be used here."
-msgstr "Blind Carbon Copy address(es), comma-separated. Placeholders can be used here."
+msgid "Blind Carbon Copy address(es), comma-separated. Placeholders can be used here. e.g. ${object.email_bcc}"
+msgstr "Blind Carbon Copy address(es), comma-separated. Placeholders can be used here. e.g. ${object.email_bcc}"
#. module: email_template
#: code:addons/email_template/email_template_account.py:0
@@ -1167,8 +1159,8 @@ msgstr "email-template"
#. module: email_template
#: help:email.template,def_cc:0
-msgid "Carbon Copy address(es), comma-separated. Placeholders can be used here."
-msgstr "Carbon Copy address(es), comma-separated. Placeholders can be used here."
+msgid "Carbon Copy address(es), comma-separated. Placeholders can be used here. e.g. ${object.email_cc}"
+msgstr "Carbon Copy address(es), comma-separated. Placeholders can be used here. e.g. ${object.email_cc}"
#. module: email_template
#: selection:email_template.send.wizard,state:0
@@ -1182,8 +1174,8 @@ msgstr "Has Attachments"
#. module: email_template
#: help:email.template,track_campaign_item:0
-msgid "Enable this if you want the outgoing e-mails to include a tracking marker that makes it possible to identify the replies an link them back to the campaign item"
-msgstr "Enable this if you want the outgoing e-mails to include a tracking marker that makes it possible to identify the replies an link them back to the campaign item"
+msgid "Enable this is you wish to include a special tracking marker in outgoing emails so you can identify replies and link them back to the corresponding resource record. This is useful for CRM leads for example"
+msgstr "Enable this is you wish to include a special tracking marker in outgoing emails so you can identify replies and link them back to the corresponding resource record. This is useful for CRM leads for example"
#. module: email_template
#: code:addons/email_template/email_template.py:0
diff --git a/addons/email_template/i18n/fr.po b/addons/email_template/i18n/fr.po
index 3a077c82d17..111a7ce7b10 100644
--- a/addons/email_template/i18n/fr.po
+++ b/addons/email_template/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 05:34:08+0000\n"
-"PO-Revision-Date: 2010-08-20 05:34:08+0000\n"
+"POT-Creation-Date: 2010-08-20 05:34+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:58+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: email_template
#: view:email_template.send.wizard:0
@@ -60,7 +61,10 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_account.py:0
#, python-format
-msgid "Mail from Account %s failed on login. Probable Reason:Could not login to server\nError: %s"
+msgid ""
+"Mail from Account %s failed on login. Probable Reason:Could not login to "
+"server\n"
+"Error: %s"
msgstr ""
#. module: email_template
@@ -79,7 +83,9 @@ msgstr ""
#. module: email_template
#: help:email_template.account,company:0
-msgid "Select if this mail account does not belong to specific user but to the organization as a whole. eg: info@companydomain.com"
+msgid ""
+"Select if this mail account does not belong to specific user but to the "
+"organization as a whole. eg: info@companydomain.com"
msgstr ""
#. module: email_template
@@ -130,7 +136,8 @@ msgstr ""
#. module: email_template
#: help:email.template,file_name:0
-msgid "File name pattern can be specified with placeholders.eg. 2009_SO003.pdf"
+msgid ""
+"File name pattern can be specified with placeholders.eg. 2009_SO003.pdf"
msgstr ""
#. module: email_template
@@ -146,7 +153,9 @@ msgstr ""
#. module: email_template
#: help:email.template,lang:0
-msgid "The default language for the email. Placeholders can be used here. eg. ${object.partner_id.lang}"
+msgid ""
+"The default language for the email. Placeholders can be used here. eg. "
+"${object.partner_id.lang}"
msgstr ""
#. module: email_template
@@ -268,14 +277,18 @@ msgstr ""
#. module: email_template
#: view:email_template.send.wizard:0
-msgid "Tip: Multiple emails are sent in the same language (the first one is proposed). We suggest you send emails in groups according to language."
+msgid ""
+"Tip: Multiple emails are sent in the same language (the first one is "
+"proposed). We suggest you send emails in groups according to language."
msgstr ""
#. module: email_template
#: help:email.template,reply_to:0
#: help:email_template.preview,reply_to:0
#: help:email_template.send.wizard,reply_to:0
-msgid "The address recipients should reply to, if different from the From address. Placeholders can be used here."
+msgid ""
+"The address recipients should reply to, if different from the From address. "
+"Placeholders can be used here."
msgstr ""
#. module: email_template
@@ -335,11 +348,6 @@ msgstr ""
msgid "Send/Receive"
msgstr ""
-#. module: email_template
-#: model:ir.ui.menu,name:email_template.menu_email_template_mailbox_all_main2
-msgid "MailBox"
-msgstr ""
-
#. module: email_template
#: model:ir.actions.act_window,name:email_template.wizard_email_template_preview
msgid "Template Preview"
@@ -398,7 +406,9 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_mailbox.py:0
#, python-format
-msgid "Sending of Mail %s failed. Probable Reason:Could not login to server\nError: %s"
+msgid ""
+"Sending of Mail %s failed. Probable Reason:Could not login to server\n"
+"Error: %s"
msgstr ""
#. module: email_template
@@ -413,7 +423,9 @@ msgstr ""
#. module: email_template
#: help:email.template,attachment_ids:0
-msgid "You may attach existing files to this template, so they will be added in all emails created from this template"
+msgid ""
+"You may attach existing files to this template, so they will be added in all "
+"emails created from this template"
msgstr ""
#. module: email_template
@@ -435,8 +447,10 @@ msgstr ""
#. module: email_template
#: help:email.template,model_object_field:0
-msgid "Select the field from the model you want to use.\n"
-"If it is a relationship field you will be able to choose the nested values in the box below\n"
+msgid ""
+"Select the field from the model you want to use.\n"
+"If it is a relationship field you will be able to choose the nested values "
+"in the box below\n"
"(Note:If there are no values make sure you have selected the correct model)"
msgstr ""
@@ -488,17 +502,22 @@ msgstr ""
#. module: email_template
#: help:email.template,copyvalue:0
-msgid "Copy and paste the value in the location you want to use a system value."
+msgid ""
+"Copy and paste the value in the location you want to use a system value."
msgstr ""
#. module: email_template
#: help:email.template,sub_model_object_field:0
-msgid "When you choose relationship fields this field will specify the sub value you can use."
+msgid ""
+"When you choose relationship fields this field will specify the sub value "
+"you can use."
msgstr ""
#. module: email_template
#: help:email.template,sub_object:0
-msgid "When a relation field is used this field will show you the type of field you have selected"
+msgid ""
+"When a relation field is used this field will show you the type of field you "
+"have selected"
msgstr ""
#. module: email_template
@@ -595,8 +614,8 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_account.py:0
#, python-format
-msgid "Datetime Extraction failed.Date:%s \\n"
-" \tError:%s"
+msgid ""
+"Datetime Extraction failed.Date:%s \\n \tError:%s"
msgstr ""
#. module: email_template
@@ -642,7 +661,9 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_account.py:0
#, python-format
-msgid "Mail from Account %s failed. Probable Reason:Server Send Error\nDescription: %s"
+msgid ""
+"Mail from Account %s failed. Probable Reason:Server Send Error\n"
+"Description: %s"
msgstr ""
#. module: email_template
@@ -680,7 +701,9 @@ msgstr ""
#. module: email_template
#: view:email_template.send.wizard:0
-msgid "After clicking send all mails, mails will be sent to outbox and cleared in next Send/Recieve"
+msgid ""
+"After clicking send all mails, mails will be sent to outbox and cleared in "
+"next Send/Recieve"
msgstr ""
#. module: email_template
@@ -743,7 +766,8 @@ msgstr ""
#. module: email_template
#: help:email.template,allowed_groups:0
-msgid "Only users from these groups will be allowed to send mails from this Template"
+msgid ""
+"Only users from these groups will be allowed to send mails from this Template"
msgstr ""
#. module: email_template
@@ -769,7 +793,9 @@ msgstr ""
#. module: email_template
#: view:email_template.send.wizard:0
-msgid "Add here all attachments of the current document you want to include in the e-mail."
+msgid ""
+"Add here all attachments of the current document you want to include in the "
+"e-mail."
msgstr ""
#. module: email_template
@@ -795,7 +821,8 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_mailbox.py:0
#, python-format
-msgid "Error sending mail: %s\" % str(e)))\n"
+msgid ""
+"Error sending mail: %s\" % str(e)))\n"
" \n"
" def send_all_mail(self, cr, uid, ids=None, context=None):\n"
" if ids is None:\n"
@@ -891,7 +918,8 @@ msgstr ""
#. module: email_template
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: email_template
@@ -903,7 +931,10 @@ msgstr ""
#. module: email_template
#: code:addons/email_template/wizard/email_template_send_wizard.py:0
#, python-format
-msgid "No personal email accounts are configured for you. \nEither ask admin to enforce an account for this template or get yourself a personal email account."
+msgid ""
+"No personal email accounts are configured for you. \n"
+"Either ask admin to enforce an account for this template or get yourself a "
+"personal email account."
msgstr ""
#. module: email_template
@@ -945,7 +976,9 @@ msgstr ""
#. module: email_template
#: help:email_template.account,smtpuname:0
-msgid "Specify the username if your SMTP server requires authentication, otherwise leave it empty."
+msgid ""
+"Specify the username if your SMTP server requires authentication, otherwise "
+"leave it empty."
msgstr ""
#. module: email_template
@@ -1013,7 +1046,9 @@ msgstr ""
#: help:email.template,message_id:0
#: help:email_template.preview,message_id:0
#: help:email_template.send.wizard,message_id:0
-msgid "The Message-ID header value, if you need tospecify it, for example to automatically recognize the replies later. Placeholders can be used here."
+msgid ""
+"The Message-ID header value, if you need tospecify it, for example to "
+"automatically recognize the replies later. Placeholders can be used here."
msgstr ""
#. module: email_template
@@ -1058,8 +1093,10 @@ msgstr ""
#. module: email_template
#: model:ir.module.module,description:email_template.module_meta_information
-msgid "\n"
-" Email Template is extraction of Power Email basically just to send the emails.\n"
+msgid ""
+"\n"
+" Email Template is extraction of Power Email basically just to send the "
+"emails.\n"
" "
msgstr ""
@@ -1070,7 +1107,9 @@ msgstr ""
#. module: email_template
#: help:email.template,table_html:0
-msgid "Copy this html code to your HTML message body for displaying the info in your mail."
+msgid ""
+"Copy this html code to your HTML message body for displaying the info in "
+"your mail."
msgstr ""
#. module: email_template
@@ -1101,11 +1140,6 @@ msgstr ""
msgid "Enter name of outgoing server, eg:smtp.gmail.com "
msgstr ""
-#. module: email_template
-#: model:ir.ui.menu,name:email_template.menu_email_template_company_mails
-msgid "Company Mails"
-msgstr ""
-
#. module: email_template
#: view:email.template:0
msgid "Addresses"
@@ -1123,13 +1157,17 @@ msgstr ""
#. module: email_template
#: help:email.template,def_bcc:0
-msgid "Blind Carbon Copy address(es), comma-separated. Placeholders can be used here."
+msgid ""
+"Blind Carbon Copy address(es), comma-separated. Placeholders can be used "
+"here."
msgstr ""
#. module: email_template
#: code:addons/email_template/email_template_account.py:0
#, python-format
-msgid "Mail from Account %s failed. Probable Reason:MIME Error\nDescription: %s"
+msgid ""
+"Mail from Account %s failed. Probable Reason:MIME Error\n"
+"Description: %s"
msgstr ""
#. module: email_template
@@ -1155,7 +1193,8 @@ msgstr ""
#. module: email_template
#: help:email.template,def_cc:0
-msgid "Carbon Copy address(es), comma-separated. Placeholders can be used here."
+msgid ""
+"Carbon Copy address(es), comma-separated. Placeholders can be used here."
msgstr ""
#. module: email_template
@@ -1170,7 +1209,10 @@ msgstr ""
#. module: email_template
#: help:email.template,track_campaign_item:0
-msgid "Enable this if you want the outgoing e-mails to include a tracking marker that makes it possible to identify the replies an link them back to the campaign item"
+msgid ""
+"Enable this if you want the outgoing e-mails to include a tracking marker "
+"that makes it possible to identify the replies an link them back to the "
+"campaign item"
msgstr ""
#. module: email_template
@@ -1179,4 +1221,3 @@ msgstr ""
#, python-format
msgid "No Description"
msgstr ""
-
diff --git a/addons/email_template/wizard/email_template_send_wizard_view.xml b/addons/email_template/wizard/email_template_send_wizard_view.xml
index 80cce83dbfd..a5ad037aee6 100755
--- a/addons/email_template/wizard/email_template_send_wizard_view.xml
+++ b/addons/email_template/wizard/email_template_send_wizard_view.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/addons/event/i18n/ca.po b/addons/event/i18n/ca.po
index 14388065ff5..ae971d661a6 100644
--- a/addons/event/i18n/ca.po
+++ b/addons/event/i18n/ca.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-07 09:46+0000\n"
+"PO-Revision-Date: 2010-08-31 08:15+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-08-12 03:46+0000\n"
+"X-Launchpad-Export-Date: 2010-09-01 03:57+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: event
@@ -31,7 +31,7 @@ msgstr "Registres mínims"
#. module: event
#: constraint:ir.actions.act_window:0
msgid "Invalid model name in the action definition."
-msgstr "Nom del model no vàlid a la definició de l'acció."
+msgstr "Nom de model no vàlid en la definició de l'acció."
#. module: event
#: field:event.event,mail_registr:0
diff --git a/addons/event/i18n/de.po b/addons/event/i18n/de.po
index dd7bc3c3987..904e9421267 100644
--- a/addons/event/i18n/de.po
+++ b/addons/event/i18n/de.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev_rc3\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 06:13+0000\n"
+"PO-Revision-Date: 2010-08-29 10:22+0000\n"
"Last-Translator: Ferdinand-chricar \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-08-12 03:46+0000\n"
+"X-Launchpad-Export-Date: 2010-08-30 03:56+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: event
@@ -264,7 +264,9 @@ msgstr "Bestätige trotzdem"
#. module: event
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
-msgstr "Fehler: UOS sollte in einer anderen Kategorie sein als UOM"
+msgstr ""
+"Fehler: Die Verkaufseinheit sollte in einer anderen Kategorie sein als die "
+"Mengeneinheit"
#. module: event
#: view:event.event:0
@@ -344,8 +346,8 @@ msgstr "Veranstaltungen nach Anmeldungen"
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
-"Fehler: Die Standard UOM sowie die Beschaffungs UOM muss in derselben "
-"Kategorie sein."
+"Fehler: Die Standard Mengeneinheit sowie die Beschaffungs Mengeneinheit muss "
+"in derselben Kategorie sein."
#. module: event
#: wizard_field:event.reg_make_invoice,init,inv_created:0
diff --git a/addons/fetchmail/i18n/fr.po b/addons/fetchmail/i18n/fr.po
index f869a4a25e3..b035c6f83f9 100644
--- a/addons/fetchmail/i18n/fr.po
+++ b/addons/fetchmail/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 13:33:09+0000\n"
-"PO-Revision-Date: 2010-08-20 13:33:09+0000\n"
+"POT-Creation-Date: 2010-08-20 13:33+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:58+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: fetchmail
#: selection:email.server,state:0
@@ -22,7 +23,8 @@ msgstr ""
#. module: fetchmail
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: fetchmail
@@ -237,7 +239,8 @@ msgstr ""
#. module: fetchmail
#: model:ir.module.module,description:fetchmail.module_meta_information
-msgid "Fetchmail: \n"
+msgid ""
+"Fetchmail: \n"
" * Fetch email from Pop / IMAP server\n"
" * Support SSL\n"
" * Integrated with all Modules\n"
@@ -260,4 +263,3 @@ msgstr ""
#: view:email.server:0
msgid "Fetch Emails"
msgstr ""
-
diff --git a/addons/hr/board_hr_view.xml b/addons/hr/board_hr_view.xml
index 6408b11c799..58204352ac4 100644
--- a/addons/hr/board_hr_view.xml
+++ b/addons/hr/board_hr_view.xml
@@ -32,14 +32,6 @@
menu
-
-
-
diff --git a/addons/hr/hr_installer.xml b/addons/hr/hr_installer.xml
index a81954bc51b..6ae8890a11f 100644
--- a/addons/hr/hr_installer.xml
+++ b/addons/hr/hr_installer.xml
@@ -19,7 +19,7 @@
- The base Human Resources addon will help you manage your employee roster, but you can enhance it even further by installing a few HR-related applications.
+ You can enhance the base HR addon by installing few HR-related applications.
@@ -29,8 +29,8 @@
-
-
+
+ Configure
@@ -54,17 +54,5 @@
3
-
- ir.actions.todo
- hr_installer_action_replace
- tree
-
-
-
-
-
-
-
-
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml
index 659ddfa36e9..250f47b2055 100644
--- a/addons/hr/hr_view.xml
+++ b/addons/hr/hr_view.xml
@@ -102,7 +102,7 @@
-
+
@@ -189,7 +189,7 @@
+ parent="hr.menu_view_employee_category_configuration_form" sequence="3" groups="base.group_extended"/>
Concessions, brevets, licences,..., droits et valeurs similaires
[[bavar4]]
[[-bavar4b]]
[[bavar4+bavar4b]]
Fonds commercial
[[bavar5]]
[[-bavar5b]]
[[bavar5+bavar5b]]
Autres
[[bavar6]]
[[-bavar6b]]
[[bavar6+bavar6b]]
Immobilisations incorporelles en cours
[[bavar7]]
[[-bavar7b]]
[[bavar7+bavar7b]]
Avances et acomptes
[[bavar8]]
[[bavar8]]
IMMOBILISATIONS CORPORELLES
Terrains
[[bavar9]]
[[-bavar9b]]
[[bavar9+bavar9b]]
Constructions
[[bavar10]]
[[-bavar10b]]
[[bavar10+bavar10b]]
Installations techniques,matériel et outillage
[[bavar11]]
[[-bavar11b]]
[[bavar11+bavar11b]]
Autres
[[bavar12]]
[[-bavar12b]]
[[bavar12+bavar12b]]
Immobilisations corporelles en cours
[[bavar13]]
[[-bavar13b]]
[[bavar13+bavar13b]]
Avances et acomptes
[[bavar14]]
[[bavar14]]
IMMOBILISATIONS FINANCIÉRES
Participations
[[bavar15]]
[[-bavar15b]]
[[bavar15+bavar15b]]
Créances rattachées à des participations
[[bavar16]]
[[-bavar16b]]
[[bavar16+bavar16b]]
Titres immobilisés de l'activité de portefeuille
[[bavar17]]
[[-bavar17b]]
[[bavar17+bavar17b]]
Autres titres immobilisés
[[bavar18]]
[[-bavar18b]]
[[bavar18+bavar18b]]
Prêts
[[bavar19]]
[[-bavar19b]]
[[bavar19+bavar19b]]
Autres
[[bavar20]]
[[-bavar20b]]
[[bavar20+bavar20b]]
TOTAL I
[[at1a]]
[[-at1b]]
[[at1]]
ACTIF CIRCULANT
STOCK EN COURS
Matières premières et autres approvisionnements
[[bavar21]]
[[-bavar21b]]
[[bavar21+bavar21b]]
En-cours de production [biens et services]
[[bavar22]]
[[-bavar22b]]
[[bavar22+bavar22b]]
Produits intermédiaires et finis
[[bavar23]]
[[-bavar23b]]
[[bavar23+bavar23b]]
Marchandises
[[bavar24]]
[[-bavar24b]]
[[bavar24+bavar24b]]
Avances et acomptes versés sur commandes
[[bavar25]]
[[bavar25]]
CRÉANCES
Créances clients et comptes rattachés
[[bavar26]]
[[-bavar26b]]
[[bavar26+bavar26b]]
Autres
[[bavar27]]
[[-bavar27b]]
[[bavar27+bavar27b]]
Capital souscrit - appelé , non versé
[[bavar28]]
[[bavar28]]
VALEURS MOBILIÈRES DE PLACEMENT
Actions propres
[[bavar29]]
[[-bavar29b]]
[[bavar29+bavar29b]]
Autres titres
[[bavar30]]
[[-bavar30b]]
[[bavar30+bavar30b]]
Instruments de trésorerie
[[bavar31]]
[[bavar31]]
Disponibilités
[[bavar32]]
[[bavar32]]
Charges constatés d'avance
[[bavar33]]
[[bavar33]]
TOTAL II
[[at2a]]
[[-at2b]]
[[at2]]
Charges à répartir sur plusieurs exercices ( III )
[[bavar34]]
[[bavar34]]
Primes de remboursement des emprunts ( IV )
[[bavar35]]
[[bavar35]]
Écarts de conversion actif ( V )
[[bavar36]]
[[bavar36]]
TOTAL ACTIF ( I + II + III + IV + V )
[[at1a+at2a]]
[[-at1b-at2b]]
[[actif]]
PASSIF
CAPITAUX PROPRES
Capital [dont versé...]
[[bpvar1]]
Primes d'émission, de fusion, d'apport
[[bpvar2]]
Écarts de réévaluation
[[bpvar3]]
Écart d'équivalence
[[bpvar4]]
RÉSERVES
Réserve légale
[[bpvar5]]
Réserves statutaires ou contractuelles
[[bpvar6]]
Réserves réglementées
[[bpvar7]]
Autres réserves
[[bpvar8]]
Report à nouveau
[[bpvar9]]
RÉSULTAT DE L'EXERCICE [bénéfice ou perte]
[[bpvar10]]
Subventions d'investissement
[[bpvar11]]
Provisions réglementées
[[bpvar12]]
TOTAL I
[[pt1]]
PROVISIONS
Provisions pour risques
[[bpvar13]]
Provisions pour charges
[[bpvar14]]
TOTAL II
[[pt2]]
DETTES
Emprunts obligataires convertibles
[[bpvar15]]
Autres emprunts obligataires
[[bpvar16]]
Emprunts et dettes auprès des établissements de crédit
[[bpvar17]]
Emprunts et dettes financières diverses
[[bpvar18]]
Avances et acomptes reçus sur commandes en cours
[[bpvar19]]
Dettes fournisseurs et comptes rattachés
[[bpvar20]]
Dettes fiscales et sociales
[[bpvar21]]
Dettes sur immobilisations et comptes rattachés
[[bpvar22]]
Autres dettes
[[bpvar23]]
Instruments de trésorerie
[[bpvar24]]
Produits constatés d'avance
[[bpvar25]]
TOTAL III
[[pt3]]
Écarts de conversion passif ( IV )
[[bpvar26]]
TOTAL GÉNÉRAL (I + II + III + IV)
[[passif]]
ACTIF - PASSIF
[[round(actif-passif,2)]]
[[ abs(bpcheck)<0.0001 and removeParentNode('para') ]] 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 vous sur votre structure juridique et son fonctionnement comptable.
+[[ _load('bilan',data['form'])]][[ _set_variable('at1a',bavar1+bavar2+bavar3+bavar4+bavar5+bavar6+bavar7+bavar8+bavar9+bavar10+bavar11+bavar12+bavar13+bavar14+bavar15+bavar16+bavar17+bavar18+bavar19+bavar20)]][[ _set_variable('at1b', bavar2b+bavar3b+bavar4b+bavar5b+bavar6b+bavar7b+bavar9b+bavar10b+bavar11b+bavar12b+bavar13b+bavar15b+ bavar16b+bavar17b+bavar18b+bavar19b+bavar20b)]][[ _set_variable('at1', at1a+at1b)]][[ _set_variable('at2a', bavar21+bavar22+bavar23+bavar24+bavar25+bavar26+bavar27+bavar28+bavar29+bavar30+bavar31+bavar32+bavar33)]][[ _set_variable('at2b', bavar21b+bavar22b+bavar23b+bavar24b+bavar26b+bavar27b+bavar29b+bavar30b)]][[ _set_variable('at2', at2a+at2b)]][[ _set_variable('actif', at1+at2+bavar34+bavar35+bavar36)]][[ _set_variable('pt1', bpvar1+bpvar2+bpvar3+bpvar4+bpvar5+bpvar6+bpvar7+bpvar8+bpvar9+bpvar10+bpvar11+bpvar12)]][[ _set_variable('pt2', bpvar13+bpvar14)]][[ _set_variable('pt3', bpvar15+bpvar16+bpvar17+bpvar18+bpvar19+bpvar20+bpvar21+bpvar22+bpvar23+bpvar24+bpvar25)]][[ _set_variable('passif', pt1+pt2+pt3+bpvar26)]]
Concessions, brevets, licences,..., droits et valeurs similaires
[[bavar4]]
[[-bavar4b]]
[[bavar4+bavar4b]]
Fonds commercial
[[bavar5]]
[[-bavar5b]]
[[bavar5+bavar5b]]
Autres
[[bavar6]]
[[-bavar6b]]
[[bavar6+bavar6b]]
Immobilisations incorporelles en cours
[[bavar7]]
[[-bavar7b]]
[[bavar7+bavar7b]]
Avances et acomptes
[[bavar8]]
[[bavar8]]
IMMOBILISATIONS CORPORELLES
Terrains
[[bavar9]]
[[-bavar9b]]
[[bavar9+bavar9b]]
Constructions
[[bavar10]]
[[-bavar10b]]
[[bavar10+bavar10b]]
Installations techniques,matériel et outillage
[[bavar11]]
[[-bavar11b]]
[[bavar11+bavar11b]]
Autres
[[bavar12]]
[[-bavar12b]]
[[bavar12+bavar12b]]
Immobilisations corporelles en cours
[[bavar13]]
[[-bavar13b]]
[[bavar13+bavar13b]]
Avances et acomptes
[[bavar14]]
[[bavar14]]
IMMOBILISATIONS FINANCIÉRES
Participations
[[bavar15]]
[[-bavar15b]]
[[bavar15+bavar15b]]
Créances rattachées à des participations
[[bavar16]]
[[-bavar16b]]
[[bavar16+bavar16b]]
Titres immobilisés de l'activité de portefeuille
[[bavar17]]
[[-bavar17b]]
[[bavar17+bavar17b]]
Autres titres immobilisés
[[bavar18]]
[[-bavar18b]]
[[bavar18+bavar18b]]
Prêts
[[bavar19]]
[[-bavar19b]]
[[bavar19+bavar19b]]
Autres
[[bavar20]]
[[-bavar20b]]
[[bavar20+bavar20b]]
TOTAL I
[[at1a]]
[[-at1b]]
[[at1]]
ACTIF CIRCULANT
STOCK EN COURS
Matières premières et autres approvisionnements
[[bavar21]]
[[-bavar21b]]
[[bavar21+bavar21b]]
En-cours de production [biens et services]
[[bavar22]]
[[-bavar22b]]
[[bavar22+bavar22b]]
Produits intermédiaires et finis
[[bavar23]]
[[-bavar23b]]
[[bavar23+bavar23b]]
Marchandises
[[bavar24]]
[[-bavar24b]]
[[bavar24+bavar24b]]
Avances et acomptes versés sur commandes
[[bavar25]]
[[bavar25]]
CRÉANCES
Créances clients et comptes rattachés
[[bavar26]]
[[-bavar26b]]
[[bavar26+bavar26b]]
Autres
[[bavar27]]
[[-bavar27b]]
[[bavar27+bavar27b]]
Capital souscrit - appelé , non versé
[[bavar28]]
[[bavar28]]
VALEURS MOBILIÈRES DE PLACEMENT
Actions propres
[[bavar29]]
[[-bavar29b]]
[[bavar29+bavar29b]]
Autres titres
[[bavar30]]
[[-bavar30b]]
[[bavar30+bavar30b]]
Instruments de trésorerie
[[bavar31]]
[[bavar31]]
Disponibilités
[[bavar32]]
[[bavar32]]
Charges constatés d'avance
[[bavar33]]
[[bavar33]]
TOTAL II
[[at2a]]
[[-at2b]]
[[at2]]
Charges à répartir sur plusieurs exercices ( III )
[[bavar34]]
[[bavar34]]
Primes de remboursement des emprunts ( IV )
[[bavar35]]
[[bavar35]]
Écarts de conversion actif ( V )
[[bavar36]]
[[bavar36]]
TOTAL ACTIF ( I + II + III + IV + V )
[[at1a+at2a]]
[[-at1b-at2b]]
[[actif]]
PASSIF
CAPITAUX PROPRES
Capital [dont versé...]
[[bpvar1]]
Primes d'émission, de fusion, d'apport
[[bpvar2]]
Écarts de réévaluation
[[bpvar3]]
Écart d'équivalence
[[bpvar4]]
RÉSERVES
Réserve légale
[[bpvar5]]
Réserves statutaires ou contractuelles
[[bpvar6]]
Réserves réglementées
[[bpvar7]]
Autres réserves
[[bpvar8]]
Report à nouveau
[[bpvar9]]
RÉSULTAT DE L'EXERCICE [bénéfice ou perte]
[[bpvar10]]
Subventions d'investissement
[[bpvar11]]
Provisions réglementées
[[bpvar12]]
TOTAL I
[[pt1]]
PROVISIONS
Provisions pour risques
[[bpvar13]]
Provisions pour charges
[[bpvar14]]
TOTAL II
[[pt2]]
DETTES
Emprunts obligataires convertibles
[[bpvar15]]
Autres emprunts obligataires
[[bpvar16]]
Emprunts et dettes auprès des établissements de crédit
[[bpvar17]]
Emprunts et dettes financières diverses
[[bpvar18]]
Avances et acomptes reçus sur commandes en cours
[[bpvar19]]
Dettes fournisseurs et comptes rattachés
[[bpvar20]]
Dettes fiscales et sociales
[[bpvar21]]
Dettes sur immobilisations et comptes rattachés
[[bpvar22]]
Autres dettes
[[bpvar23]]
Instruments de trésorerie
[[bpvar24]]
Produits constatés d'avance
[[bpvar25]]
TOTAL III
[[pt3]]
Écarts de conversion passif ( IV )
[[bpvar26]]
TOTAL GÉNÉRAL (I + II + III + IV)
[[passif]]
ACTIF - PASSIF
[[round(actif-passif,2)]]
[[ abs(bpcheck)<0.0001 and removeParentNode('para') ]] 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 vous sur votre structure juridique et son fonctionnement comptable.
diff --git a/addons/l10n_fr/report/compute_resultant_report.rml b/addons/l10n_fr/report/compute_resultant_report.rml
index 9d3693f0b52..de59b0201ee 100644
--- a/addons/l10n_fr/report/compute_resultant_report.rml
+++ b/addons/l10n_fr/report/compute_resultant_report.rml
@@ -1,3 +1,3 @@
-[[ _load('cdr',data['form'])]][[ _set_variable('ct1', cdrc1+cdrc2+cdrc3+cdrc4+cdrc5+cdrc6+cdrc7+cdrc8+cdrc9+cdrc10+cdrc11+cdrc12+cdrc13+cdrc14+cdrc15)]][[ _set_variable('ct3', cdrc17+cdrc18+cdrc19+cdrc20)]][[ _set_variable('ct4', cdrc21+cdrc22+cdrc23)]][[ _set_variable('charges', ct1+cdrc16+ct3+ct4+cdrc24+cdrc25)]][[ _set_variable('pta', cdrp1+cdrp2)]][[ _set_variable('ptb', cdrp3+cdrp4+cdrp5+cdrp6+cdrp7)]][[ _set_variable('pt1', pta+ptb)]][[ _set_variable('pt3', cdrp9+cdrp10+cdrp11+cdrp12+cdrp13+cdrp14)]][[ _set_variable('pt4', cdrp15+cdrp16+cdrp17)]][[ _set_variable('produits', pt1+cdrp8+pt3+pt4)]]
[[ company.name ]]période du [[ time.strftime('%d-%m-%Y',time.strptime(date_start,'%Y-%m-%d'))]] au [[ time.strftime('%d-%m-%Y',time.strptime(date_stop,'%Y-%m-%d'))]]
Compte de résultat
Imprimé le : [[ time.strftime('%d-%m-%Y') ]]
Tenue de Compte : [[ company.currency_id.name ]]
CHARGES ( hors taxes )
CHARGES D'EXPLOITATION
Achat de marchandises
[[cdrc1]]
Variation des stocks
[[cdrc2]]
Achats de matières premières et autres approvisionnements
[[cdrc3]]
Variation des stocks
[[cdrc4]]
Autres achats et charges externes
[[cdrc5]]
Redevances de crédit-bail mobilier
[[cdrc6]]
Redevances de crédit-bail immobilier
[[cdrc7]]
Impôts, taxes et versements assimilés
[[cdrc8]]
Salaires et traitements
[[cdrc9]]
Charges sociales
[[cdrc10]]
Dotation aux amortissements et aux dépréciations
Sur immobilisations : dotations aux amortissements
[[cdrc11]]
Sur immobilisations : dotations aux dépréciations
[[cdrc12]]
Sur actif circulant : dotations aux dépréciations
[[cdrc13]]
Dotations aux provisions
[[cdrc14]]
Autres charges
[[cdrc15]]
TOTAL I
[[ct1]]
Quotes-parts de résultat sur opérations faites en commun ( II )
[[cdrc16]]
CHARGES FINANCIÈRES
Dotations aux amortissements, aux dépréciations et aux provisions
[[cdrc17]]
Intérêts et charges assimilées
[[cdrc18]]
Différences négatives de change
[[cdrc19]]
Charges nettes sur cessions de valeurs mobilières de placement
[[cdrc20]]
TOTAL III
[[ct3]]
CHARGES EXCEPTIONNELLES
Sur opérations de gestion
[[cdrc21]]
Sur opérations en capital
[[cdrc22]]
Dotations aux amortissements, aux dépréciations et aux provisions
[[cdrc23]]
TOTAL IV
[[ct4]]
Participation des salariés aux résultats ( V )
[[cdrc24]]
Impôts sur les bénéfices ( VI )
[[cdrc25]]
TOTAL CHARGES ( I + II + III + IV+ V+ VI )
[[charges]]
PRODUITS (hors taxes)
PRODUITS D'EXPLOITATION
Vente de marchandises
[[cdrp1]]
Production vendue [biens et services]
[[cdrp2]]
Sous-total A - Montant net du chiffre d'affaires
[[pta]]
Production stockée
[[cdrp3]]
Production immobilisée
[[cdrp4]]
Subventions d'exploitation
[[cdrp5]]
Reprises sur provisions, dépréciations (et amortissements) et transferts de charges
[[cdrp6]]
Autres produits
[[cdrp7]]
Sous-total B
[[ptb]]
TOTAL I ( A + B )
[[pt1]]
Quotes-parts de résultat sur opérations faites en commun (II)
[[cdrp8]]
PRODUITS FINANCIERS
De participation
[[cdrp9]]
D'autres valeurs mobilières et créances de l'actif immobilisé
[[cdrp10]]
Autres intérêts et produits assimilés
[[cdrp11]]
Reprises sur provisions, dépréciations et transferts de charges
[[cdrp12]]
Différences positives de change
[[cdrp13]]
Produits nets sur cessions de valeurs mobilières de placement
[[cdrp14]]
TOTAL III
[[pt3]]
PRODUITS EXCEPTIONNELS
Sur opérations de gestion
[[cdrp15]]
Sur opérations en capital
[[cdrp16]]
Reprises sur provisions, dépréciations et transferts de charges
[[ company.name ]]période du [[ time.strftime('%d-%m-%Y',time.strptime(date_start,'%Y-%m-%d'))]] au [[ time.strftime('%d-%m-%Y',time.strptime(date_stop,'%Y-%m-%d'))]]
Compte de résultat
Imprimé le : [[ time.strftime('%d-%m-%Y') ]]
Tenue de Compte : [[ company.currency_id.name ]]
CHARGES ( hors taxes )
CHARGES D'EXPLOITATION
Achat de marchandises
[[cdrc1]]
Variation des stocks
[[cdrc2]]
Achats de matières premières et autres approvisionnements
[[cdrc3]]
Variation des stocks
[[cdrc4]]
Autres achats et charges externes
[[cdrc5]]
Redevances de crédit-bail mobilier
[[cdrc6]]
Redevances de crédit-bail immobilier
[[cdrc7]]
Impôts, taxes et versements assimilés
[[cdrc8]]
Salaires et traitements
[[cdrc9]]
Charges sociales
[[cdrc10]]
Dotation aux amortissements et aux dépréciations
Sur immobilisations : dotations aux amortissements
[[cdrc11]]
Sur immobilisations : dotations aux dépréciations
[[cdrc12]]
Sur actif circulant : dotations aux dépréciations
[[cdrc13]]
Dotations aux provisions
[[cdrc14]]
Autres charges
[[cdrc15]]
TOTAL I
[[ct1]]
Quotes-parts de résultat sur opérations faites en commun ( II )
[[cdrc16]]
CHARGES FINANCIÈRES
Dotations aux amortissements, aux dépréciations et aux provisions
[[cdrc17]]
Intérêts et charges assimilées
[[cdrc18]]
Différences négatives de change
[[cdrc19]]
Charges nettes sur cessions de valeurs mobilières de placement
[[cdrc20]]
TOTAL III
[[ct3]]
CHARGES EXCEPTIONNELLES
Sur opérations de gestion
[[cdrc21]]
Sur opérations en capital
[[cdrc22]]
Dotations aux amortissements, aux dépréciations et aux provisions
[[cdrc23]]
TOTAL IV
[[ct4]]
Participation des salariés aux résultats ( V )
[[cdrc24]]
Impôts sur les bénéfices ( VI )
[[cdrc25]]
TOTAL CHARGES ( I + II + III + IV+ V+ VI )
[[charges]]
PRODUITS (hors taxes)
PRODUITS D'EXPLOITATION
Vente de marchandises
[[cdrp1]]
Production vendue [biens et services]
[[cdrp2]]
Sous-total A - Montant net du chiffre d'affaires
[[pta]]
Production stockée
[[cdrp3]]
Production immobilisée
[[cdrp4]]
Subventions d'exploitation
[[cdrp5]]
Reprises sur provisions, dépréciations (et amortissements) et transferts de charges
[[cdrp6]]
Autres produits
[[cdrp7]]
Sous-total B
[[ptb]]
TOTAL I ( A + B )
[[pt1]]
Quotes-parts de résultat sur opérations faites en commun (II)
[[cdrp8]]
PRODUITS FINANCIERS
De participation
[[cdrp9]]
D'autres valeurs mobilières et créances de l'actif immobilisé
[[cdrp10]]
Autres intérêts et produits assimilés
[[cdrp11]]
Reprises sur provisions, dépréciations et transferts de charges
[[cdrp12]]
Différences positives de change
[[cdrp13]]
Produits nets sur cessions de valeurs mobilières de placement
[[cdrp14]]
TOTAL III
[[pt3]]
PRODUITS EXCEPTIONNELS
Sur opérations de gestion
[[cdrp15]]
Sur opérations en capital
[[cdrp16]]
Reprises sur provisions, dépréciations et transferts de charges
@@ -277,31 +275,47 @@
tree
-
-
-
-
+
+
+
+
+
+
+
+ Products
+ lunch.product
+ search
+
+
+
+
+
+
+
+
+
+
- Product
+ Productslunch.product
+ form
+ tree,form
+
+
-
-
-
@@ -315,6 +329,10 @@
tree
+
+
+
+
@@ -346,6 +364,19 @@
+
+
+
+
@@ -361,7 +392,7 @@
- Lunch amount
+ Cash Position by Userreport.lunch.amountformtree,form
diff --git a/addons/lunch/report/order.rml b/addons/lunch/report/order.rml
index a7bc1b32cdd..44773e22e96 100644
--- a/addons/lunch/report/order.rml
+++ b/addons/lunch/report/order.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/lunch/security/ir.model.access.csv b/addons/lunch/security/ir.model.access.csv
index e27fba4530f..b936b26a55e 100644
--- a/addons/lunch/security/ir.model.access.csv
+++ b/addons/lunch/security/ir.model.access.csv
@@ -2,14 +2,13 @@
"access_lunch_category","lunch.category","model_lunch_category","base.group_user",1,1,1,1
"access_lunch_product","lunch.product","model_lunch_product","base.group_user",1,1,1,1
"access_lunch_cashbox","lunch.cashbox","model_lunch_cashbox","base.group_user",1,1,1,1
-"access_lunch_cashmove","lunch.cashmove","model_lunch_cashmove","base.group_user",1,1,1,1
"access_lunch_order","lunch.order","model_lunch_order","base.group_user",1,1,1,1
"access_report_lunch_amount","report.lunch.amount","model_report_lunch_amount","base.group_user",1,1,1,1
"access_lunch_order_sale_salesman","lunch.order.sale","model_lunch_order","base.group_sale_salesman",1,1,1,1
"access_lunch_order_user","lunch.order user","model_lunch_order","base.group_tool_user",1,1,1,1
-"access_lunch_order_manager","lunch.order manager","model_lunch_order","base.group_tool_manager",1,0,0,0
+"access_lunch_order_manager","lunch.order manager","model_lunch_order","base.group_tool_manager",1,1,1,1
"access_lunch_cashmove_user","lunch.cashmove user","model_lunch_cashmove","base.group_tool_user",1,1,1,1
-"access_lunch_cashmove_manager","lunch.cashmove manager","model_lunch_cashmove","base.group_tool_manager",1,0,0,0
+"access_lunch_cashmove_manager","lunch.cashmove manager","model_lunch_cashmove","base.group_tool_manager",1,1,1,1
"access_report_lunch_amount_manager","report.lunch.amount manager","model_report_lunch_amount","base.group_tool_manager",1,1,1,1
"access_lunch_category_system","lunch.category system","model_lunch_category","base.group_system",1,1,1,1
"access_lunch_product_system","lunch.product system","model_lunch_product","base.group_system",1,1,1,1
diff --git a/addons/lunch/test/test_lunch.yml b/addons/lunch/test/test_lunch.yml
index 97ed41b2abc..6af4113f153 100644
--- a/addons/lunch/test/test_lunch.yml
+++ b/addons/lunch/test/test_lunch.yml
@@ -87,6 +87,30 @@
-
!assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- sum_remain == -5.50
+
+- |
+ I cancel the order "LU002"
+-
+ !record {model: lunch.order.cancel, id: lunch_order_cancel_0}:
+ {}
+- |
+ I click on "Yes" button of this wizard for cancel order.
+
+-
+ !python {model: lunch.order.cancel}: |
+ self.cancel(cr, uid, [ref('lunch_order_cancel_0')], {'active_ids': [ref('lunch_order_1')]})
+
+- |
+ I test that the Cash Moves record have been removed for the order LU002.
+-
+ !assert {model: lunch.order, id: lunch_order_1}:
+ - cashmove.id == False
+
+- |
+ I check that the Total on the "Employee Cashbox" is -2.75
+-
+ !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
+ - sum_remain == -2.75
- |
I reset the "Employee Cashbox" to zero using the "Set CashBox to Zero" wizard.
-
@@ -103,28 +127,4 @@
-
!assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- sum_remain == 0.00
-
-- |
- I cancel the order "LU002"
--
- !record {model: lunch.order.cancel, id: lunch_order_cancel_0}:
- {}
-- |
- I click on "Yes" button of this wizard for cancel order.
-
--
- !python {model: lunch.order.cancel}: |
- self.cancel(cr, uid, [ref('lunch_order_cancel_0')], {'active_ids': [ref('lunch_order_1')]})
-
-- |
- I test that the Cash Moves revord have been removed for the order LU002.
--
- !assert {model: lunch.order, id: lunch_order_1}:
- - cashmove.id == False
-
-- |
- I check that the Total on the "Employee Cashbox" is -2.75
--
- !assert {model: lunch.cashbox, id: lunch_cashbox_cashbox0}:
- - sum_remain == -2.75
-
\ No newline at end of file
+
diff --git a/addons/lunch/wizard/lunch_cashbox_clean.py b/addons/lunch/wizard/lunch_cashbox_clean.py
index 54ecaf24b6f..967d77676f1 100644
--- a/addons/lunch/wizard/lunch_cashbox_clean.py
+++ b/addons/lunch/wizard/lunch_cashbox_clean.py
@@ -35,10 +35,9 @@ class lunch_cashbox_clean(osv.osv_memory):
@param ids: List Lunch cashbox Clean’s IDs
@return:Dictionary {}.
"""
-
+ #TOFIX: use orm methods
data = context and context.get('active_ids', []) or []
cashmove_ref = self.pool.get('lunch.cashmove')
-
cr.execute("select user_cashmove, box,sum(amount) from lunch_cashmove \
where active = 't' and box IN %s group by user_cashmove, \
box" , (tuple(data),))
@@ -46,15 +45,16 @@ class lunch_cashbox_clean(osv.osv_memory):
cr.execute("update lunch_cashmove set active = 'f' where active= 't' \
and box IN %s" , (tuple(data),))
-
- for (user_id, box_id, amount) in res:
- cashmove_ref.create(cr, uid, {
- 'name': 'Summary for user' + str(user_id),
- 'amount': amount,
- 'user_cashmove': user_id,
- 'box': box_id,
- 'active': True,
- })
+ #TOCHECK: Why need to create duplicate entry after clean box ?
+
+ #for (user_id, box_id, amount) in res:
+ # cashmove_ref.create(cr, uid, {
+ # 'name': 'Summary for user' + str(user_id),
+ # 'amount': amount,
+ # 'user_cashmove': user_id,
+ # 'box': box_id,
+ # 'active': True,
+ # })
return {}
lunch_cashbox_clean()
diff --git a/addons/lunch/wizard/lunch_order_cancel_view.xml b/addons/lunch/wizard/lunch_order_cancel_view.xml
index 39fa1f87d62..d47cc6d8ee9 100644
--- a/addons/lunch/wizard/lunch_order_cancel_view.xml
+++ b/addons/lunch/wizard/lunch_order_cancel_view.xml
@@ -34,7 +34,7 @@
+ view_mode="form" target="new" view_type="form" groups="base.group_tool_manager"/>
diff --git a/addons/lunch/wizard/lunch_order_confirm_view.xml b/addons/lunch/wizard/lunch_order_confirm_view.xml
index aa59acae628..dabcd7d5e84 100644
--- a/addons/lunch/wizard/lunch_order_confirm_view.xml
+++ b/addons/lunch/wizard/lunch_order_confirm_view.xml
@@ -36,7 +36,7 @@
+ view_mode="form" target="new" view_type="form" groups="base.group_tool_manager"/>
diff --git a/addons/mail_gateway/mail_gateway.py b/addons/mail_gateway/mail_gateway.py
index 1a1b48e75ee..3a40aac2649 100644
--- a/addons/mail_gateway/mail_gateway.py
+++ b/addons/mail_gateway/mail_gateway.py
@@ -122,10 +122,14 @@ class mailgate_thread(osv.osv):
obj = self.pool.get('mailgate.message')
for case in cases:
+ partner_id = hasattr(case, 'partner_id') and (case.partner_id and case.partner_id.id or False) or False
+ if not partner_id and case._name == 'res.partner':
+ partner_id = case.id
data = {
'name': keyword,
'user_id': uid,
'model' : case._name,
+ 'partner_id': partner_id,
'res_id': case.id,
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'message_id': message_id,
@@ -153,7 +157,7 @@ class mailgate_thread(osv.osv):
case.user_id.address_id.email),
'email_cc': email_cc,
'email_bcc': email_bcc,
- 'partner_id': hasattr(case, 'partner_id') and (case.partner_id and case.partner_id.id or False) or False,
+ 'partner_id': partner_id,
'references': references,
'message_id': message_id,
'attachment_ids': [(6, 0, attachments)]
@@ -172,6 +176,14 @@ class mailgate_message(osv.osv):
'''
Mailgateway Message
'''
+ def truncate_data(self, cr, uid, data, context=None):
+ data_list = data and data.split('\n') or []
+ if len(data_list) > 3:
+ res = '\n\t'.join(data_list[:3]) + '...'
+ else:
+ res = '\n\t'.join(data_list)
+ return res
+
def _get_display_text(self, cr, uid, ids, name, arg, context=None):
if context is None:
context = {}
@@ -182,11 +194,14 @@ class mailgate_message(osv.osv):
if message.history:
msg_txt += (message.email_from or '/') + _(' wrote on ') + format_date_tz(message.date, tz) + ':\n\t'
if message.description:
- msg_txt += '\n\t'.join(message.description.split('\n')[:3]) + '...'
+ msg_txt += self.truncate_data(cr, uid, message.description, context=context)
else:
- msg_txt = (message.user_id.name or '/') + _(' on ') + format_date_tz(message.date, tz) + ':\n\t'
+ msg_txt = (message.user_id.name or '/') + _(' on ') + format_date_tz(message.date, tz) + ':\n\t'
if message.name == _('Opportunity'):
msg_txt += _("Converted to Opportunity")
+ elif message.name == _('Note'):
+ msg_txt = (message.user_id.name or '/') + _(' added note on ') + format_date_tz(message.date, tz) + ':\n\t'
+ msg_txt += self.truncate_data(cr, uid, message.description, context=context)
else:
msg_txt += _("Changed Status to: ") + message.name
result[message.id] = msg_txt
@@ -255,11 +270,16 @@ class mailgate_tool(osv.osv_memory):
msg_pool = self.pool.get('mailgate.message')
for res_id in res_ids:
+ case = self.pool.get(model).browse(cr, uid, res_id, context=context)
+ partner_id = hasattr(case, 'partner_id') and (case.partner_id and case.partner_id.id or False) or False
+ if not partner_id and model == 'res.partner':
+ partner_id = res_id
msg_data = {
'name': msg.get('subject', 'No subject'),
'date': msg.get('date'),
'description': msg.get('body', msg.get('from')),
'history': True,
+ 'partner_id': partner_id,
'res_model': model,
'email_cc': msg.get('cc'),
'email_from': msg.get('from'),
diff --git a/addons/mail_gateway/mail_gateway_view.xml b/addons/mail_gateway/mail_gateway_view.xml
index f30416ed8fe..203d9a942bf 100644
--- a/addons/mail_gateway/mail_gateway_view.xml
+++ b/addons/mail_gateway/mail_gateway_view.xml
@@ -76,9 +76,6 @@
form
-
-
-
@@ -117,7 +114,6 @@
tree
-
diff --git a/addons/marketing/i18n/ca.po b/addons/marketing/i18n/ca.po
new file mode 100644
index 00000000000..06a6c6b0422
--- /dev/null
+++ b/addons/marketing/i18n/ca.po
@@ -0,0 +1,118 @@
+# Catalan 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: 2010-08-20 07:04+0000\n"
+"PO-Revision-Date: 2010-08-30 11:00+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Catalan \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "XML no vàlid per a l'estructura de la vista!"
+
+#. module: marketing
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"El nom de l'objecte ha de començar per x_ i no contenir cap caràcter "
+"especial!"
+
+#. module: marketing
+#: field:marketing.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: marketing
+#: view:marketing.installer:0
+msgid "title"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,email_template:0
+msgid "Automated E-Mails"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign:0
+msgid ""
+"Helps you to manage marketing campaigns and automate actions and "
+"communication steps."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign_mailchimp:0
+msgid ""
+"This modules integrate mailchimp.com's service with OpenERP to automate mass "
+"mailings."
+msgstr ""
+
+#. module: marketing
+#: model:ir.module.module,description:marketing.module_meta_information
+msgid "Menu for Marketing"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,email_template:0
+msgid ""
+"Helps you to design templates of emails and integrate them in your different "
+"processes."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,crm_profiling:0
+msgid ""
+"Helps you to perform segmentation within partners and design questionaires."
+msgstr ""
+
+#. module: marketing
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Nom del model no vàlid a la definició de l'acció."
+
+#. module: marketing
+#: model:ir.module.module,shortdesc:marketing.module_meta_information
+msgid "Marketing"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,crm_profiling:0
+msgid "Profiling Tools"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign:0
+msgid "Marketing Campaigns"
+msgstr "Campanyes de màrqueting"
+
+#. module: marketing
+#: model:ir.model,name:marketing.model_marketing_installer
+msgid "marketing.installer"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign_mailchimp:0
+msgid "Mailchimp Integration"
+msgstr ""
+
+#. module: marketing
+#: model:ir.actions.act_window,name:marketing.action_marketing_installer
+msgid "Marketing Modules Installation"
+msgstr ""
diff --git a/addons/marketing/i18n/es.po b/addons/marketing/i18n/es.po
new file mode 100644
index 00000000000..c7e72beb0ea
--- /dev/null
+++ b/addons/marketing/i18n/es.po
@@ -0,0 +1,119 @@
+# Spanish 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: 2010-08-20 07:04+0000\n"
+"PO-Revision-Date: 2010-08-31 08:16+0000\n"
+"Last-Translator: Jordi Esteve (www.zikzakmedia.com) "
+"\n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-01 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: marketing
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "¡XML no válido para la estructura de la vista!"
+
+#. module: marketing
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+"¡El nombre del objeto debe empezar por x_ y no contener ningún carácter "
+"especial!"
+
+#. module: marketing
+#: field:marketing.installer,progress:0
+msgid "Configuration Progress"
+msgstr ""
+
+#. module: marketing
+#: view:marketing.installer:0
+msgid "title"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,email_template:0
+msgid "Automated E-Mails"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,config_logo:0
+msgid "Image"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign:0
+msgid ""
+"Helps you to manage marketing campaigns and automate actions and "
+"communication steps."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,marketing_campaign_mailchimp:0
+msgid ""
+"This modules integrate mailchimp.com's service with OpenERP to automate mass "
+"mailings."
+msgstr ""
+
+#. module: marketing
+#: model:ir.module.module,description:marketing.module_meta_information
+msgid "Menu for Marketing"
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,email_template:0
+msgid ""
+"Helps you to design templates of emails and integrate them in your different "
+"processes."
+msgstr ""
+
+#. module: marketing
+#: help:marketing.installer,crm_profiling:0
+msgid ""
+"Helps you to perform segmentation within partners and design questionaires."
+msgstr ""
+
+#. module: marketing
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Nombre de modelo no válido en la definición de la acción."
+
+#. module: marketing
+#: model:ir.module.module,shortdesc:marketing.module_meta_information
+msgid "Marketing"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,crm_profiling:0
+msgid "Profiling Tools"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign:0
+msgid "Marketing Campaigns"
+msgstr "Campañas de marketing"
+
+#. module: marketing
+#: model:ir.model,name:marketing.model_marketing_installer
+msgid "marketing.installer"
+msgstr ""
+
+#. module: marketing
+#: field:marketing.installer,marketing_campaign_mailchimp:0
+msgid "Mailchimp Integration"
+msgstr ""
+
+#. module: marketing
+#: model:ir.actions.act_window,name:marketing.action_marketing_installer
+msgid "Marketing Modules Installation"
+msgstr ""
diff --git a/addons/marketing/i18n/fr.po b/addons/marketing/i18n/fr.po
index fd1c432043f..dddbdb786db 100644
--- a/addons/marketing/i18n/fr.po
+++ b/addons/marketing/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 07:04:08+0000\n"
-"PO-Revision-Date: 2010-08-20 07:04:08+0000\n"
+"POT-Creation-Date: 2010-08-20 07:04+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing
#: constraint:ir.ui.view:0
@@ -22,7 +23,8 @@ msgstr ""
#. module: marketing
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: marketing
@@ -47,12 +49,16 @@ msgstr ""
#. module: marketing
#: help:marketing.installer,marketing_campaign:0
-msgid "Helps you to manage marketing campaigns and automate actions and communication steps."
+msgid ""
+"Helps you to manage marketing campaigns and automate actions and "
+"communication steps."
msgstr ""
#. module: marketing
#: help:marketing.installer,marketing_campaign_mailchimp:0
-msgid "This modules integrate mailchimp.com's service with OpenERP to automate mass mailings."
+msgid ""
+"This modules integrate mailchimp.com's service with OpenERP to automate mass "
+"mailings."
msgstr ""
#. module: marketing
@@ -62,12 +68,15 @@ msgstr ""
#. module: marketing
#: help:marketing.installer,email_template:0
-msgid "Helps you to design templates of emails and integrate them in your different processes."
+msgid ""
+"Helps you to design templates of emails and integrate them in your different "
+"processes."
msgstr ""
#. module: marketing
#: help:marketing.installer,crm_profiling:0
-msgid "Helps you to perform segmentation within partners and design questionaires."
+msgid ""
+"Helps you to perform segmentation within partners and design questionaires."
msgstr ""
#. module: marketing
@@ -104,4 +113,3 @@ msgstr ""
#: model:ir.actions.act_window,name:marketing.action_marketing_installer
msgid "Marketing Modules Installation"
msgstr ""
-
diff --git a/addons/marketing/marketing_wizard.py b/addons/marketing/marketing_wizard.py
index 78b4e78ff6c..8d1a6fa50ed 100644
--- a/addons/marketing/marketing_wizard.py
+++ b/addons/marketing/marketing_wizard.py
@@ -32,7 +32,7 @@ class marketing_installer(osv.osv_memory):
'marketing_campaign_mailchimp':fields.boolean('Mailchimp Integration',
help="This modules integrate mailchimp.com's service with OpenERP to automate mass mailings."),
'crm_profiling':fields.boolean('Profiling Tools',
- help="Helps you to perform segmentation within partners and design questionaires.")
+ help="Helps you to perform segmentation within partners and design segmentation questionnaires")
}
marketing_installer()
diff --git a/addons/marketing_campaign/__openerp__.py b/addons/marketing_campaign/__openerp__.py
index d9151c3bf33..5611e5c39fd 100644
--- a/addons/marketing_campaign/__openerp__.py
+++ b/addons/marketing_campaign/__openerp__.py
@@ -30,14 +30,16 @@
"author" : "OpenERP SA",
"category": 'Generic Modules/Marketing',
"description": """
-Allows you to setup leads automation through marketing campaigns. The campaigns
-are dynamic and multi-channels. The process:
-* Design marketing campaigns that incluces mail templates, reports to print,
- miscelleanous actions, etc.
-* Define segments that are selections of target people
-* Launch your campaign to automate communications.
-
-If you need demo data, you can install the module marketing_campaign_crm_demo.
+This module provides leads automation through marketing campaigns (campaigns can in fact be defined on any resource, not just CRM Leads).
+ The campaigns are dynamic and multi-channels. The process is as follows:
+ * Design marketing campaigns like workflows, including email templates to send, reports to print and send by email, custom actions, etc.
+ * Define input segments that will select the items that should enter the campaign (e.g leads from certain countries, etc.)
+ * Run you campaign in simulation mode to test it real-time or accelerated, and fine-tune it
+ * You may also start the real campaign in manual mode, where each action requires manual validation
+ * Finally launch your campaign live, and watch the statistics as the campaign does everything fully automatically.
+ While the campaign runs you can of course continue to fine-tune the parameters, input segments, workflow, etc.
+
+ Note: If you need demo data, you can install the marketing_campaign_crm_demo module, but this will also install the CRM application as it depends on CRM Leads.
""",
'website': 'http://www.openerp.com',
'init_xml': [],
diff --git a/addons/marketing_campaign/i18n/en_US.po b/addons/marketing_campaign/i18n/en_US.po
deleted file mode 100644
index bc768767de1..00000000000
--- a/addons/marketing_campaign/i18n/en_US.po
+++ /dev/null
@@ -1,914 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * marketing_campaign
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.0dev\n"
-"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 07:30:00+0000\n"
-"PO-Revision-Date: 2010-08-20 07:30:00+0000\n"
-"Last-Translator: <>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The current step for this item has no email or report to preview."
-msgstr "The current step for this item has no email or report to preview."
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,trigger:0
-msgid "Time"
-msgstr "Time"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: view:marketing.campaign:0
-#: view:marketing.campaign.segment:0
-#: view:marketing.campaign.workitem:0
-msgid "Group By..."
-msgstr "Group By..."
-
-#. module: marketing_campaign
-#: field:marketing.campaign.transition,trigger:0
-msgid "Trigger"
-msgstr "Trigger"
-
-#. module: marketing_campaign
-#: constraint:ir.actions.act_window:0
-msgid "Invalid model name in the action definition."
-msgstr "Invalid model name in the action definition."
-
-#. module: marketing_campaign
-#: field:campaign.analysis,count:0
-msgid "# of Actions"
-msgstr "# of Actions"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-msgid "Campaign Editor"
-msgstr "Campaign Editor"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-msgid "Today"
-msgstr "Today"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "March"
-msgstr "March"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,object_id:0
-#: field:marketing.campaign.segment,object_id:0
-#: field:marketing.campaign.workitem,object_id:0
-msgid "Object"
-msgstr "Object"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: view:marketing.campaign.segment:0
-msgid "Set to Draft"
-msgstr "Set to Draft"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,to_ids:0
-msgid "Next Activities"
-msgstr "Next Activities"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Synchronization"
-msgstr "Synchronization"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-msgid "This Year"
-msgstr "This Year"
-
-#. module: marketing_campaign
-#: help:marketing.campaign,partner_field_id:0
-msgid "The generated workitems will be linked to the partner related to the record. If the record is the partner itself left this field empty."
-msgstr "The generated workitems will be linked to the partner related to the record. If the record is the partner itself left this field empty."
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "No preview"
-msgstr "No preview"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.activity:0
-msgid "Outgoing Transitions"
-msgstr "Outgoing Transitions"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Reset"
-msgstr "Reset"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,type:0
-msgid "Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."
-msgstr "Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,interval_type:0
-msgid "Year(s)"
-msgstr "Year(s)"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,report_directory_id:0
-msgid "This folder is used to store the generated reports"
-msgstr "This folder is used to store the generated reports"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: selection:marketing.campaign,state:0
-#: selection:marketing.campaign.segment,state:0
-#: selection:marketing.campaign.workitem,state:0
-msgid "Cancelled"
-msgstr "Cancelled"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,trigger:0
-msgid "Automatic"
-msgstr "Automatic"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.activity:0
-msgid "Activity Definition"
-msgstr "Activity Definition"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,keep_if_condition_not_met:0
-msgid "Keep as cancelled when condition not met"
-msgstr "Keep as cancelled when condition not met"
-
-#. module: marketing_campaign
-#: help:marketing.campaign,mode:0
-msgid "Test - It creates and process all the activities directly (without waiting for the delay on transitions) but does not send emails or produce reports.\n"
-"Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.\n"
-"With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.\n"
-"Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"
-msgstr "Test - It creates and process all the activities directly (without waiting for the delay on transitions) but does not send emails or produce reports.\n"
-"Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.\n"
-"With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.\n"
-"Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,campaign_id:0
-#: view:marketing.campaign:0
-#: field:marketing.campaign.activity,campaign_id:0
-#: view:marketing.campaign.segment:0
-#: field:marketing.campaign.segment,campaign_id:0
-#: field:marketing.campaign.workitem,campaign_id:0
-msgid "Campaign"
-msgstr "Campaign"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,start:0
-msgid "Start"
-msgstr "Start"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,segment_id:0
-#: view:marketing.campaign.workitem:0
-#: field:marketing.campaign.workitem,segment_id:0
-msgid "Segment"
-msgstr "Segment"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.segment,sync_mode:0
-msgid "Workitem creation mode"
-msgstr "Workitem creation mode"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,interval_type:0
-msgid "Month(s)"
-msgstr "Month(s)"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The campaign hasn't any starting activity nor any activity with a signal and no previous activity."
-msgstr "The campaign hasn't any starting activity nor any activity with a signal and no previous activity."
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,partner_id:0
-#: model:ir.model,name:marketing_campaign.model_res_partner
-#: field:marketing.campaign.workitem,partner_id:0
-msgid "Partner"
-msgstr "Partner"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.segment,sync_mode:0
-msgid "If record created after last sync"
-msgstr "If record created after last sync"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.activity:0
-msgid "Transitions"
-msgstr "Transitions"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Create After Sync"
-msgstr "Create After Sync"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Dates"
-msgstr "Dates"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.segment,sync_mode:0
-msgid "Determines when new workitems should be created for records matching a segment."
-msgstr "Determines when new workitems should be created for records matching a segment."
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: view:marketing.campaign:0
-#: field:marketing.campaign,state:0
-#: view:marketing.campaign.segment:0
-#: field:marketing.campaign.segment,state:0
-#: view:marketing.campaign.workitem:0
-#: field:marketing.campaign.workitem,state:0
-msgid "State"
-msgstr "State"
-
-#. module: marketing_campaign
-#: model:ir.module.module,description:marketing_campaign.module_meta_information
-msgid "\n"
-"Allows you to setup leads automation through marketing campaigns. The campaigns\n"
-"are dynamic and multi-channels. The process:\n"
-"* Design marketing campaigns that incluces mail templates, reports to print,\n"
-" miscelleanous actions, etc.\n"
-"* Define segments that are selections of target people\n"
-"* Launch your campaign to automate communications.\n"
-"\n"
-"If you need demo data, you can install the module marketing_campaign_crm_demo.\n"
-" "
-msgstr "\n"
-"Allows you to setup leads automation through marketing campaigns. The campaigns\n"
-"are dynamic and multi-channels. The process:\n"
-"* Design marketing campaigns that incluces mail templates, reports to print,\n"
-" miscelleanous actions, etc.\n"
-"* Define segments that are selections of target people\n"
-"* Launch your campaign to automate communications.\n"
-"\n"
-"If you need demo data, you can install the module marketing_campaign_crm_demo.\n"
-" "
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,condition:0
-msgid "Python expression to decide whether the activity can be executed, otherwise it will be deleted or cancelled.The expression may use the following [browsable] variables:\n"
-" - activity: the campaign activity\n"
-" - workitem: the campaign workitem\n"
-" - object: the object this campaign item represents\n"
-" - transitions: list of campaign transitions outgoing from this activity\n"
-"...- re: Python regular expression module"
-msgstr "Python expression to decide whether the activity can be executed, otherwise it will be deleted or cancelled.The expression may use the following [browsable] variables:\n"
-" - activity: the campaign activity\n"
-" - workitem: the campaign workitem\n"
-" - object: the object this campaign item represents\n"
-" - transitions: list of campaign transitions outgoing from this activity\n"
-"...- re: Python regular expression module"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-msgid "Marketing Reports"
-msgstr "Marketing Reports"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,type:0
-msgid "Type"
-msgstr "Type"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.workitem,res_name:0
-msgid "Resource Name"
-msgstr "Resource Name"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: view:marketing.campaign.segment:0
-msgid "Run"
-msgstr "Run"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The campaign cannot be started: an email account is missing in the email activity '%s'"
-msgstr "The campaign cannot be started: an email account is missing in the email activity '%s'"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,from_ids:0
-msgid "Previous Activities"
-msgstr "Previous Activities"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.transition,activity_from_id:0
-msgid "Previous Activity"
-msgstr "Previous Activity"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Marketing Campaign Activities"
-msgstr "Marketing Campaign Activities"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-#: field:marketing.campaign.workitem,error_msg:0
-msgid "Error Message"
-msgstr "Error Message"
-
-#. module: marketing_campaign
-#: model:ir.actions.act_window,name:marketing_campaign.action_campaign_analysis_all
-#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_form
-#: model:ir.ui.menu,name:marketing_campaign.menu_action_campaign_analysis_all
-#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign
-#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_form
-#: view:marketing.campaign:0
-msgid "Campaigns"
-msgstr "Campaigns"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.transition,interval_type:0
-msgid "Interval Unit"
-msgstr "Interval Unit"
-
-#. module: marketing_campaign
-#: field:campaign.analysis,country_id:0
-msgid "Country"
-msgstr "Country"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "July"
-msgstr "July"
-
-#. module: marketing_campaign
-#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_configuration
-msgid "Configuration"
-msgstr "Configuration"
-
-#. module: marketing_campaign
-#: constraint:ir.cron:0
-msgid "Invalid arguments"
-msgstr "Invalid arguments"
-
-#. module: marketing_campaign
-#: constraint:ir.ui.view:0
-msgid "Invalid XML for View Architecture!"
-msgstr "Invalid XML for View Architecture!"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,interval_type:0
-msgid "Hour(s)"
-msgstr "Hour(s)"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_marketing_campaign_segment
-msgid "Campaign Segment"
-msgstr "Campaign Segment"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-#: view:marketing.campaign.workitem:0
-msgid "Cancel"
-msgstr "Cancel"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,keep_if_condition_not_met:0
-msgid "By activating this option, workitems that aren't executed because the condition is not met are marked as cancelled instead of being deleted."
-msgstr "By activating this option, workitems that aren't executed because the condition is not met are marked as cancelled instead of being deleted."
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-msgid "Exceptions"
-msgstr "Exceptions"
-
-#. module: marketing_campaign
-#: field:res.partner,workitem_ids:0
-msgid "Workitems"
-msgstr "Workitems"
-
-#. module: marketing_campaign
-#: field:marketing.campaign,fixed_cost:0
-msgid "Fixed Cost"
-msgstr "Fixed Cost"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.transition,interval_nbr:0
-msgid "Interval Value"
-msgstr "Interval Value"
-
-#. module: marketing_campaign
-#: field:campaign.analysis,revenue:0
-#: field:marketing.campaign.activity,revenue:0
-msgid "Revenue"
-msgstr "Revenue"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "September"
-msgstr "September"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "December"
-msgstr "December"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,month:0
-msgid "Month"
-msgstr "Month"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.transition,activity_to_id:0
-msgid "Next Activity"
-msgstr "Next Activity"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,email_template_id:0
-msgid "The e-mail to send when this activity is activated"
-msgstr "The e-mail to send when this activity is activated"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-msgid "This Month"
-msgstr "This Month"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-msgid "Test Mode"
-msgstr "Test Mode"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_ir_actions_report_xml
-msgid "ir.actions.report.xml"
-msgstr "ir.actions.report.xml"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-msgid "Manual Mode"
-msgstr "Manual Mode"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,server_action_id:0
-msgid "The action to perform when this activity is activated"
-msgstr "The action to perform when this activity is activated"
-
-#. module: marketing_campaign
-#: field:marketing.campaign,partner_field_id:0
-msgid "Partner Field"
-msgstr "Partner Field"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_campaign_analysis
-msgid "Campaign Analysis"
-msgstr "Campaign Analysis"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign,mode:0
-msgid "Test in Realtime"
-msgstr "Test in Realtime"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign,mode:0
-msgid "Test Directly"
-msgstr "Test Directly"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,report_directory_id:0
-msgid "Directory"
-msgstr "Directory"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.segment,sync_last_date:0
-msgid "Latest Synchronization"
-msgstr "Latest Synchronization"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: selection:marketing.campaign,state:0
-#: view:marketing.campaign.segment:0
-#: selection:marketing.campaign.segment,state:0
-msgid "Draft"
-msgstr "Draft"
-
-#. module: marketing_campaign
-#: constraint:ir.ui.menu:0
-msgid "Error ! You can not create recursive Menu."
-msgstr "Error ! You can not create recursive Menu."
-
-#. module: marketing_campaign
-#: field:marketing.campaign.segment,date_run:0
-msgid "Launching Date"
-msgstr "Launching Date"
-
-#. module: marketing_campaign
-#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
-msgstr "The Object name must start with x_ and not contain any special character !"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Preview"
-msgstr "Preview"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: view:marketing.campaign.segment:0
-#: view:marketing.campaign.workitem:0
-msgid "Status"
-msgstr "Status"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Run Date"
-msgstr "Run Date"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Related Resource"
-msgstr "Related Resource"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "August"
-msgstr "August"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign,mode:0
-msgid "Normal"
-msgstr "Normal"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,start:0
-msgid "This activity is launched when the campaign starts."
-msgstr "This activity is launched when the campaign starts."
-
-#. module: marketing_campaign
-#: help:marketing.campaign.activity,signal:0
-msgid "An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent"
-msgstr "An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "June"
-msgstr "June"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.segment,sync_mode:0
-msgid "All records (no duplicates)"
-msgstr "All records (no duplicates)"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,date:0
-#: view:marketing.campaign.workitem:0
-msgid "Date"
-msgstr "Date"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "November"
-msgstr "November"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,condition:0
-msgid "Condition"
-msgstr "Condition"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,report_id:0
-msgid "The report to generate when this activity is activated"
-msgstr "The report to generate when this activity is activated"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-#: selection:marketing.campaign.workitem,state:0
-msgid "Exception"
-msgstr "Exception"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "October"
-msgstr "October"
-
-#. module: marketing_campaign
-#: help:marketing.campaign,fixed_cost:0
-msgid "Fixed cost for the campaign (used for campaign analysis), see also variable cost on activities"
-msgstr "Fixed cost for the campaign (used for campaign analysis), see also variable cost on activities"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "January"
-msgstr "January"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-#: field:marketing.campaign.workitem,date:0
-msgid "Execution Date"
-msgstr "Execution Date"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_marketing_campaign_workitem
-msgid "Campaign Workitem"
-msgstr "Campaign Workitem"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.segment,ir_filter_id:0
-msgid "Filter"
-msgstr "Filter"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Synchronize"
-msgstr "Synchronize"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "Error"
-msgstr "Error"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.activity:0
-#: field:marketing.campaign.activity,server_action_id:0
-#: selection:marketing.campaign.activity,type:0
-msgid "Action"
-msgstr "Action"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "Automatic transition"
-msgstr "Automatic transition"
-
-#. module: marketing_campaign
-#: view:res.partner:0
-msgid "History"
-msgstr "History"
-
-#. module: marketing_campaign
-#: help:marketing.campaign,object_id:0
-msgid "Choose the model on which you want this campaign to be run"
-msgstr "Choose the model on which you want this campaign to be run"
-
-#. module: marketing_campaign
-#: model:ir.module.module,shortdesc:marketing_campaign.module_meta_information
-msgid "marketing_campaign"
-msgstr "marketing_campaign"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Process"
-msgstr "Process"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#: selection:marketing.campaign.transition,trigger:0
-#, python-format
-msgid "Cosmetic"
-msgstr "Cosmetic"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.transition,trigger:0
-msgid "How is the destination workitem triggered"
-msgstr "How is the destination workitem triggered"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: selection:marketing.campaign,state:0
-#: selection:marketing.campaign.segment,state:0
-#: selection:marketing.campaign.workitem,state:0
-msgid "Done"
-msgstr "Done"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_email_template
-msgid "Email Templates for Models"
-msgstr "Email Templates for Models"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: view:marketing.campaign.segment:0
-msgid "Close"
-msgstr "Close"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The campaign cannot be marked as done before all segments are done"
-msgstr "The campaign cannot be marked as done before all segments are done"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.workitem,res_id:0
-msgid "Resource ID"
-msgstr "Resource ID"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_marketing_campaign_transition
-msgid "Campaign Transition"
-msgstr "Campaign Transition"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: view:marketing.campaign.workitem:0
-#: selection:marketing.campaign.workitem,state:0
-msgid "To Do"
-msgstr "To Do"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.workitem:0
-msgid "Campaign Step"
-msgstr "Campaign Step"
-
-#. module: marketing_campaign
-#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_segment_form
-#: model:ir.ui.menu,name:marketing_campaign.menu_marketing_campaign_segment_form
-#: view:marketing.campaign.segment:0
-msgid "Segments"
-msgstr "Segments"
-
-#. module: marketing_campaign
-#: model:ir.actions.act_window,name:marketing_campaign.act_marketing_campaing_segment_opened
-msgid "All Segments"
-msgstr "All Segments"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.activity:0
-msgid "Incoming Transitions"
-msgstr "Incoming Transitions"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.activity,type:0
-msgid "E-mail"
-msgstr "E-mail"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The campaign cannot be started: the email account is not approved in the email activity '%s'"
-msgstr "The campaign cannot be started: the email account is not approved in the email activity '%s'"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.transition,interval_type:0
-msgid "Day(s)"
-msgstr "Day(s)"
-
-#. module: marketing_campaign
-#: field:marketing.campaign,activity_ids:0
-#: view:marketing.campaign.activity:0
-msgid "Activities"
-msgstr "Activities"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "May"
-msgstr "May"
-
-#. module: marketing_campaign
-#: view:marketing.campaign.segment:0
-msgid "Modified after Sync"
-msgstr "Modified after Sync"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: selection:marketing.campaign,state:0
-#: view:marketing.campaign.segment:0
-#: selection:marketing.campaign.segment,state:0
-msgid "Running"
-msgstr "Running"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.activity,type:0
-msgid "Paper"
-msgstr "Paper"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "After %(interval_nbr)d %(interval_type)s"
-msgstr "After %(interval_nbr)d %(interval_type)s"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_marketing_campaign
-msgid "Marketing Campaign"
-msgstr "Marketing Campaign"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.segment,date_done:0
-msgid "End Date"
-msgstr "End Date"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "February"
-msgstr "February"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: field:marketing.campaign,object_id:0
-msgid "Resource"
-msgstr "Resource"
-
-#. module: marketing_campaign
-#: field:marketing.campaign,name:0
-#: field:marketing.campaign.activity,name:0
-#: field:marketing.campaign.segment,name:0
-#: field:marketing.campaign.transition,name:0
-msgid "Name"
-msgstr "Name"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "Email Preview"
-msgstr "Email Preview"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,signal:0
-msgid "Signal"
-msgstr "Signal"
-
-#. module: marketing_campaign
-#: help:marketing.campaign.workitem,date:0
-msgid "If date is not set, this workitem have to be run manually"
-msgstr "If date is not set, this workitem have to be run manually"
-
-#. module: marketing_campaign
-#: code:addons/marketing_campaign/marketing_campaign.py:0
-#, python-format
-msgid "The campaign cannot be started: there are no activities in it"
-msgstr "The campaign cannot be started: there are no activities in it"
-
-#. module: marketing_campaign
-#: selection:campaign.analysis,month:0
-msgid "April"
-msgstr "April"
-
-#. module: marketing_campaign
-#: view:marketing.campaign:0
-#: field:marketing.campaign,mode:0
-msgid "Mode"
-msgstr "Mode"
-
-#. module: marketing_campaign
-#: field:campaign.analysis,activity_id:0
-#: view:marketing.campaign.workitem:0
-#: field:marketing.campaign.workitem,activity_id:0
-msgid "Activity"
-msgstr "Activity"
-
-#. module: marketing_campaign
-#: model:ir.actions.act_window,name:marketing_campaign.action_marketing_campaign_workitem
-#: model:ir.ui.menu,name:marketing_campaign.menu_action_marketing_campaign_workitem
-msgid "Campaign Followup"
-msgstr "Campaign Followup"
-
-#. module: marketing_campaign
-#: model:ir.model,name:marketing_campaign.model_marketing_campaign_activity
-msgid "Campaign Activity"
-msgstr "Campaign Activity"
-
-#. module: marketing_campaign
-#: field:marketing.campaign.activity,variable_cost:0
-msgid "Variable Cost"
-msgstr "Variable Cost"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign.segment,sync_mode:0
-msgid "If record modified after last sync (no duplicates)"
-msgstr "If record modified after last sync (no duplicates)"
-
-#. module: marketing_campaign
-#: selection:marketing.campaign,mode:0
-msgid "With Manual Confirmation"
-msgstr "With Manual Confirmation"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,total_cost:0
-msgid "Cost"
-msgstr "Cost"
-
-#. module: marketing_campaign
-#: view:campaign.analysis:0
-#: field:campaign.analysis,year:0
-msgid "Year"
-msgstr "Year"
-
diff --git a/addons/marketing_campaign/i18n/fr.po b/addons/marketing_campaign/i18n/fr.po
index 580df4df61b..47577d567fb 100644
--- a/addons/marketing_campaign/i18n/fr.po
+++ b/addons/marketing_campaign/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 07:09:51+0000\n"
-"PO-Revision-Date: 2010-08-20 07:09:51+0000\n"
+"POT-Creation-Date: 2010-08-20 07:09+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: marketing_campaign
#: code:addons/marketing_campaign/marketing_campaign.py:0
@@ -94,7 +95,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign,partner_field_id:0
-msgid "The generated workitems will be linked to the partner related to the record. If the record is the partner itself left this field empty."
+msgid ""
+"The generated workitems will be linked to the partner related to the record. "
+"If the record is the partner itself left this field empty."
msgstr ""
#. module: marketing_campaign
@@ -115,7 +118,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign.activity,type:0
-msgid "Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."
+msgid ""
+"Describe type of action to be performed on the Activity.Eg : Send email,Send "
+"paper.."
msgstr ""
#. module: marketing_campaign
@@ -153,10 +158,15 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign,mode:0
-msgid "Test - It creates and process all the activities directly (without waiting for the delay on transitions) but does not send emails or produce reports.\n"
-"Test in Realtime - It creates and processes all the activities directly but does not send emails or produce reports.\n"
-"With Manual Confirmation - the campaigns runs normally, but the user has to validate all workitem manually.\n"
-"Normal - the campaign runs normally and automatically sends all emails and reports (be very careful with this mode, you're live!)"
+msgid ""
+"Test - It creates and process all the activities directly (without waiting "
+"for the delay on transitions) but does not send emails or produce reports.\n"
+"Test in Realtime - It creates and processes all the activities directly but "
+"does not send emails or produce reports.\n"
+"With Manual Confirmation - the campaigns runs normally, but the user has to "
+"validate all workitem manually.\n"
+"Normal - the campaign runs normally and automatically sends all emails and "
+"reports (be very careful with this mode, you're live!)"
msgstr ""
#. module: marketing_campaign
@@ -196,7 +206,9 @@ msgstr ""
#. module: marketing_campaign
#: code:addons/marketing_campaign/marketing_campaign.py:0
#, python-format
-msgid "The campaign hasn't any starting activity nor any activity with a signal and no previous activity."
+msgid ""
+"The campaign hasn't any starting activity nor any activity with a signal and "
+"no previous activity."
msgstr ""
#. module: marketing_campaign
@@ -229,7 +241,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign.segment,sync_mode:0
-msgid "Determines when new workitems should be created for records matching a segment."
+msgid ""
+"Determines when new workitems should be created for records matching a "
+"segment."
msgstr ""
#. module: marketing_campaign
@@ -245,21 +259,28 @@ msgstr ""
#. module: marketing_campaign
#: model:ir.module.module,description:marketing_campaign.module_meta_information
-msgid "\n"
-"Allows you to setup leads automation through marketing campaigns. The campaigns\n"
+msgid ""
+"\n"
+"Allows you to setup leads automation through marketing campaigns. The "
+"campaigns\n"
"are dynamic and multi-channels. The process:\n"
-"* Design marketing campaigns that incluces mail templates, reports to print,\n"
+"* Design marketing campaigns that incluces mail templates, reports to "
+"print,\n"
" miscelleanous actions, etc.\n"
"* Define segments that are selections of target people\n"
"* Launch your campaign to automate communications.\n"
"\n"
-"If you need demo data, you can install the module marketing_campaign_crm_demo.\n"
+"If you need demo data, you can install the module "
+"marketing_campaign_crm_demo.\n"
" "
msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign.activity,condition:0
-msgid "Python expression to decide whether the activity can be executed, otherwise it will be deleted or cancelled.The expression may use the following [browsable] variables:\n"
+msgid ""
+"Python expression to decide whether the activity can be executed, otherwise "
+"it will be deleted or cancelled.The expression may use the following "
+"[browsable] variables:\n"
" - activity: the campaign activity\n"
" - workitem: the campaign workitem\n"
" - object: the object this campaign item represents\n"
@@ -291,7 +312,9 @@ msgstr ""
#. module: marketing_campaign
#: code:addons/marketing_campaign/marketing_campaign.py:0
#, python-format
-msgid "The campaign cannot be started: an email account is missing in the email activity '%s'"
+msgid ""
+"The campaign cannot be started: an email account is missing in the email "
+"activity '%s'"
msgstr ""
#. module: marketing_campaign
@@ -373,7 +396,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign.activity,keep_if_condition_not_met:0
-msgid "By activating this option, workitems that aren't executed because the condition is not met are marked as cancelled instead of being deleted."
+msgid ""
+"By activating this option, workitems that aren't executed because the "
+"condition is not met are marked as cancelled instead of being deleted."
msgstr ""
#. module: marketing_campaign
@@ -503,7 +528,8 @@ msgstr ""
#. module: marketing_campaign
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: marketing_campaign
@@ -545,7 +571,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign.activity,signal:0
-msgid "An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent"
+msgid ""
+"An activity with a signal can be called programmatically. Be careful, the "
+"workitem is always created when a signal is sent"
msgstr ""
#. module: marketing_campaign
@@ -593,7 +621,9 @@ msgstr ""
#. module: marketing_campaign
#: help:marketing.campaign,fixed_cost:0
-msgid "Fixed cost for the campaign (used for campaign analysis), see also variable cost on activities"
+msgid ""
+"Fixed cost for the campaign (used for campaign analysis), see also variable "
+"cost on activities"
msgstr ""
#. module: marketing_campaign
@@ -745,7 +775,9 @@ msgstr ""
#. module: marketing_campaign
#: code:addons/marketing_campaign/marketing_campaign.py:0
#, python-format
-msgid "The campaign cannot be started: the email account is not approved in the email activity '%s'"
+msgid ""
+"The campaign cannot be started: the email account is not approved in the "
+"email activity '%s'"
msgstr ""
#. module: marketing_campaign
@@ -894,4 +926,3 @@ msgstr ""
#: field:campaign.analysis,year:0
msgid "Year"
msgstr ""
-
diff --git a/addons/marketing_campaign/marketing_campaign.py b/addons/marketing_campaign/marketing_campaign.py
index d9b87e91347..4fd4fda5253 100644
--- a/addons/marketing_campaign/marketing_campaign.py
+++ b/addons/marketing_campaign/marketing_campaign.py
@@ -91,7 +91,7 @@ class marketing_campaign(osv.osv):
this campaign to be run"),
'partner_field_id': fields.many2one('ir.model.fields', 'Partner Field',
domain="[('model_id', '=', object_id), ('ttype', '=', 'many2one'), ('relation', '=', 'res.partner')]",
- help="The generated workitems will be linked to the partner related to the record. If the record is the partner itself left this field empty."),
+ help="The generated workitems will be linked to the partner related to the record. If the record is the partner itself leave this field empty."),
'mode': fields.selection([('test', 'Test Directly'),
('test_realtime', 'Test in Realtime'),
('manual', 'With Manual Confirmation'),
@@ -108,7 +108,7 @@ Normal - the campaign runs normally and automatically sends all emails and repor
'State',),
'activity_ids': fields.one2many('marketing.campaign.activity',
'campaign_id', 'Activities'),
- 'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for the campaign (used for campaign analysis), see also variable cost on activities"),
+ 'fixed_cost': fields.float('Fixed Cost', help="Fixed cost for running this campaign. You may also specify variable cost and revenue on each campaign activity. Cost and Revenue statistics are included in Campaign Reporting."),
}
_defaults = {
@@ -135,12 +135,12 @@ Normal - the campaign runs normally and automatically sends all emails and repor
if activity.type != 'email':
continue
if not activity.email_template_id.from_account:
- raise osv.except_osv(_("Error"), _("The campaign cannot be started: an email account is missing in the email activity '%s'")%activity.name)
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started: the email account is missing in email activity '%s'")%activity.name)
if activity.email_template_id.from_account.state != 'approved':
- raise osv.except_osv(_("Error"), _("The campaign cannot be started: the email account is not approved in the email activity '%s'")%activity.name)
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started: the email account is not approved in email activity '%s'")%activity.name)
if not has_start and not has_signal_without_from:
- raise osv.except_osv(_("Error"), _("The campaign hasn't any starting activity nor any activity with a signal and no previous activity."))
+ raise osv.except_osv(_("Error"), _("The campaign cannot be started: it doesn't have any starting activity (or any activity with a signal and no previous activity)"))
return self.write(cr, uid, ids, {'state': 'running'})
@@ -213,27 +213,31 @@ class marketing_campaign_segment(osv.osv):
_name = "marketing.campaign.segment"
_description = "Campaign Segment"
+ def _get_next_sync(self, cr, uid, ids, fn, args, context=None):
+ # next auto sync date is same for all segments
+ sync_job = self.pool.get('ir.model.data').get_object(cr, uid, 'marketing_campaign', 'ir_cron_marketing_campaign_every_day', context=context)
+ next_sync = sync_job and sync_job.nextcall or False
+ return dict.fromkeys(ids, next_sync)
+
_columns = {
'name': fields.char('Name', size=64,required=True),
- 'campaign_id': fields.many2one('marketing.campaign', 'Campaign',
- required=True, select=1, ondelete="cascade"),
- 'object_id': fields.related('campaign_id','object_id',
- type='many2one', relation='ir.model',
- string='Object'),
- 'ir_filter_id': fields.many2one('ir.filters', 'Filter', help=""),
- 'sync_last_date': fields.datetime('Latest Synchronization'),
- 'sync_mode': fields.selection([('create_date', 'If record created after last sync'),
- ('write_date', 'If record modified after last sync (no duplicates)'),
+ 'campaign_id': fields.many2one('marketing.campaign', 'Campaign', required=True, select=1, ondelete="cascade"),
+ 'object_id': fields.related('campaign_id','object_id', type='many2one', relation='ir.model', string='Resource'),
+ 'ir_filter_id': fields.many2one('ir.filters', 'Filter', help="Filter to select the matching resource records that belong to this segment. New filters can be created and saved using the advanced search on the list view of the Resource. If no filter is set, all records are selected without filtering. The synchronization mode may also add a criterion to the filter."),
+ 'sync_last_date': fields.datetime('Last Synchronization', help="Date on which this segment was synchronized last time (automatically or manually)"),
+ 'sync_mode': fields.selection([('create_date', 'Only records created after last sync'),
+ ('write_date', 'Only records modified after last sync (no duplicates)'),
('all', 'All records (no duplicates)')],
- 'Workitem creation mode',
- help="Determines when new workitems should be created for records matching a segment."),
+ 'Synchronization mode',
+ help="Determines an additional criterion to add to the filter when selecting new records to inject in the campaign."),
'state': fields.selection([('draft', 'Draft'),
('running', 'Running'),
('done', 'Done'),
('cancelled', 'Cancelled')],
'State',),
- 'date_run': fields.datetime('Launching Date'),
- 'date_done': fields.datetime('End Date'),
+ 'date_run': fields.datetime('Launch Date', help="Initial start date of this segment."),
+ 'date_done': fields.datetime('End Date', help="Date this segment was last closed or cancelled."),
+ 'date_next_sync': fields.function(_get_next_sync, method=True, string='Next Synchronization', type='datetime', help="Next time the synchronization job is scheduled to run automatically"),
}
_defaults = {
@@ -241,6 +245,33 @@ class marketing_campaign_segment(osv.osv):
'sync_mode': lambda *a: 'create_date',
}
+ def _check_model(self, cr, uid, ids, context=None):
+ if not context:
+ context = {}
+ for obj in self.browse(cr, uid, ids, context=context):
+ if not obj.ir_filter_id:
+ return True
+ if obj.campaign_id.object_id.model != obj.ir_filter_id.model_id:
+ return False
+ return True
+
+ _constraints = [
+ (_check_model, _('Model of filter must be same as resource model of Campaign '), ['ir_filter_id,campaign_id']),
+ ]
+
+ def onchange_campaign_id(self, cr, uid, ids, campaign_id):
+ res = {'domain':{'ir_filter_id':[]}}
+ campaign_pool = self.pool.get('marketing.campaign')
+ if campaign_id:
+ campaign = campaign_pool.browse(cr, uid, campaign_id)
+ model_name = self.pool.get('ir.model').read(cr, uid, [campaign.object_id.id], ['model'])
+ if model_name:
+ mod_name = model_name[0]['model']
+ res['domain'] = {'ir_filter_id': [('model_id', '=', mod_name)]}
+ else:
+ res['value'] = {'ir_filter_id': False}
+ return res
+
def state_running_set(self, cr, uid, ids, *args):
segment = self.browse(cr, uid, ids[0])
vals = {'state': 'running'}
@@ -325,8 +356,8 @@ class marketing_campaign_activity(osv.osv):
_action_types = [
('email', 'E-mail'),
- ('paper', 'Paper'),
- ('action', 'Action'),
+ ('report', 'Report'),
+ ('action', 'Custom Action'),
# TODO implement the subcampaigns.
# TODO implement the subcampaign out. disallow out transitions from
# subcampaign activities ?
@@ -346,13 +377,17 @@ class marketing_campaign_activity(osv.osv):
"The expression may use the following [browsable] variables:\n"
" - activity: the campaign activity\n"
" - workitem: the campaign workitem\n"
- " - object: the object this campaign item represents\n"
+ " - resource: the resource object this campaign item represents\n"
" - transitions: list of campaign transitions outgoing from this activity\n"
"...- re: Python regular expression module"),
'type': fields.selection(_action_types, 'Type', required=True,
- help="Describe type of action to be performed on the Activity.Eg : Send email,Send paper.."),
- 'email_template_id': fields.many2one('email.template','The e-mail to send when this activity is activated'),
- 'report_id': fields.many2one('ir.actions.report.xml', 'The report to generate when this activity is activated', ),
+ help="""The type of action to execute when an item enters this activity, such as:
+ - Email: send an email using a predefined email template
+ - Report: print an existing Report defined on the resource item and save it into a specific directory
+ - Custom Action: execute a predefined action, e.g. to modify the fields of the resource record
+ """),
+ 'email_template_id': fields.many2one('email.template', "Email Template", help='The e-mail to send when this activity is activated'),
+ 'report_id': fields.many2one('ir.actions.report.xml', "Report", help='The report to generate when this activity is activated', ),
'report_directory_id': fields.many2one('document.directory','Directory',
help="This folder is used to store the generated reports"),
'server_action_id': fields.many2one('ir.actions.server', string='Action',
@@ -363,11 +398,11 @@ class marketing_campaign_activity(osv.osv):
'from_ids': fields.one2many('marketing.campaign.transition',
'activity_to_id',
'Previous Activities'),
- 'variable_cost': fields.float('Variable Cost'),
- 'revenue': fields.float('Revenue'),
+ 'variable_cost': fields.float('Variable Cost', help="Set a variable cost if you consider that every campaign item that has reached this point has entailed a certain cost. You can get cost statistics in the Reporting section"),
+ 'revenue': fields.float('Revenue', help="Set an expected revenue if you consider that every campaign item that has reached this point has generated a certain revenue. You can get revenue statistics in the Reporting section"),
'signal': fields.char('Signal', size=128,
help='An activity with a signal can be called programmatically. Be careful, the workitem is always created when a signal is sent'),
- 'keep_if_condition_not_met': fields.boolean('Keep as cancelled when condition not met',
+ 'keep_if_condition_not_met': fields.boolean("Don't delete workitems",
help="By activating this option, workitems that aren't executed because the condition is not met are marked as cancelled instead of being deleted.")
}
@@ -390,7 +425,7 @@ class marketing_campaign_activity(osv.osv):
return super(marketing_campaign_activity, self).search(cr, uid, args,
offset, limit, order, context, count)
- def _process_wi_paper(self, cr, uid, activity, workitem, context=None):
+ def _process_wi_report(self, cr, uid, activity, workitem, context=None):
service = netsvc.LocalService('report.%s'%activity.report_id.report_name)
(report_data, format) = service.create(cr, uid, [], {}, {})
attach_vals = {
@@ -494,7 +529,18 @@ class marketing_campaign_transition(osv.osv):
'interval_type': 'days',
'trigger': 'time',
}
+ def _check_campaign(self, cr, uid, ids, context=None):
+ if not context:
+ context = {}
+ for obj in self.browse(cr, uid, ids, context=context):
+ if obj.activity_from_id.campaign_id != obj.activity_to_id.campaign_id:
+ return False
+ return True
+ _constraints = [
+ (_check_campaign, _('The To/From Activity of transition must be of the same Campaign '), ['activity_from_id,activity_to_id']),
+ ]
+
_sql_constraints = [
('interval_positive', 'CHECK(interval_nbr >= 0)', 'The interval must be positive or zero')
]
@@ -517,23 +563,50 @@ class marketing_campaign_workitem(osv.osv):
res[wi.id] = ng[0][1]
return res
+ def _resource_search(self, cr, uid, obj, name, args, domain=None, context=None):
+ """Returns id of workitem whose resource_name matches with the given name"""
+ if context is None:
+ context = {}
+ if not len(args):
+ return []
+
+ condition = []
+ final_ids = []
+
+ cr.execute("""select w.id, w.res_id, m.model \
+ from marketing_campaign_workitem w \
+ left join marketing_campaign_activity a on (a.id=w.activity_id)\
+ left join marketing_campaign c on (c.id=a.campaign_id)\
+ left join ir_model m on (m.id=c.object_id)
+ """)
+ res = cr.fetchall()
+ for id, res_id, model in res:
+ model_pool = self.pool.get(model)
+ for arg in args:
+ if arg[1] == 'ilike':
+ condition.append((model_pool._rec_name, 'ilike', arg[2]))
+ res_ids = model_pool.search(cr, uid, condition, context=context)
+ if res_id in res_ids:
+ final_ids.append(id)
+ return [('id', 'in', final_ids)]
+
_columns = {
- 'segment_id': fields.many2one('marketing.campaign.segment', 'Segment'),
+ 'segment_id': fields.many2one('marketing.campaign.segment', 'Segment', readonly=True),
'activity_id': fields.many2one('marketing.campaign.activity','Activity',
- required=True),
+ required=True, readonly=True),
'campaign_id': fields.related('activity_id', 'campaign_id',
- type='many2one', relation='marketing.campaign', string='Campaign', readonly=True),
+ type='many2one', relation='marketing.campaign', string='Campaign', readonly=True, store=True),
'object_id': fields.related('activity_id', 'campaign_id', 'object_id',
- type='many2one', relation='ir.model', string='Object', select=1),
- 'res_id': fields.integer('Resource ID', select=1, readonly=1),
- 'res_name': fields.function(_res_name_get, method=True, string='Resource Name', type="char", size=64),
- 'date': fields.datetime('Execution Date', help='If date is not set, this workitem have to be run manually'),
- 'partner_id': fields.many2one('res.partner', 'Partner', select=1),
+ type='many2one', relation='ir.model', string='Resource', select=1, readonly=True, store=True),
+ 'res_id': fields.integer('Resource ID', select=1, readonly=True),
+ 'res_name': fields.function(_res_name_get, method=True, string='Resource Name', fnct_search=_resource_search, type="char", size=64),
+ 'date': fields.datetime('Execution Date', help='If date is not set, this workitem has to be run manually', readonly=True),
+ 'partner_id': fields.many2one('res.partner', 'Partner', select=1, readonly=True),
'state': fields.selection([('todo', 'To Do'),
('exception', 'Exception'), ('done', 'Done'),
- ('cancelled', 'Cancelled')], 'State'),
+ ('cancelled', 'Cancelled')], 'State', readonly=True),
- 'error_msg' : fields.text('Error Message')
+ 'error_msg' : fields.text('Error Message', readonly=True)
}
_defaults = {
'state': lambda *a: 'todo',
@@ -564,6 +637,7 @@ class marketing_campaign_workitem(osv.osv):
'activity': activity,
'workitem': workitem,
'object': object_id,
+ 'resource': object_id,
'transitions': activity.to_ids,
're': re,
}
@@ -688,7 +762,7 @@ class marketing_campaign_workitem(osv.osv):
wi_obj.res_id)
}
- elif wi_obj.activity_id.type == 'paper':
+ elif wi_obj.activity_id.type == 'report':
datas = {
'ids': [wi_obj.res_id],
'model': wi_obj.object_id.model
diff --git a/addons/marketing_campaign/marketing_campaign_data.xml b/addons/marketing_campaign/marketing_campaign_data.xml
index 42ed4d12118..4f337b1d60e 100644
--- a/addons/marketing_campaign/marketing_campaign_data.xml
+++ b/addons/marketing_campaign/marketing_campaign_data.xml
@@ -5,7 +5,7 @@
- Check Marketing Campaign Activities
+ Marketing Campaign: Campaign workitems processing1hours-1
@@ -14,9 +14,9 @@
-
+
- Check Segment
+ Marketing Campaign: Segment Sync1days-1
@@ -25,6 +25,6 @@
-
+
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 1c0e4075b13..7d1c8d3d2bf 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -17,20 +17,29 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_details_summary.py b/addons/point_of_sale/report/pos_details_summary.py
index 04e460ec6e5..2d1fd0b98c7 100644
--- a/addons/point_of_sale/report/pos_details_summary.py
+++ b/addons/point_of_sale/report/pos_details_summary.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -128,7 +128,7 @@ report_sxw.report_sxw('report.pos.details_summary',
'pos.order',
'addons/point_of_sale/report/pos_details_summary.rml',
parser=pos_details_summary,
- header=None)
+ header='internal')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_details_summary.rml b/addons/point_of_sale/report/pos_details_summary.rml
index 254f397b6b6..3981f389166 100644
--- a/addons/point_of_sale/report/pos_details_summary.rml
+++ b/addons/point_of_sale/report/pos_details_summary.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_lines.py b/addons/point_of_sale/report/pos_lines.py
index 3076e1b6741..ad855087cad 100644
--- a/addons/point_of_sale/report/pos_lines.py
+++ b/addons/point_of_sale/report/pos_lines.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
@@ -52,7 +52,7 @@ class pos_lines(report_sxw.rml_parse):
return res
-report_sxw.report_sxw('report.pos.lines', 'pos.order', 'addons/point_of_sale/report/pos_lines.rml', parser=pos_lines)
+report_sxw.report_sxw('report.pos.lines', 'pos.order', 'addons/point_of_sale/report/pos_lines.rml', parser=pos_lines,header='internal')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/point_of_sale/report/pos_lines.rml b/addons/point_of_sale/report/pos_lines.rml
index 5ff85f5afd1..0cc1c43520a 100644
--- a/addons/point_of_sale/report/pos_lines.rml
+++ b/addons/point_of_sale/report/pos_lines.rml
@@ -1,6 +1,6 @@
-
+
@@ -73,14 +73,14 @@
-
-
+
+
-
-
-
-
-
+
+
+
+
+
@@ -90,8 +90,8 @@
-
-
+
+
@@ -106,14 +106,18 @@
+
- [[repeatIn(objects,'o')]][[ setLang(o.partner_id.lang) ]]
+ Sales lines
+
+
+
@@ -283,4 +287,4 @@
-
+
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_payment_report.py b/addons/point_of_sale/report/pos_payment_report.py
index d2f05f85a06..3d82025da89 100644
--- a/addons/point_of_sale/report/pos_payment_report.py
+++ b/addons/point_of_sale/report/pos_payment_report.py
@@ -61,7 +61,7 @@ class pos_payment_report(report_sxw.rml_parse):
return self.total
-report_sxw.report_sxw('report.pos.payment.report', 'pos.order', 'addons/point_of_sale/report/pos_payment_report.rml', parser=pos_payment_report)
+report_sxw.report_sxw('report.pos.payment.report', 'pos.order', 'addons/point_of_sale/report/pos_payment_report.rml', parser=pos_payment_report,header='internal')
diff --git a/addons/point_of_sale/report/pos_payment_report.rml b/addons/point_of_sale/report/pos_payment_report.rml
index ebe30bdf3bc..c1980e9e209 100644
--- a/addons/point_of_sale/report/pos_payment_report.rml
+++ b/addons/point_of_sale/report/pos_payment_report.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_payment_report_date.py b/addons/point_of_sale/report/pos_payment_report_date.py
index af64e45cff4..38f87d533f2 100644
--- a/addons/point_of_sale/report/pos_payment_report_date.py
+++ b/addons/point_of_sale/report/pos_payment_report_date.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -59,7 +59,7 @@ class pos_payment_report_date(report_sxw.rml_parse):
return res
-report_sxw.report_sxw('report.pos.payment.report.date', 'pos.order', 'addons/point_of_sale/report/pos_payment_report_date.rml', parser=pos_payment_report_date)
+report_sxw.report_sxw('report.pos.payment.report.date', 'pos.order', 'addons/point_of_sale/report/pos_payment_report_date.rml', parser=pos_payment_report_date,header='internal')
diff --git a/addons/point_of_sale/report/pos_payment_report_date.rml b/addons/point_of_sale/report/pos_payment_report_date.rml
index f83d985b6b4..1f220e253ca 100644
--- a/addons/point_of_sale/report/pos_payment_report_date.rml
+++ b/addons/point_of_sale/report/pos_payment_report_date.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -10,35 +10,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -46,9 +40,8 @@
-
-
+
@@ -56,31 +49,24 @@
-
-
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
@@ -90,8 +76,8 @@
-
-
+
+
@@ -105,17 +91,18 @@
-
+
-
-
+ [[ repeatIn(objects,'order') ]]
+
-
+ Payment
+
-
+
[[ formatLang(pos_payment_date_total(data['form'])) or removeParentNode('blockTable')]]
-
+
+
+
+
-
+
\ No newline at end of file
diff --git a/addons/point_of_sale/report/pos_payment_report_user.py b/addons/point_of_sale/report/pos_payment_report_user.py
index e84b3b792cc..48ea148d8d1 100644
--- a/addons/point_of_sale/report/pos_payment_report_user.py
+++ b/addons/point_of_sale/report/pos_payment_report_user.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -58,7 +58,7 @@ class pos_payment_report_user(report_sxw.rml_parse):
return res
-report_sxw.report_sxw('report.pos.payment.report.user', 'pos.order', 'addons/point_of_sale/report/pos_payment_report_user.rml', parser=pos_payment_report_user)
+report_sxw.report_sxw('report.pos.payment.report.user', 'pos.order', 'addons/point_of_sale/report/pos_payment_report_user.rml', parser=pos_payment_report_user,header='internal')
diff --git a/addons/point_of_sale/report/pos_payment_report_user.rml b/addons/point_of_sale/report/pos_payment_report_user.rml
index f3a9311e186..fc874e52dac 100644
--- a/addons/point_of_sale/report/pos_payment_report_user.rml
+++ b/addons/point_of_sale/report/pos_payment_report_user.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml
index 313ba8cdb61..e722687f094 100644
--- a/addons/point_of_sale/report/pos_receipt.rml
+++ b/addons/point_of_sale/report/pos_receipt.rml
@@ -1,6 +1,6 @@
-
+
@@ -136,7 +136,7 @@
[[o.state=='cancel' and o.statement_ids and '-' or '']][['%.f' % line.qty ]]
-
+
[[o.state=='cancel' and o.statement_ids and '-' or '']][[ '%.2f' % net(line.id) ]] [[ line and line.discount == 0.0 and removeParentNode('font') ]] ([[ '%.2f' % line.discount ]]%)
diff --git a/addons/point_of_sale/report/pos_receipt_bis.rml b/addons/point_of_sale/report/pos_receipt_bis.rml
index 1080a69ea65..ab8af5ca999 100644
--- a/addons/point_of_sale/report/pos_receipt_bis.rml
+++ b/addons/point_of_sale/report/pos_receipt_bis.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
index 01fa0e4ac1e..32dea8dcd48 100644
--- a/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
+++ b/addons/point_of_sale/report/pos_receipt_with_remboursment.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
index 0eb0dba773a..4e3b8ec64e1 100644
--- a/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
+++ b/addons/point_of_sale/report/pos_receipt_without_remboursment.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_sales_user.py b/addons/point_of_sale/report/pos_sales_user.py
index b110e4e2d00..4032f035bdf 100644
--- a/addons/point_of_sale/report/pos_sales_user.py
+++ b/addons/point_of_sale/report/pos_sales_user.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -46,7 +46,7 @@ class pos_sales_user(report_sxw.rml_parse):
data = self.cr.dictfetchall()
return data
-report_sxw.report_sxw('report.pos.sales.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user.rml', parser=pos_sales_user)
+report_sxw.report_sxw('report.pos.sales.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user.rml', parser=pos_sales_user,header='internal')
diff --git a/addons/point_of_sale/report/pos_sales_user.rml b/addons/point_of_sale/report/pos_sales_user.rml
index b6a3dae9685..cb817035a46 100644
--- a/addons/point_of_sale/report/pos_sales_user.rml
+++ b/addons/point_of_sale/report/pos_sales_user.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_sales_user_today.py b/addons/point_of_sale/report/pos_sales_user_today.py
index 4362cc8928c..7c9b9b5a563 100644
--- a/addons/point_of_sale/report/pos_sales_user_today.py
+++ b/addons/point_of_sale/report/pos_sales_user_today.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -45,7 +45,7 @@ class pos_sales_user_today(report_sxw.rml_parse):
data = self.cr.dictfetchall()
return data
-report_sxw.report_sxw('report.pos.sales.user.today', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today.rml', parser=pos_sales_user_today)
+report_sxw.report_sxw('report.pos.sales.user.today', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today.rml', parser=pos_sales_user_today,header='internal')
diff --git a/addons/point_of_sale/report/pos_sales_user_today.rml b/addons/point_of_sale/report/pos_sales_user_today.rml
index 7db76e33ff4..39f6ddacb4c 100644
--- a/addons/point_of_sale/report/pos_sales_user_today.rml
+++ b/addons/point_of_sale/report/pos_sales_user_today.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.py b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
index bd728441be2..7f4a8f827f5 100644
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.py
+++ b/addons/point_of_sale/report/pos_sales_user_today_current_user.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -63,7 +63,7 @@ class pos_sales_user_today_current_user(report_sxw.rml_parse):
def _get_data_current_user_qty(self, user):
return self.qty
-report_sxw.report_sxw('report.pos.sales.user.today.current.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today_current_user.rml', parser=pos_sales_user_today_current_user)
+report_sxw.report_sxw('report.pos.sales.user.today.current.user', 'pos.order', 'addons/point_of_sale/report/pos_sales_user_today_current_user.rml', parser=pos_sales_user_today_current_user,header='internal')
diff --git a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml b/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
index 469fc5cdd33..475d045252b 100644
--- a/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
+++ b/addons/point_of_sale/report/pos_sales_user_today_current_user.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/point_of_sale/report/pos_users_product.py b/addons/point_of_sale/report/pos_users_product.py
index a61f753ce7d..3a284f1957f 100644
--- a/addons/point_of_sale/report/pos_users_product.py
+++ b/addons/point_of_sale/report/pos_users_product.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,7 +15,7 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
import time
@@ -61,4 +61,4 @@ class pos_user_product(report_sxw.rml_parse):
def _get_total(self):
return self.total
-report_sxw.report_sxw('report.pos.user.product', 'account.bank.statement', 'addons/statement/report/pos_users_product.rml', parser=pos_user_product)
+report_sxw.report_sxw('report.pos.user.product', 'account.bank.statement', 'addons/statement/report/pos_users_product.rml', parser=pos_user_product,header='internal')
diff --git a/addons/point_of_sale/report/pos_users_product.rml b/addons/point_of_sale/report/pos_users_product.rml
index cbb309ceef2..ef911861d85 100644
--- a/addons/point_of_sale/report/pos_users_product.rml
+++ b/addons/point_of_sale/report/pos_users_product.rml
@@ -1,6 +1,6 @@
-
+
diff --git a/addons/process/i18n/tr.po b/addons/process/i18n/tr.po
index 559379cdc7f..f8f839755e8 100644
--- a/addons/process/i18n/tr.po
+++ b/addons/process/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:41+0000\n"
+"PO-Revision-Date: 2010-09-08 09:03+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:55+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: process
diff --git a/addons/process/process_view.xml b/addons/process/process_view.xml
index 2b94827ce1a..b743c82f84f 100644
--- a/addons/process/process_view.xml
+++ b/addons/process/process_view.xml
@@ -15,10 +15,10 @@
form
@@ -27,9 +27,9 @@
diff --git a/addons/product_expiry/i18n/de.po b/addons/product_expiry/i18n/de.po
index 23c14f19781..12f1b502c7a 100644
--- a/addons/product_expiry/i18n/de.po
+++ b/addons/product_expiry/i18n/de.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2009-06-30 15:09+0000\n"
-"PO-Revision-Date: 2010-08-23 06:40+0000\n"
+"PO-Revision-Date: 2010-08-29 10:20+0000\n"
"Last-Translator: Ferdinand-chricar \n"
"Language-Team: German \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-08-25 03:56+0000\n"
+"X-Launchpad-Export-Date: 2010-08-30 03:59+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product_expiry
@@ -42,8 +42,8 @@ msgstr "Produkt Ablaufdatum"
msgid ""
"Error: The default UOM and the purchase UOM must be in the same category."
msgstr ""
-"Fehler: Die Standard Mengeneinheit sowie die Beschaffungs Mengeneinheit muss "
-"in derselben Kategorie sein."
+"Fehler: Die Standard Mengeneinheit sowie die Beschaffungs ME muss in "
+"derselben Kategorie sein."
#. module: product_expiry
#: constraint:ir.ui.view:0
@@ -93,7 +93,9 @@ msgstr "Zeitpunkte"
#. module: product_expiry
#: constraint:product.template:0
msgid "Error: UOS must be in a different category than the UOM"
-msgstr "Fehler: UOS sollte in einer anderen Kategorie sein als UOM"
+msgstr ""
+"Fehler: Die Verkaufseinheit sollte in einer anderen Kategorie sein als die "
+"Mengeneinheit"
#. module: product_expiry
#: field:stock.production.lot,life_date:0
diff --git a/addons/product_expiry/i18n/hr.po b/addons/product_expiry/i18n/hr.po
new file mode 100644
index 00000000000..3a9c9aa570f
--- /dev/null
+++ b/addons/product_expiry/i18n/hr.po
@@ -0,0 +1,162 @@
+# Croatian 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-06-30 15:09+0000\n"
+"PO-Revision-Date: 2010-09-08 21:19+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Croatian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_expiry
+#: field:product.product,life_time:0
+msgid "Product lifetime"
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_from_product_template
+msgid "Ham"
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_lait_product_template
+msgid "Cow milk"
+msgstr ""
+
+#. module: product_expiry
+#: model:ir.module.module,shortdesc:product_expiry.module_meta_information
+msgid "Products date of expiry"
+msgstr ""
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid ""
+"Error: The default UOM and the purchase UOM must be in the same category."
+msgstr ""
+
+#. module: product_expiry
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: product_expiry
+#: help:stock.production.lot,life_date:0
+msgid "The date the lot may become dangerous and should not be consumed."
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,removal_date:0
+msgid "Removal Date"
+msgstr ""
+
+#. module: product_expiry
+#: model:ir.module.module,description:product_expiry.module_meta_information
+msgid ""
+"Track different dates on products and production lots:\n"
+" - end of life\n"
+" - best before date\n"
+" - removal date\n"
+" - alert date\n"
+"Used, for example, in food industries."
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_pain_product_template
+msgid "Bread"
+msgstr ""
+
+#. module: product_expiry
+#: model:product.uom,name:product_expiry.product_uom_ltr
+#: model:product.uom.categ,name:product_expiry.product_uom_categ_vol
+msgid "LTR"
+msgstr ""
+
+#. module: product_expiry
+#: view:product.product:0
+#: view:stock.production.lot:0
+msgid "Dates"
+msgstr ""
+
+#. module: product_expiry
+#: constraint:product.template:0
+msgid "Error: UOS must be in a different category than the UOM"
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,life_date:0
+msgid "End of Life Date"
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,use_date:0
+msgid "Best before Date"
+msgstr ""
+
+#. module: product_expiry
+#: help:stock.production.lot,use_date:0
+msgid "The date the lot starts deteriorating without becoming dangerous."
+msgstr ""
+
+#. module: product_expiry
+#: model:product.template,name:product_expiry.product_product_jambon_product_template
+msgid "French cheese Camenbert"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,removal_time:0
+msgid "The number of days before a production lot should be removed."
+msgstr ""
+
+#. module: product_expiry
+#: field:product.product,use_time:0
+#: field:stock.production.lot,dlc:0
+msgid "Product usetime"
+msgstr ""
+
+#. module: product_expiry
+#: field:stock.production.lot,alert_date:0
+msgid "Alert Date"
+msgstr ""
+
+#. module: product_expiry
+#: field:product.product,removal_time:0
+msgid "Product removal time"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,use_time:0
+msgid ""
+"The number of days before a production lot starts deteriorating without "
+"becoming dangerous."
+msgstr ""
+
+#. module: product_expiry
+#: constraint:product.product:0
+msgid "Error: Invalid ean code"
+msgstr ""
+
+#. module: product_expiry
+#: help:product.product,life_time:0
+msgid ""
+"The number of days before a production lot may become dangerous and should "
+"not be consumed."
+msgstr ""
+
+#. module: product_expiry
+#: help:stock.production.lot,removal_date:0
+msgid "The date the lot should be removed."
+msgstr ""
+
+#. module: product_expiry
+#: field:product.product,alert_time:0
+msgid "Product alert time"
+msgstr ""
diff --git a/addons/product_manufacturer/i18n/hr.po b/addons/product_manufacturer/i18n/hr.po
new file mode 100644
index 00000000000..33e2c1a2d7f
--- /dev/null
+++ b/addons/product_manufacturer/i18n/hr.po
@@ -0,0 +1,93 @@
+# Croatian 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: 2010-08-12 12:35+0000\n"
+"PO-Revision-Date: 2010-09-08 21:19+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Croatian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_manufacturer
+#: model:ir.module.module,description:product_manufacturer.module_meta_information
+msgid "A module that add manufacturers and attributes on the product form"
+msgstr ""
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pref:0
+msgid "Manufacturer Product Code"
+msgstr ""
+
+#. module: product_manufacturer
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+msgid "Product Template Name"
+msgstr ""
+
+#. module: product_manufacturer
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_manufacturer_attribute
+msgid "Product attributes"
+msgstr ""
+
+#. module: product_manufacturer
+#: view:product.manufacturer.attribute:0
+#: view:product.product:0
+msgid "Product Attributes"
+msgstr ""
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,name:0
+msgid "Attribute"
+msgstr ""
+
+#. module: product_manufacturer
+#: model:ir.model,name:product_manufacturer.model_product_product
+#: field:product.manufacturer.attribute,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: product_manufacturer
+#: field:product.manufacturer.attribute,value:0
+msgid "Value"
+msgstr ""
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,attribute_ids:0
+msgid "Attributes"
+msgstr ""
+
+#. module: product_manufacturer
+#: model:ir.module.module,shortdesc:product_manufacturer.module_meta_information
+msgid "Products Attributes & Manufacturers"
+msgstr ""
+
+#. module: product_manufacturer
+#: field:product.product,manufacturer_pname:0
+msgid "Manufacturer Product Name"
+msgstr ""
+
+#. module: product_manufacturer
+#: view:product.product:0
+#: field:product.product,manufacturer:0
+msgid "Manufacturer"
+msgstr ""
diff --git a/addons/product_margin/i18n/pt_BR.po b/addons/product_margin/i18n/pt_BR.po
index fc8aac36280..db83401c9d4 100644
--- a/addons/product_margin/i18n/pt_BR.po
+++ b/addons/product_margin/i18n/pt_BR.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:26+0000\n"
+"PO-Revision-Date: 2010-09-08 09:10+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product_margin
diff --git a/addons/product_margin/i18n/tr.po b/addons/product_margin/i18n/tr.po
index 1f746094e89..9c590688e3e 100644
--- a/addons/product_margin/i18n/tr.po
+++ b/addons/product_margin/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 08:04+0000\n"
+"PO-Revision-Date: 2010-09-08 09:14+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: product_margin
diff --git a/addons/product_visible_discount/i18n/hr.po b/addons/product_visible_discount/i18n/hr.po
new file mode 100644
index 00000000000..6f09b2b49a6
--- /dev/null
+++ b/addons/product_visible_discount/i18n/hr.po
@@ -0,0 +1,46 @@
+# Croatian 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-03-25 12:11+0000\n"
+"PO-Revision-Date: 2010-09-08 21:19+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Croatian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: product_visible_discount
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: product_visible_discount
+#: model:ir.module.module,description:product_visible_discount.module_name_translation
+msgid ""
+"\n"
+" This module lets you calculate discounts on Sale Order lines and Invoice "
+"lines base on the partner's pricelist.\n"
+" To this end, a new check box named \"Visible Discount\" is added to the "
+"pricelist form.\n"
+" Example:\n"
+" For the product PC1 and the partner \"Asustek\": if listprice=450, "
+"and the price calculated using Asustek's pricelist is 225\n"
+" If the check box is checked, we will have on the sale order line: "
+"Unit price=450, Discount=50,00, Net price=225\n"
+" If the check box is unchecked, we will have on Sale Order and "
+"Invoice lines: Unit price=225, Discount=0,00, Net price=225\n"
+" "
+msgstr ""
+
+#. module: product_visible_discount
+#: field:product.pricelist,visible_discount:0
+msgid "Visible Discount"
+msgstr ""
diff --git a/addons/profile_tools/installer.py b/addons/profile_tools/installer.py
index 1a793352b6e..1e2ff655353 100644
--- a/addons/profile_tools/installer.py
+++ b/addons/profile_tools/installer.py
@@ -25,10 +25,11 @@ class misc_tools_installer(osv.osv_memory):
_inherit = 'res.config.installer'
_columns = {
- 'lunch':fields.boolean('Lunch Orders',help='Installs tools for lunch module'),
- 'subscription':fields.boolean('Recurring Documents',help='Installs tools for subscription module'),
- 'survey':fields.boolean('Survey',help='Installs tools for survey module'),
- 'audittrail':fields.boolean('Audit Trail',help='Installs tools for audittrail module'),
+ 'lunch':fields.boolean('Lunch',help='Helps to manage Lunch Orders'),
+ 'subscription':fields.boolean('Recurring Documents',help='Helps to add subscription on documents'),
+ 'survey':fields.boolean('Survey',help='Manages Custom Surveys'),
+ 'idea':fields.boolean('Idea',help='Manages ideas and votes'),
+ 'audittrail':fields.boolean('Audit Trail',help="Lets you to track user's operations on specific Objects."),
}
_defaults = {
'lunch': True,
diff --git a/addons/profile_tools/misc_tools_installer.xml b/addons/profile_tools/misc_tools_installer.xml
index 64bb428e278..2fcb2a3e0c4 100644
--- a/addons/profile_tools/misc_tools_installer.xml
+++ b/addons/profile_tools/misc_tools_installer.xml
@@ -10,8 +10,8 @@
Tools Modules Configuration
-
-
+
+
@@ -19,7 +19,7 @@
- Here are a few useful applications which, while they do not directly contribute to your business, can help you to improve your organization.
+ Here are applications which, while they do not directly contribute to your business, can help you to improve your organization.Configure
@@ -28,6 +28,7 @@
+
@@ -48,16 +49,5 @@
3
-
- ir.actions.todo
- misc_installer_action_replace
- tree
-
-
-
-
-
-
-
diff --git a/addons/project/__openerp__.py b/addons/project/__openerp__.py
index b0e3880c243..3177744ea9c 100644
--- a/addons/project/__openerp__.py
+++ b/addons/project/__openerp__.py
@@ -31,14 +31,14 @@
work done on tasks, eso. It is able to render planning, order tasks, eso.
Dashboard for project members that includes:
* List of my open tasks
- * List of messages
* Members list of project
- * Issues
""",
"init_xml": [],
"update_xml": [
"security/project_security.xml",
"wizard/project_task_delegate_view.xml",
+ "wizard/project_task_close_view.xml",
+ "wizard/project_task_reevaluate_view.xml",
"security/ir.model.access.csv",
"project_data.xml",
"project_view.xml",
@@ -46,7 +46,6 @@ work done on tasks, eso. It is able to render planning, order tasks, eso.
"project_installer.xml",
"res_partner_view.xml",
"report/project_report_view.xml",
- "wizard/project_close_task_view.xml",
"board_project_view.xml",
'board_project_manager_view.xml'
],
diff --git a/addons/project/board_project_view.xml b/addons/project/board_project_view.xml
index 661a67f561d..c3b4b0c8000 100644
--- a/addons/project/board_project_view.xml
+++ b/addons/project/board_project_view.xml
@@ -78,17 +78,6 @@
tree,form[('type','=','Project')]
-
-
-
-
- Messages
- project.message
- form
- tree,form
-
-
-
board.project.formboard.board
diff --git a/addons/project/i18n/fr.po b/addons/project/i18n/fr.po
index 21e0b999cfe..6c10f457c6c 100644
--- a/addons/project/i18n/fr.po
+++ b/addons/project/i18n/fr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 09:15+0000\n"
-"Last-Translator: mga (Open ERP) \n"
+"PO-Revision-Date: 2010-09-02 07:22+0000\n"
+"Last-Translator: Quentin THEURET \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-08-12 03:40+0000\n"
+"X-Launchpad-Export-Date: 2010-09-03 03:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
@@ -49,7 +49,7 @@ msgstr "Tâche projet"
#. module: project
#: model:process.transition,name:project.process_transition_opendonetask0
msgid "Open Done Task"
-msgstr "Ouvrir les tâches ouvertes"
+msgstr "Rouvrir les tâches terminées"
#. module: project
#: constraint:ir.actions.act_window:0
@@ -64,7 +64,7 @@ msgstr "Heures à Validé"
#. module: project
#: field:project.project,progress_rate:0
msgid "Progress"
-msgstr "Achevé"
+msgstr "Avancement"
#. module: project
#: help:config.compute.remaining,remaining_hours:0
@@ -79,7 +79,7 @@ msgstr ""
#. module: project
#: field:project.project,child_id:0
msgid "Subproject"
-msgstr "Sous projet"
+msgstr "Sous-projet"
#. module: project
#: field:project.project,members:0
@@ -114,7 +114,7 @@ msgstr ""
#. module: project
#: field:project.task,priority:0
msgid "Importance"
-msgstr "Important"
+msgstr "Priorité"
#. module: project
#: view:config.compute.remaining:0
@@ -276,7 +276,7 @@ msgstr "Tâche terminée"
#. module: project
#: model:process.node,note:project.process_node_donetask0
msgid "Task is Completed"
-msgstr "La tâche est complète"
+msgstr "La tâche est terminée"
#. module: project
#: model:process.transition,note:project.process_transition_delegate0
@@ -787,7 +787,7 @@ msgstr "Mois"
#. module: project
#: model:process.transition,note:project.process_transition_opendonetask0
msgid "When task is completed, it will come into the done state."
-msgstr "Quand une tâche est complète, elle deviendra dans l'état terminer"
+msgstr "Quand une tâche est complète, elle passera à l'état terminé"
#. module: project
#: field:project.task.work,date:0
@@ -1004,7 +1004,7 @@ msgstr "Fermer (sans mail)"
#. module: project
#: help:project.task.delegate,init,prefix:0
msgid "New title of your own task to validate the work done."
-msgstr "Nouveau titre de votre tâche pour valider le travail terminer."
+msgstr "Nouveau titre de votre tâche pour valider le travail effectué."
#. module: project
#: field:project.task,progress:0
@@ -1166,7 +1166,7 @@ msgstr "Date d'arrêt: %(date_stop)s"
#. module: project
#: field:project.project,date_end:0
msgid "Expected End"
-msgstr "Fin attendu"
+msgstr "Fin prévue"
#. module: project
#: model:process.node,note:project.process_node_taskbydelegate0
@@ -1216,7 +1216,7 @@ msgstr "Tableau de bord de projet"
#. module: project
#: model:ir.module.module,shortdesc:project.module_meta_information
msgid "Board for project users"
-msgstr ""
+msgstr "Tableau de bord pour les utilisateurs de projet"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_pipeline_user
@@ -1279,7 +1279,7 @@ msgstr "Mon pipeline"
#. module: project
#: view:board.board:0
msgid "My Timesheet"
-msgstr ""
+msgstr "Ma feuille de présence"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_tree_month
@@ -1428,7 +1428,7 @@ msgstr ""
#. module: project
#: field:report.task.user.pipeline.open,task_nbr:0
msgid "Task Number"
-msgstr ""
+msgstr "Numéro de tâche"
#. module: project
#: model:ir.model,name:project.model_report_timesheet_task_user
@@ -1448,7 +1448,7 @@ msgstr ""
#. module: project
#: model:ir.model,name:project.model_report_closed_task
msgid "Closed Task Report"
-msgstr ""
+msgstr "Rapport des tâches terminées"
#. module: project
#: field:report.timesheet.task.user,timesheet_hrs:0
@@ -1458,4 +1458,4 @@ msgstr ""
#. module: project
#: view:report.closed.task:0
msgid "Closed Tasks"
-msgstr ""
+msgstr "Tâches terminées"
diff --git a/addons/project/i18n/lt.po b/addons/project/i18n/lt.po
index 7d8c21eba90..635fd5abcac 100644
--- a/addons/project/i18n/lt.po
+++ b/addons/project/i18n/lt.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 06:29+0000\n"
+"PO-Revision-Date: 2010-09-08 09:07+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
diff --git a/addons/project/i18n/pt_BR.po b/addons/project/i18n/pt_BR.po
index e39cd3b3af0..a6196b26e5a 100644
--- a/addons/project/i18n/pt_BR.po
+++ b/addons/project/i18n/pt_BR.po
@@ -8,13 +8,13 @@ msgstr ""
"Project-Id-Version: pt_BR\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-03 09:20+0000\n"
-"Last-Translator: mga (Open ERP) \n"
+"PO-Revision-Date: 2010-09-01 06:55+0000\n"
+"Last-Translator: OpenERP Administrators \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-08-12 03:41+0000\n"
+"X-Launchpad-Export-Date: 2010-09-02 03:51+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
@@ -1183,35 +1183,35 @@ msgstr "Projetos em execução"
#. module: project
#: view:board.board:0
msgid "My project's planning"
-msgstr ""
+msgstr "Meu planejamento do projeto"
#. module: project
#: view:hr_timesheet_sheet.sheet:0
#: model:ir.actions.act_window,name:project.act_hr_timesheet_sheet
msgid "Timesheets"
-msgstr ""
+msgstr "Planilhas de Horas"
#. module: project
#: model:ir.actions.act_window,name:project.action_view_task_tree_deadline
msgid "My Task's Deadlines"
-msgstr ""
+msgstr "Meus prazos finais das tarefas"
#. module: project
#: view:board.board:0
#: model:ir.actions.act_window,name:project.action_view_board_note_tree
msgid "Public Notes"
-msgstr ""
+msgstr "Anotações Públicas"
#. module: project
#: model:ir.actions.act_window,name:project.open_board_project
#: model:ir.ui.menu,name:project.menu_board_project
msgid "Project Dashboard"
-msgstr ""
+msgstr "Painel de projeto"
#. module: project
#: model:ir.module.module,shortdesc:project.module_meta_information
msgid "Board for project users"
-msgstr ""
+msgstr "Quadro para usuários do projeto"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_pipeline_user
@@ -1221,50 +1221,50 @@ msgstr ""
#. module: project
#: view:board.board:0
msgid "My Planning"
-msgstr ""
+msgstr "Meu Planejamento"
#. module: project
#: view:board.board:0
#: model:ir.actions.act_window,name:project.act_my_account
msgid "My accounts to invoice"
-msgstr ""
+msgstr "Minhas contas a faturar"
#. module: project
#: model:ir.actions.act_window,name:project.open_board_project_manager
#: model:ir.ui.menu,name:project.menu_board_project_manager
msgid "Project Manager Dashboard"
-msgstr ""
+msgstr "Painel de Gerência de Projeto"
#. module: project
#: view:board.board:0
msgid "My Deadlines"
-msgstr ""
+msgstr "Meus Prazos Finais"
#. module: project
#: view:board.board:0
msgid "User's timesheets"
-msgstr ""
+msgstr "Planilha de horas do usuário"
#. module: project
#: view:board.board:0
msgid "Project manager board"
-msgstr ""
+msgstr "Quadro de Gestão do Projeto"
#. module: project
#: view:board.board:0
#: model:ir.actions.act_window,name:project.action_view_task_tree
msgid "My Open Tasks"
-msgstr ""
+msgstr "Minhas Tarefas Abertas"
#. module: project
#: view:board.board:0
msgid "My Board"
-msgstr ""
+msgstr "Meu Quadro"
#. module: project
#: view:board.board:0
msgid "My tasks board"
-msgstr ""
+msgstr "Meu quadro de tarefas"
#. module: project
#: view:board.board:0
@@ -1274,62 +1274,62 @@ msgstr ""
#. module: project
#: view:board.board:0
msgid "My Timesheet"
-msgstr ""
+msgstr "Minha Planilha de Horas"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_tree_month
#: model:ir.ui.menu,name:project.menu_project_task_tree_month
msgid "Tasks finished by project (this month)"
-msgstr ""
+msgstr "Tarefas concluídas por projeto (este mês)"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_user_tree
#: model:ir.ui.menu,name:project.menu_project_task_user_tree
msgid "Tasks Closed by Project and User"
-msgstr ""
+msgstr "Tarefas Encerradas por Projeto e Usuário"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_user_tree_month
#: model:ir.ui.menu,name:project.menu_project_task_user_tree_month
msgid "Tasks finished by project and user (this month)"
-msgstr ""
+msgstr "Tarefas finalizadas por projeto e usuário (este mês)"
#. module: project
#: field:report.project.task,hours_effective:0
#: field:report.project.task.user,hours_effective:0
msgid "Effective Hours"
-msgstr ""
+msgstr "Horas efetivas"
#. module: project
#: model:ir.model,name:project.model_report_project_task_user
msgid "Tasks by user and project"
-msgstr ""
+msgstr "Tarefas por usuário e projeto"
#. module: project
#: field:report.project.task,task_closed:0
#: field:report.project.task.user,task_closed:0
msgid "Task Closed"
-msgstr ""
+msgstr "Tarefas Encerradas"
#. module: project
#: view:report.project.task:0
msgid "Tasks by Project"
-msgstr ""
+msgstr "Tarefas por Projeto"
#. module: project
#: model:ir.module.module,shortdesc:project.module_meta_information
msgid "Sales Management - Reporting"
-msgstr ""
+msgstr "Gerenciamento de Vendas - Relatório"
#. module: project
#: field:report.project.task.user,user_id:0
msgid "User"
-msgstr ""
+msgstr "Usuário"
#. module: project
#: view:report.project.task.user:0
msgid "Tasks by Project and User"
-msgstr ""
+msgstr "Tarefas por Projeto e Usuário"
#. module: project
#: model:ir.ui.menu,name:project.next_id_63
@@ -1339,19 +1339,19 @@ msgstr "Este mes"
#. module: project
#: view:report.project.task.user:0
msgid "Tasks by projects and users"
-msgstr ""
+msgstr "Tarefas por projeto e usuário"
#. module: project
#: field:report.project.task,closing_days:0
#: field:report.project.task.user,closing_days:0
msgid "Avg Closing Delay"
-msgstr ""
+msgstr "Atraso Médio no Encerramento"
#. module: project
#: model:ir.model,name:project.model_report_project_task
#: view:report.project.task:0
msgid "Tasks by project"
-msgstr ""
+msgstr "Tarefas por projeto"
#. module: project
#: field:report.project.task,hours_delay:0
@@ -1362,41 +1362,41 @@ msgstr ""
#. module: project
#: field:report.project.task,name:0 field:report.project.task.user,name:0
msgid "Month"
-msgstr ""
+msgstr "Mês"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_tree
#: model:ir.ui.menu,name:project.menu_project_task_tree
msgid "Tasks Closed by Project"
-msgstr ""
+msgstr "Tarefas Encerradas por Projeto"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task
#: model:ir.ui.menu,name:project.menu_project_task_user_tree
#: view:report.task.user.pipeline.open:0
msgid "Tasks by User"
-msgstr ""
+msgstr "Tarefas por Usuário"
#. module: project
#: selection:report.task.user.pipeline.open,task_state:0
msgid "No Task"
-msgstr ""
+msgstr "Nenhuma tarefa"
#. module: project
#: model:ir.module.module,shortdesc:project.module_meta_information
msgid "Report on tasks by user for projects"
-msgstr ""
+msgstr "Relatório para projetos de tarefas por usuário"
#. module: project
#: model:ir.actions.act_window,name:project.action_report_timesheet_task_user
#: model:ir.ui.menu,name:project.menu_timesheet_task_user
msgid "Timesheet / Task Hours Per Month"
-msgstr ""
+msgstr "Planilha de Horas / Horas por Tarefa por Mês"
#. module: project
#: field:report.task.user.pipeline.open,company_id:0
msgid "Company"
-msgstr ""
+msgstr "Empresa"
#. module: project
#: model:ir.ui.menu,name:project.next_id_57
@@ -1412,18 +1412,18 @@ msgstr ""
#. module: project
#: model:ir.actions.act_window,name:project.action_closed_task_board
msgid "Task Closed Within Past 15 Days"
-msgstr ""
+msgstr "Tarefas Encerradas a menos de 15 Dias"
#. module: project
#: field:report.task.user.pipeline.open,task_hrs:0
#: field:report.timesheet.task.user,task_hrs:0
msgid "Task Hours"
-msgstr ""
+msgstr "Horas-Tarefa"
#. module: project
#: field:report.task.user.pipeline.open,task_nbr:0
msgid "Task Number"
-msgstr ""
+msgstr "Número da Tarefa"
#. module: project
#: model:ir.model,name:project.model_report_timesheet_task_user
@@ -1433,24 +1433,24 @@ msgstr ""
#. module: project
#: view:report.timesheet.task.user:0
msgid "Timesheet/Task hours Report Per Month"
-msgstr ""
+msgstr "Relatório de Planilha de Horas/Horas-Tarefa por Mês"
#. module: project
#: field:report.task.user.pipeline.open,task_progress:0
msgid "Task Progress"
-msgstr ""
+msgstr "Progresso da Tarefa"
#. module: project
#: model:ir.model,name:project.model_report_closed_task
msgid "Closed Task Report"
-msgstr ""
+msgstr "Relatório de Tarefas Encerradas"
#. module: project
#: field:report.timesheet.task.user,timesheet_hrs:0
msgid "Timesheet Hours"
-msgstr ""
+msgstr "Quantidade de Horas da Planilha de Horas"
#. module: project
#: view:report.closed.task:0
msgid "Closed Tasks"
-msgstr ""
+msgstr "Tarefas Encerradas"
diff --git a/addons/project/i18n/ru.po b/addons/project/i18n/ru.po
index 73de4c144d3..2818c7e94ef 100644
--- a/addons/project/i18n/ru.po
+++ b/addons/project/i18n/ru.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:34+0000\n"
+"PO-Revision-Date: 2010-09-08 09:10+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
diff --git a/addons/project/i18n/tr.po b/addons/project/i18n/tr.po
index 8f0c6e4836f..bb0e3d523b7 100644
--- a/addons/project/i18n/tr.po
+++ b/addons/project/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:37+0000\n"
+"PO-Revision-Date: 2010-09-08 09:09+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:44+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project
diff --git a/addons/project/installer.py b/addons/project/installer.py
index 53a94dd7039..ef2c2b5e8c8 100644
--- a/addons/project/installer.py
+++ b/addons/project/installer.py
@@ -47,7 +47,7 @@ class project_installer(osv.osv_memory):
'project_crm': fields.boolean('Issues Tracker',
help="Automatically synchronizes project tasks and crm cases."),
# Methodologies
- 'scrum': fields.boolean('SCRUM',
+ 'project_scrum': fields.boolean('SCRUM',
help="Implements and tracks the concepts and task types defined "
"in the SCRUM methodology."),
'project_gtd': fields.boolean('Getting Things Done',
@@ -61,4 +61,4 @@ class project_installer(osv.osv_memory):
project_installer()
-# 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/project.py b/addons/project/project.py
index ffba90d55c9..0b9584655a8 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -25,6 +25,9 @@ from datetime import datetime, date
from tools.translate import _
from osv import fields, osv
+from tools import email_send as email
+
+from operator import itemgetter
class project_task_type(osv.osv):
_name = 'project.task.type'
@@ -171,7 +174,7 @@ class project(osv.osv):
'planned_hours': fields.function(_progress_rate, multi="progress", method=True, string='Planned Time', help="Sum of planned hours of all tasks related to this project and its child projects."),
'effective_hours': fields.function(_progress_rate, multi="progress", method=True, string='Time Spent', help="Sum of spent hours of all tasks related to this project and its child projects."),
'total_hours': fields.function(_progress_rate, multi="progress", method=True, string='Total Time', help="Sum of total hours of all tasks related to this project and its child projects."),
- 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', help="Percent of tasks closed according to the total of tasks todo."),
+ 'progress_rate': fields.function(_progress_rate, multi="progress", method=True, string='Progress', type='float', group_operator="avg", help="Percent of tasks closed according to the total of tasks todo."),
'warn_customer': fields.boolean('Warn Partner', help="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.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_header': fields.text('Mail Header', help="Header added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
'warn_footer': fields.text('Mail Footer', help="Footer added at the beginning of the email for the warning message sent to the customer when a task is closed.", states={'close':[('readonly',True)], 'cancelled':[('readonly',True)]}),
@@ -394,7 +397,7 @@ class task(osv.osv):
if task['date_start'] > task['date_end']:
return False
return True
-
+
def _is_template(self, cr, uid, ids, field_name, arg, context=None):
res = {}
for task in self.browse(cr, uid, ids, context=context):
@@ -427,7 +430,7 @@ class task(osv.osv):
'effective_hours': fields.function(_hours_get, method=True, string='Hours Spent', multi='hours', store=True, help="Computed using the sum of the task work done."),
'remaining_hours': fields.float('Remaining Hours', digits=(16,2), help="Total remaining time, can be re-estimated periodically by the assignee of the task."),
'total_hours': fields.function(_hours_get, method=True, string='Total Hours', multi='hours', store=True, help="Computed as: Time Spent + Remaining Time."),
- 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', store=True, help="Computed as: Time Spent / Total Time."),
+ 'progress': fields.function(_hours_get, method=True, string='Progress (%)', multi='hours', group_operator="avg", store=True, help="Computed as: Time Spent / Total Time."),
'delay_hours': fields.function(_hours_get, method=True, string='Delay Hours', multi='hours', store=True, help="Computed as difference of the time estimated by the project manager and the real time to close the task."),
'user_id': fields.many2one('res.users', 'Assigned to'),
@@ -450,9 +453,34 @@ class task(osv.osv):
}
_order = "sequence, priority, date_start, id"
+
+ def _check_recursion(self, cr, uid, ids):
+ obj_task = self.browse(cr, uid, ids[0])
+ parent_ids = [x.id for x in obj_task.parent_ids]
+ children_ids = [x.id for x in obj_task.child_ids]
+
+ if (obj_task.id in children_ids) or (obj_task.id in parent_ids):
+ return False
+
+ while(ids):
+ cr.execute('SELECT DISTINCT task_id '\
+ 'FROM project_task_parent_rel '\
+ 'WHERE parent_id IN %s', (tuple(ids),))
+ child_ids = map(itemgetter(0), cr.fetchall())
+ c_ids = child_ids
+ if (list(set(parent_ids).intersection(set(c_ids)))) or (obj_task.id in c_ids):
+ return False
+ while len(c_ids):
+ s_ids = self.search(cr, uid, [('parent_ids', 'in', c_ids)])
+ if (list(set(parent_ids).intersection(set(s_ids)))):
+ return False
+ c_ids = s_ids
+ ids = child_ids
+ return True
_constraints = [
- (_check_dates, 'Error! Task start-date must be lower then task end-date.', ['date_start', 'date_end'])
+ (_check_dates, 'Error! Task start-date must be lower then task end-date.', ['date_start', 'date_end']),
+ (_check_recursion, _('Error ! You cannot create recursive tasks.'), ['parent_ids'])
]
#
# Override view according to the company definition
@@ -486,18 +514,17 @@ class task(osv.osv):
res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
return res
- def do_close(self, cr, uid, ids, *args):
- mail_send = False
- mod_obj = self.pool.get('ir.model.data')
+ def do_close(self, cr, uid, ids, context=None):
+ """
+ Close Task
+ """
+ if context is None:
+ context = {}
request = self.pool.get('res.request')
- tasks = self.browse(cr, uid, ids)
- task_id = ids[0]
- cntx = {}
- if len(args):
- cntx = args[0]
- for task in tasks:
+ for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
if project:
+ # Send request to project manager
if project.warn_manager and project.user_id and (project.user_id.id != uid):
request.create(cr, uid, {
'name': _("Task '%s' closed") % task.name,
@@ -508,12 +535,7 @@ class task(osv.osv):
'ref_doc1': 'project.task,%d'% (task.id,),
'ref_doc2': 'project.project,%d'% (project.id,),
})
- elif (project.warn_manager or project.warn_customer) and cntx.get('mail_send',True):
- cntx.update({'send_manager': project.warn_manager, 'send_partner': project.warn_customer})
- mail_send = True
- message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
- self.log(cr, uid, task.id, message)
-
+
for parent_id in task.parent_ids:
if parent_id.state in ('pending','draft'):
reopen = True
@@ -522,29 +544,16 @@ class task(osv.osv):
reopen = False
if reopen:
self.do_reopen(cr, uid, [parent_id.id])
- if mail_send:
- model_data_ids = mod_obj.search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_project_close_task')])
- resource_id = mod_obj.read(cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
- cntx.update({'task_id': task_id})
- return {
- 'name': _('Email Send to Customer'),
- 'view_type': 'form',
- 'context': cntx, # improve me
- 'view_mode': 'tree,form',
- 'res_model': 'close.task',
- 'views': [(resource_id,'form')],
- 'type': 'ir.actions.act_window',
- 'target': 'new',
- 'nodestroy': True
- }
- else:
- self.write(cr, uid, [task_id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
- return False
+ self.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
+ message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
+ self.log(cr, uid, task.id, message)
+ return True
- def do_reopen(self, cr, uid, ids, *args):
+ def do_reopen(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
request = self.pool.get('res.request')
- tasks = self.browse(cr, uid, ids)
- for task in tasks:
+ for task in self.browse(cr, uid, ids, context=context):
project = task.project_id
if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid):
request.create(cr, uid, {
@@ -592,6 +601,40 @@ class task(osv.osv):
self.write(cr, uid, ids, {'state': 'draft'})
return True
+ def do_delegate(self, cr, uid, task_id, delegate_data={}, context=None):
+ """
+ Delegate Task to another users.
+ """
+ if context is None:
+ context = {}
+ task = self.browse(cr, uid, task_id, context=context)
+ new_task_id = self.copy(cr, uid, task.id, {
+ 'name': delegate_data['name'],
+ 'user_id': delegate_data['user_id'],
+ 'planned_hours': delegate_data['planned_hours'],
+ 'remaining_hours': delegate_data['planned_hours'],
+ 'parent_ids': [(6, 0, [task.id])],
+ 'state': 'draft',
+ 'description': delegate_data['new_task_description'] or '',
+ 'child_ids': [],
+ 'work_ids': []
+ }, context)
+ newname = delegate_data['prefix'] or ''
+ self.write(cr, uid, [task.id], {
+ 'remaining_hours': delegate_data['planned_hours_me'],
+ 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0),
+ 'name': newname,
+ }, context)
+ if delegate_data['state'] == 'pending':
+ self.do_pending(cr, uid, [task.id], context)
+ else:
+ self.do_close(cr, uid, [task.id], context)
+ user_pool = self.pool.get('res.users')
+ delegrate_user = user_pool.browse(cr, uid, delegate_data['user_id'], context=context)
+ message = _('Task ') + " '" + delegate_data['name'] + "' "+ _("is Delegated to User:") +" '"+ delegrate_user.name +"' "
+ self.log(cr, uid, task.id, message)
+ return True
+
def do_pending(self, cr, uid, ids, *args):
self.write(cr, uid, ids, {'state': 'pending'})
for (id, name) in self.name_get(cr, uid, ids):
@@ -691,105 +734,6 @@ class project_work(osv.osv):
project_work()
-class config_compute_remaining(osv.osv_memory):
- _name='config.compute.remaining'
-
- def _get_remaining(self,cr, uid, context=None):
- if context and 'active_id' in context:
- return self.pool.get('project.task').browse(cr, uid, context['active_id'], context=context).remaining_hours
- return False
-
- _columns = {
- 'remaining_hours' : fields.float('Remaining Hours', digits=(16,2), help="Put here the remaining hours required to close the task."),
- }
-
- _defaults = {
- 'remaining_hours': _get_remaining
- }
-
- def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
- users_obj = self.pool.get('res.users')
- obj_tm = users_obj.browse(cr, uid, uid, context).company_id.project_time_mode_id
- tm = obj_tm and obj_tm.name or 'Hours'
-
- res = super(config_compute_remaining, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)
-
- if tm in ['Hours','Hour']:
- return res
-
- eview = etree.fromstring(res['arch'])
-
- def _check_rec(eview):
- if eview.attrib.get('widget','') == 'float_time':
- eview.set('widget','float')
- for child in eview:
- _check_rec(child)
- return True
-
- _check_rec(eview)
-
- res['arch'] = etree.tostring(eview)
-
- for f in res['fields']:
- if 'Hours' in res['fields'][f]['string']:
- res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
- return res
-
- def compute_hours(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- task_obj = self.pool.get('project.task')
- request = self.pool.get('res.request')
- if 'active_id' in context:
- remaining_hrs = self.browse(cr,uid,ids)[0].remaining_hours
- task_obj.write(cr,uid,context['active_id'],{'remaining_hours':remaining_hrs})
- if context.get('button_reactivate', False):
- tasks = task_obj.browse(cr, uid, [context['active_id']], context=context)
- for task in tasks:
- project = task.project_id
- if project and project.warn_manager and project.user_id.id and (project.user_id.id != uid):
- request.create(cr, uid, {
- 'name': _("Task '%s' set in progress") % task.name,
- 'state': 'waiting',
- 'act_from': uid,
- 'act_to': project.user_id.id,
- 'ref_partner_id': task.partner_id.id,
- 'ref_doc1': 'project.task,%d' % task.id,
- 'ref_doc2': 'project.project,%d' % project.id,
- })
- task_obj.write(cr, uid, [task.id], {'state': 'open'})
- return {
- 'type': 'ir.actions.act_window_close',
- }
-
-config_compute_remaining()
-
-class message(osv.osv):
- _name = "project.message"
- _description = "Message"
-
- _columns = {
- 'subject': fields.char('Subject', size=128, required="True"),
- 'project_id': fields.many2one('project.project', 'Project', ondelete='cascade'),
- 'date': fields.date('Date', required=1),
- 'user_id': fields.many2one('res.users', 'User', required="True"),
- 'description': fields.text('Description'),
- }
-
- def _default_project(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'project_id' in context and context['project_id']:
- return int(context['project_id'])
- return False
-
- _defaults = {
- 'user_id': lambda self,cr,uid,ctx: uid,
- 'date': time.strftime('%Y-%m-%d'),
- 'project_id': _default_project
- }
-
-message()
class account_analytic_account(osv.osv):
_inherit = 'account.analytic.account'
diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml
index a8593bca9b8..e365d095a20 100644
--- a/addons/project/project_demo.xml
+++ b/addons/project/project_demo.xml
@@ -254,15 +254,5 @@
Latest in house tests
-
-
-
- Follow the procedure of Configuration wizard.
-- Add all required modules
-- Add chat of accounts
-- Create Users
- Configuration steps
-
-
diff --git a/addons/project/project_installer.xml b/addons/project/project_installer.xml
index 320b3302241..d19c8467de2 100644
--- a/addons/project/project_installer.xml
+++ b/addons/project/project_installer.xml
@@ -7,7 +7,7 @@
form
-
+
Project Modules Configuration
@@ -15,24 +15,24 @@
Project Management
-
-
+
+
- Various OpenERP applications are available to manage your projects with different level of control and flexibility.
+ Various OpenERP applications are available to manage your projects with different level of control and flexibility.
- Configure
+ Configure
-
+
-
+
@@ -54,17 +54,5 @@
3
-
- ir.actions.todo
- project_installer_action_replace
- tree
-
-
-
-
-
-
-
-
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 154c2f28935..421729ccda5 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -109,7 +109,7 @@
-
+
@@ -189,33 +189,6 @@
-
-
-
-
- Compute Remaining Hours
- ir.actions.act_window
- config.compute.remaining
- form
- form
- new
-
-
project.task.form
@@ -244,7 +217,7 @@
-
+
@@ -263,10 +236,10 @@
-
+
-
+
@@ -343,7 +316,7 @@
-
+
@@ -421,7 +394,7 @@
-
+
@@ -564,82 +537,7 @@ Issues like bugs in a system, client complain, materials breakdown are collected
-
-
-
- project.message.form
- project.message
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- project.message.tree
- project.message
- tree
-
-
-
-
-
-
-
-
-
-
-
- project.message.search
- project.message
- search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Project Messages
- project.message
- form
- tree,form
-
- {"search_default_project_id":project_id, "search_default_user_id":uid}
-
- An in-project messagery system permits an efficient and trackable communication between project members. The messages are kept in the system and can then be used for post-analysis.
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
index f0cfb181f4a..b9c22faee8b 100644
--- a/addons/project/report/project_report.py
+++ b/addons/project/report/project_report.py
@@ -33,7 +33,6 @@ class report_project_task_user(osv.osv):
'user_id': fields.many2one('res.users', 'Assigned To', readonly=True),
'date_start': fields.date('Starting Date',readonly=True),
'no_of_days': fields.integer('# of Days', size=128, readonly=True),
- 'description': fields.text('Description', 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),
diff --git a/addons/project/security/ir.model.access.csv b/addons/project/security/ir.model.access.csv
index 1a1a3f09daa..cdd939c79ec 100644
--- a/addons/project/security/ir.model.access.csv
+++ b/addons/project/security/ir.model.access.csv
@@ -1,15 +1,14 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,0,0,0
+"access_project_project_manager","project.project manager","model_project_project","project.group_project_manager",1,1,1,1
"access_account_analytic_account_manager","account.analytic.account","analytic.model_account_analytic_account","project.group_project_manager",1,0,0,0
"access_project_project","project.project","model_project_project","project.group_project_user",1,1,1,1
"access_account_analytic_account","account.analytic.account","analytic.model_account_analytic_account","project.group_project_user",1,1,1,1
"access_project_task_type_user","project.task.type user","model_project_task_type","project.group_project_user",1,1,1,1
"access_project_task_type","project.task.type","model_project_task_type","project.group_project_manager",1,1,1,1
-"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,0,0,0
+"access_project_task_manager","project.task manager","model_project_task","project.group_project_manager",1,1,1,1
"access_project_task","project.task","model_project_task","project.group_project_user",1,1,1,1
"access_project_task_work","project.task.work","model_project_task_work","project.group_project_user",1,1,1,1
"access_project_task_work_manager","project.task.work.manager","model_project_task_work","project.group_project_manager",1,1,1,1
-"access_project_message","project.message","model_project_message","project.group_project_user",1,1,1,1
"access_report_project_task_user","report.project.task.user","model_report_project_task_user","project.group_project_manager",1,1,1,1
"access_project_vs_hours","project.vs.hours","model_project_vs_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
@@ -19,8 +18,6 @@
"access_partner_address_task manager","base.res.partner.address manager","base.model_res_partner_address","project.group_project_manager",1,0,0,0
"access_task_on_partner","project.task on partners","model_project_task","base.group_user",1,0,0,0
"access_project_on_partner","project.project on partners","model_project_project","base.group_user",1,0,0,0
-"access_project_message_manager","project.message manager","model_project_message","project.group_project_manager",1,0,0,0
-"access_project_message_system","project.message system","model_project_message","base.group_system",1,0,0,0
"access_project_task_system","project.task system","model_project_task","base.group_system",1,0,0,0
"access_project_project_system","project.project system","model_project_project","base.group_system",1,1,1,1
"access_project_task_work_system","project.task.work system","model_project_task_work","base.group_system",1,0,0,0
diff --git a/addons/project/test/test_project.yml b/addons/project/test/test_project.yml
index 8cb3dbb7692..d57cc274366 100644
--- a/addons/project/test/test_project.yml
+++ b/addons/project/test/test_project.yml
@@ -51,7 +51,6 @@
new_prj = self.read(cr, uid, [new_id], ['name', 'state'])[0]
state = new_prj['state']
name = new_prj['name']
- print "Project '%s' created"%name
assert state == 'open', "Project in %s state. Project created from template project must be in open state"%state
-
Reset project template to normal project
@@ -122,12 +121,12 @@
-
Now in order to reactivate the task 'Technical Training', i click on the "Reactivate" button and fill the remaining hour field
-
- !record {model: config.compute.remaining, id: project_task_technicaltraining_remainingwiz0}:
+ !record {model: project.task.reevaluate, id: project_task_technicaltraining_remainingwiz0}:
remaining_hours: 30.0
- |
I click the apply button
-
- !python {model: config.compute.remaining}: |
+ !python {model: project.task.reevaluate}: |
self.compute_hours(cr, uid, [ref('project_task_technicaltraining_remainingwiz0')], {'active_id': ref("project_task_technicaltraining0"),'button_reactivate': True})
- |
Check if task 'Technical Training' in open state and for other initial values
@@ -142,7 +141,7 @@
-
Make a work task entry 'Training on OpenERP modules, models and classes' of 10 hours
-
- !record {model: project.task, id: project_task_technicaltraining0}:
+ !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
work_ids:
- date: '2010-05-31 15:04:22'
hours: 10.0
@@ -159,7 +158,7 @@
-
Make a work task entry 'Training on OpenERP xml views' of 10 hours
-
- !record {model: project.task, id: project_task_technicaltraining0}:
+ !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
work_ids:
- date: '2010-06-01 15:04:46'
hours: 10.0
@@ -176,7 +175,7 @@
-
Make a work task entry 'Training on workflows' of 10 hours
-
- !record {model: project.task, id: project_task_technicaltraining0}:
+ !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
work_ids:
- date: '2010-06-02 15:05:24'
hours: 10.0
@@ -193,12 +192,12 @@
-
Set remaining hours of 10 hours for reevaluating the task
-
- !record {model: config.compute.remaining, id: config_compute_remaining_0}:
+ !record {model: project.task.reevaluate, id: config_compute_remaining_0}:
remaining_hours: 10.0
-
Reevaluate the task
-
- !python {model: config.compute.remaining}: |
+ !python {model: project.task.reevaluate}: |
self.compute_hours(cr, uid, [ref("config_compute_remaining_0")], {"lang": "en_US",
"project_id": False, "tz": False, "active_model": "project.task", "search_default_project_id":
False, "search_default_user_id": 1, "search_default_current": 1, "active_ids":
@@ -216,7 +215,7 @@
-
Make a work task entry 'Training on reports and wizards' of 10 hours
-
- !record {model: project.task, id: project_task_technicaltraining0}:
+ !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
work_ids:
- date: '2010-05-31 15:08:40'
hours: 10.0
@@ -248,12 +247,12 @@
-
Reactivate task
-
- !record {model: config.compute.remaining, id: config_compute_remaining_1}:
+ !record {model: project.task.reevaluate, id: config_compute_remaining_1}:
remaining_hours: 10.0
-
Reevaluate the task with 10 hours remaining
-
- !python {model: config.compute.remaining}: |
+ !python {model: project.task.reevaluate}: |
self.compute_hours(cr, uid, [ref("config_compute_remaining_1")], {"lang": "en_US",
"project_id": False, "tz": False, "button_reactivate": True, "active_model":
"project.task", "search_default_project_id": False, "search_default_user_id":
@@ -271,7 +270,7 @@
-
Make a work task entry 'Training on yml' of 5 hours
-
- !record {model: project.task, id: project_task_technicaltraining0}:
+ !record {model: project.task, id: project_task_technicaltraining0, context: {'withoutemployee': True}}:
work_ids:
- date: '2010-05-31 16:55:27'
hours: 5.0
diff --git a/addons/project/test/test_project_delegation.yml b/addons/project/test/test_project_delegation.yml
index 97d6b26519c..f86f488dee7 100644
--- a/addons/project/test/test_project_delegation.yml
+++ b/addons/project/test/test_project_delegation.yml
@@ -61,7 +61,7 @@
Validating the delegate task
-
!python {model: project.task.delegate}: |
- self.validate(cr, uid, [ref("project_task_publish_book_delegate")],
+ self.delegate(cr, uid, [ref("project_task_publish_book_delegate")],
{"lang": "en_US", "active_model": "project.task", "tz": False, "record_id":
4, "active_ids": [ref("project_task_publish_book")], "active_id": ref("project_task_publish_book"),
})
@@ -227,4 +227,4 @@
Parent task 'Develop book for Technical and Functional reference' must be now in open state
-
!assert {model: project.task, id: project_task_documentation_book, severity: error, string: Task is in done state}:
- - state == "open"
\ No newline at end of file
+ - state == "open"
diff --git a/addons/project/wizard/__init__.py b/addons/project/wizard/__init__.py
index 618eecf4b62..69e1051e621 100644
--- a/addons/project/wizard/__init__.py
+++ b/addons/project/wizard/__init__.py
@@ -19,8 +19,9 @@
#
##############################################################################
-import project_close_task
+import project_task_close
import project_task_delegate
+import project_task_reevaluate
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/wizard/project_close_task.py b/addons/project/wizard/project_close_task.py
deleted file mode 100644
index eb5589f2e3a..00000000000
--- a/addons/project/wizard/project_close_task.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- 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 time
-
-from osv import fields, osv
-from tools.translate import _
-from tools import email_send as email
-
-class project_close_task(osv.osv_memory):
- """
- Close Task
- """
- _name = "close.task"
- _description = "Project Close Task"
- _columns = {
- 'manager_email': fields.char('Manager E-Mail ID', size=64, help="Email Address of Project's Manager"),
- 'partner_email': fields.char('Partner E-Mail ID', size=64, help="Email Address of Partner"),
- 'description': fields.text('Description'),
- }
-
- def _get_manager_email(self, cr, uid, context=None):
- if context is None:
- context = {}
- email = ''
- if context.get('send_manager', False) and ('task_id' in context):
- project_id = self.pool.get('project.task').read(cr, uid, context['task_id'], ['project_id'])['project_id'][0]
- project = self.pool.get('project.project').browse(cr, uid, project_id)
- manager_id = project.user_id or False
- if manager_id and manager_id.user_email:
- email = manager_id.user_email
- return email
-
- def _get_partner_email(self, cr, uid, context=None):
- if context is None:
- context = {}
- email = ''
- if context.get('send_partner', False) and ('task_id' in context):
- task = self.pool.get('project.task').browse(cr, uid, context['task_id'])
- partner_id = task.partner_id or task.project_id.partner_id
- if partner_id and len(partner_id.address) and partner_id.address[0].email:
- email = partner_id.address[0].email
- return email
-
- def _get_desc(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'task_id' in context:
- task = self.pool.get('project.task').browse(cr, uid, context['task_id'])
- return task.description or task.name
- return ''
-
- _defaults = {
- 'manager_email': _get_manager_email,
- 'partner_email': _get_partner_email,
- 'description': _get_desc,
- }
-
- def close(self, cr, uid, ids, context=None):
- if 'task_id' in context:
- self.pool.get('project.task').write(cr, uid, [context['task_id']], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
- return {}
-
- def confirm(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- if not 'task_id' in context:
- return {}
- close_task = self.read(cr, uid, ids[0], [])
- to_adr = []
- description = close_task['description']
-
- if 'task_id' in context:
- if context.get('send_manager', False) and not close_task.get('manager_email', False):
- raise osv.except_osv(_('Error'), _("Please specify the email address of Project Manager."))
-
- elif context.get('send_partner', False) and not close_task.get('partner_email', False):
- raise osv.except_osv(_('Error'), _("Please specify the email address of partner."))
-
- else:
- task_obj = self.pool.get('project.task')
- task = task_obj.browse(cr, uid, context['task_id'], context=context)
- project = task.project_id
- subject = "Task '%s' closed" % task.name
- if task.user_id and task.user_id.address_id and task.user_id.address_id.email:
- from_adr = task.user_id.address_id.email
- signature = task.user_id.signature
- else:
- raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
- val = {
- 'name': task.name,
- 'user_id': task.user_id.name,
- 'task_id': "%d/%d" % (project.id, task.id),
- 'date_start': task.date_start,
- 'date_end': task.date_end,
- 'state': task.state
- }
-
- header = (project.warn_header or '') % val
- footer = (project.warn_footer or '') % val
- body = u'%s\n%s\n%s\n\n-- \n%s' % (header, description, footer, signature)
- to_adr.append(context.get('send_manager', '') and close_task.get('manager_email', '') or '')
- to_adr.append(context.get('send_partner', '') and close_task.get('partner_email', '') or '')
- mail_id = email(from_adr, to_adr, subject, body.encode('utf-8'), email_bcc=[from_adr])
- if not mail_id:
- raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
- task_obj.write(cr, uid, [task.id], {'state': 'done', 'date_end':time.strftime('%Y-%m-%d %H:%M:%S'), 'remaining_hours': 0.0})
- message = _('Task ') + " '" + task.name + "' "+ _("is Done.")
- self.log(cr, uid, task.id, message)
-
- return {}
-
-project_close_task()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/wizard/project_close_task_view.xml b/addons/project/wizard/project_close_task_view.xml
deleted file mode 100644
index 37b6646232a..00000000000
--- a/addons/project/wizard/project_close_task_view.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
- Project Close Task
- close.task
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Project Close Task
- ir.actions.act_window
- close.task
- form
- form
-
- {'record_id' : active_id}
- new
-
-
-
-
diff --git a/addons/project/wizard/project_task_close.py b/addons/project/wizard/project_task_close.py
new file mode 100644
index 00000000000..99b6caef308
--- /dev/null
+++ b/addons/project/wizard/project_task_close.py
@@ -0,0 +1,126 @@
+# -*- 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 time
+
+from osv import fields, osv
+from tools.translate import _
+from tools import email_send as email
+
+class project_task_close(osv.osv_memory):
+ """
+ Close Task
+ """
+ _name = "project.task.close"
+ _description = "Project Close Task"
+ _columns = {
+ 'manager_warn': fields.boolean("Warn Manager", help="Warn Manager by Email"),
+ 'partner_warn': fields.boolean("Warn Customer", help="Warn Customer by Email"),
+ 'manager_email': fields.char('Manager Email', size=128, help="Email Address of Project's Manager"),
+ 'partner_email': fields.char('Customer Email', size=128, help="Email Address of Customer"),
+ 'description': fields.text('Description'),
+ }
+
+ def default_get(self, cr, uid, fields, context=None):
+ """
+ This function gets default values
+ """
+ if context is None:
+ context = {}
+ record_id = context and context.get('active_id', False) or False
+ task_pool = self.pool.get('project.task')
+ project_pool = self.pool.get('project.project')
+
+ res = super(project_task_close, self).default_get(cr, uid, fields, context=context)
+ task = task_pool.browse(cr, uid, record_id, context=context)
+ project = task.project_id
+ manager = project.user_id or False
+ partner = task.partner_id or task.project_id.partner_id
+
+ if 'description' in fields:
+ res.update({'description': task.description})
+ if 'manager_warn' in fields:
+ res.update({'manager_warn': project.warn_manager})
+ if 'partner_warn' in fields:
+ res.update({'partner_warn': project.warn_customer})
+ if 'manager_email' in fields:
+ res.update({'manager_email': manager and manager.user_email or False})
+ if partner and len(partner.address) and 'partner_email' in fields:
+ res.update({'partner_email': partner.address[0].email})
+ return res
+
+ def done(self, cr, uid, ids, context=None):
+ task_pool = self.pool.get('project.task')
+ task_id = context.get('active_id', False)
+ res = task_pool.do_close(cr, uid, [task_id], context=context)
+ return res
+
+ def confirm(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+
+ task_pool = self.pool.get('project.task')
+ task_id = context.get('active_id', False)
+ if not task_id:
+ return {}
+ task = task_pool.browse(cr, uid, task_id, context=context)
+ for data in self.browse(cr, uid, ids, context=context):
+ res = task_pool.do_close(cr, uid, [task.id], context=context)
+ if res:
+ # Send Warn Message by Email to Manager and Customer
+ if data.manager_warn and not data.manager_email:
+ raise osv.except_osv(_('Error'), _("Please specify the email address of Project Manager."))
+
+ elif data.partner_warn and not data.partner_email:
+ raise osv.except_osv(_('Error'), _("Please specify the email address of Customer."))
+
+ elif data.manager_warn or data.partner_warn:
+ project = task.project_id
+ subject = _("Task '%s' Closed") % task.name
+ if task.user_id and task.user_id.address_id and task.user_id.address_id.email:
+ from_adr = task.user_id.address_id.email
+ signature = task.user_id.signature
+ else:
+ raise osv.except_osv(_('Error'), _("Couldn't send mail because your email address is not configured!"))
+ val = {
+ 'name': task.name,
+ 'user_id': task.user_id.name,
+ 'task_id': "%d/%d" % (project.id, task.id),
+ 'date_start': task.date_start,
+ 'date_end': task.date_end,
+ 'state': task.state
+ }
+
+ header = (project.warn_header or '') % val
+ footer = (project.warn_footer or '') % val
+ body = u'%s\n%s\n%s\n\n-- \n%s' % (header, description, footer, signature)
+ if data.manager_warn and data.manager_email:
+ to_adr.append(data.manager_email)
+ if data.partner_warn and data.partner_email:
+ to_adr.append(data.partner_email)
+ mail_id = email(from_adr, to_adr, subject, tools.ustr(body), email_bcc=[from_adr])
+ if not mail_id:
+ raise osv.except_osv(_('Error'), _("Couldn't send mail! Check the email ids and smtp configuration settings"))
+ return {}
+
+project_task_close()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project/wizard/project_task_close_view.xml b/addons/project/wizard/project_task_close_view.xml
new file mode 100644
index 00000000000..9692fe9a733
--- /dev/null
+++ b/addons/project/wizard/project_task_close_view.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ Done Task
+ project.task.close
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Done Task
+ ir.actions.act_window
+ project.task.close
+ form
+ form
+
+ new
+
+
+
+
diff --git a/addons/project/wizard/project_task_delegate.py b/addons/project/wizard/project_task_delegate.py
index 535d527f45b..2ce74ceefc8 100644
--- a/addons/project/wizard/project_task_delegate.py
+++ b/addons/project/wizard/project_task_delegate.py
@@ -38,67 +38,54 @@ class project_task_delegate(osv.osv_memory):
'state': fields.selection([('pending','Pending'), ('done','Done'), ], 'Validation State', required=True, help="New state of your own task. Pending will be reopened automatically when the delegated task is closed")
}
- def _get_name(self, cr, uid, context=None):
+ def default_get(self, cr, uid, fields, context=None):
+ """
+ This function gets default values
+ """
+ res = super(project_task_delegate, self).default_get(cr, uid, fields, context=context)
if context is None:
context = {}
- if 'active_id' in context:
- task = self.pool.get('project.task').browse(cr, uid, context['active_id'])
+ record_id = context and context.get('active_id', False) or False
+ task_pool = self.pool.get('project.task')
+ task = task_pool.browse(cr, uid, record_id, context=context)
+ project = task.project_id
+ manager = project.user_id or False
+ partner = task.partner_id or task.project_id.partner_id
+
+ if 'name' in fields:
if task.name.startswith(_('CHECK: ')):
newname = str(task.name).replace(_('CHECK: '), '')
else:
newname = task.name or ''
- return newname
- return ''
-
- def _get_plan_hour(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'active_id' in context:
- task = self.pool.get('project.task').browse(cr, uid, context['active_id'])
- return task.remaining_hours
- return 0.0
-
- def _get_prefix(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'active_id' in context:
- task = self.pool.get('project.task').browse(cr, uid, context['active_id'])
+ res.update({'name': newname})
+ if 'planned_hours' in fields:
+ res.update({'planned_hours': task.remaining_hours or 0.0})
+ if 'prefix' in fields:
if task.name.startswith(_('CHECK: ')):
newname = str(task.name).replace(_('CHECK: '), '')
else:
newname = task.name or ''
- return _('CHECK: ') + newname
- return ''
+ prefix = _('CHECK: ') + newname
+ res.update({'prefix': prefix})
+ if 'new_task_description' in fields:
+ res.update({'new_task_description': task.description})
+ return res
- def _get_new_desc(self, cr, uid, context=None):
- if context is None:
- context = {}
- if 'active_id' in context:
- task = self.pool.get('project.task').browse(cr, uid, context['active_id'])
- return task.description
- return ''
_defaults = {
- 'name': _get_name,
- 'planned_hours': _get_plan_hour,
'planned_hours_me': 1.0,
- 'prefix': _get_prefix,
- 'new_task_description': _get_new_desc,
'state': 'pending',
}
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
- users_obj = self.pool.get('res.users')
- obj_tm = users_obj.browse(cr, uid, uid, context).company_id.project_time_mode_id
- tm = obj_tm and obj_tm.name or 'Hours'
-
res = super(project_task_delegate, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)
-
+ users_pool = self.pool.get('res.users')
+ obj_tm = users_pool.browse(cr, uid, uid, context).company_id.project_time_mode_id
+ tm = obj_tm and obj_tm.name or 'Hours'
if tm in ['Hours','Hour']:
return res
eview = etree.fromstring(res['arch'])
-
def _check_rec(eview):
if eview.attrib.get('widget','') == 'float_time':
eview.set('widget','float')
@@ -107,47 +94,19 @@ class project_task_delegate(osv.osv_memory):
return True
_check_rec(eview)
-
res['arch'] = etree.tostring(eview)
-
- for f in res['fields']:
- if 'Hours' in res['fields'][f]['string']:
- res['fields'][f]['string'] = res['fields'][f]['string'].replace('Hours',tm)
-
+ for field in res['fields']:
+ if 'Hours' in res['fields'][field]['string']:
+ res['fields'][field]['string'] = res['fields'][field]['string'].replace('Hours',tm)
return res
- def validate(self, cr, uid, ids, context=None):
+ def delegate(self, cr, uid, ids, context=None):
if context is None:
context = {}
- task_obj = self.pool.get('project.task')
- user_obj = self.pool.get('res.users')
+ task_id = context.get('active_id', False)
+ task_pool = self.pool.get('project.task')
delegate_data = self.read(cr, uid, ids, context=context)[0]
- task = task_obj.browse(cr, uid, context['active_id'], context=context)
- newname = delegate_data['prefix'] or ''
- new_task_id = task_obj.copy(cr, uid, task.id, {
- 'name': delegate_data['name'],
- 'user_id': delegate_data['user_id'],
- 'planned_hours': delegate_data['planned_hours'],
- 'remaining_hours': delegate_data['planned_hours'],
- 'parent_ids': [(6, 0, [task.id])],
- 'state': 'draft',
- 'description': delegate_data['new_task_description'] or '',
- 'child_ids': [],
- 'work_ids': []
- }, context)
- task_obj.write(cr, uid, [task.id], {
- 'remaining_hours': delegate_data['planned_hours_me'],
- 'planned_hours': delegate_data['planned_hours_me'] + (task.effective_hours or 0.0),
- 'name': newname,
- }, context)
- if delegate_data['state'] == 'pending':
- task_obj.do_pending(cr, uid, [task.id], context)
- else:
- context.update({'mail_send': False} )
- task_obj.do_close(cr, uid, [task.id], context)
- delegrate_user = user_obj.browse(cr, uid, delegate_data['user_id'], context=context)
- message = _('Task ') + " '" + delegate_data['name'] + "' "+ _("is Delegated to User:") +" '"+ delegrate_user.name +"' "
- self.log(cr, uid, task.id, message)
+ task_pool.do_delegate(cr, uid, task_id, delegate_data, context=context)
return {}
project_task_delegate()
diff --git a/addons/project/wizard/project_task_delegate_view.xml b/addons/project/wizard/project_task_delegate_view.xml
index 68ebb1692d2..7bedecd8f53 100644
--- a/addons/project/wizard/project_task_delegate_view.xml
+++ b/addons/project/wizard/project_task_delegate_view.xml
@@ -8,25 +8,25 @@
form
diff --git a/addons/project/wizard/project_task_reevaluate.py b/addons/project/wizard/project_task_reevaluate.py
new file mode 100644
index 00000000000..e4e2fab66e3
--- /dev/null
+++ b/addons/project/wizard/project_task_reevaluate.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 .
+#
+##############################################################################
+
+from lxml import etree
+from osv import fields, osv
+from tools.translate import _
+
+class project_task_reevaluate(osv.osv_memory):
+ _name = 'project.task.reevaluate'
+
+ def _get_remaining(self,cr, uid, context=None):
+ if context is None:
+ context = {}
+ active_id = context.get('active_id', False)
+ res = False
+ if active_id:
+ res = self.pool.get('project.task').browse(cr, uid, active_id, context=context).remaining_hours
+ return res
+
+ _columns = {
+ 'remaining_hours' : fields.float('Remaining Hours', digits=(16,2), help="Put here the remaining hours required to close the task."),
+ }
+
+ _defaults = {
+ 'remaining_hours': _get_remaining,
+ }
+
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(project_task_reevaluate, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu=submenu)
+ users_pool = self.pool.get('res.users')
+ time_mode = users_pool.browse(cr, uid, uid, context).company_id.project_time_mode_id
+ time_mode_name = time_mode and time_mode.name or 'Hours'
+ if time_mode_name in ['Hours','Hour']:
+ return res
+
+ eview = etree.fromstring(res['arch'])
+
+ def _check_rec(eview):
+ if eview.attrib.get('widget','') == 'float_time':
+ eview.set('widget','float')
+ for child in eview:
+ _check_rec(child)
+ return True
+
+ _check_rec(eview)
+
+ res['arch'] = etree.tostring(eview)
+
+ for field in res['fields']:
+ if 'Hours' in res['fields'][field]['string']:
+ res['fields'][field]['string'] = res['fields'][field]['string'].replace('Hours',time_mode_name)
+ return res
+
+ def compute_hours(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ data = self.browse(cr, uid, ids, context=context)[0]
+ task_pool = self.pool.get('project.task')
+ task_id = context.get('active_id', False)
+ if task_id:
+ task_pool.write(cr, uid, task_id, {'remaining_hours': data.remaining_hours})
+ if context.get('button_reactivate', False):
+ task_pool.do_reopen(cr, uid, [task_id], context=context)
+ return {}
+project_task_reevaluate()
diff --git a/addons/project/wizard/project_task_reevaluate_view.xml b/addons/project/wizard/project_task_reevaluate_view.xml
new file mode 100644
index 00000000000..5e0e7c89069
--- /dev/null
+++ b/addons/project/wizard/project_task_reevaluate_view.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ Re-evaluate Task
+ project.task.reevaluate
+ form
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Re-evaluate Task
+ ir.actions.act_window
+ project.task.reevaluate
+ form
+ form
+ new
+
+
+
diff --git a/addons/project_caldav/project_caldav_view.xml b/addons/project_caldav/project_caldav_view.xml
index 01133108b6d..259d336c398 100644
--- a/addons/project_caldav/project_caldav_view.xml
+++ b/addons/project_caldav/project_caldav_view.xml
@@ -72,7 +72,7 @@
attrs="{'invisible':[('rrule_type','in', ('none', False))]}"
name="open_meeting" icon="gtk-edit"
type="object" />
-
-
+
-
+
diff --git a/addons/project_gtd/i18n/tr.po b/addons/project_gtd/i18n/tr.po
index d35c6f62531..a794500911a 100644
--- a/addons/project_gtd/i18n/tr.po
+++ b/addons/project_gtd/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 06:19+0000\n"
+"PO-Revision-Date: 2010-09-08 08:58+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:56+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project_gtd
diff --git a/addons/project_issue/board_project_issue_view.xml b/addons/project_issue/board_project_issue_view.xml
index 1173a63ce50..30b6815e450 100644
--- a/addons/project_issue/board_project_issue_view.xml
+++ b/addons/project_issue/board_project_issue_view.xml
@@ -86,6 +86,7 @@
diff --git a/addons/project_issue/i18n/fr.po b/addons/project_issue/i18n/fr.po
index d409b33816c..218c37a2cbf 100644
--- a/addons/project_issue/i18n/fr.po
+++ b/addons/project_issue/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 09:23:21+0000\n"
-"PO-Revision-Date: 2010-08-20 09:23:21+0000\n"
+"POT-Creation-Date: 2010-08-20 09:23+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: project_issue
#: view:project.issue:0
@@ -182,7 +183,9 @@ msgstr ""
#. module: project_issue
#: help:project.project,project_escalation_id:0
-msgid "If any issue is escalated from the current Project, it will be listed under the project selected here."
+msgid ""
+"If any issue is escalated from the current Project, it will be listed under "
+"the project selected here."
msgstr ""
#. module: project_issue
@@ -193,7 +196,9 @@ msgstr ""
#. module: project_issue
#: code:addons/project_issue/project_issue.py:0
#, python-format
-msgid "You cannot escalate this issue.\nThe relevant Project has not configured the Escalation Project!"
+msgid ""
+"You cannot escalate this issue.\n"
+"The relevant Project has not configured the Escalation Project!"
msgstr ""
#. module: project_issue
@@ -390,7 +395,10 @@ msgstr ""
#. module: project_issue
#: help:project.issue,canal_id:0
-msgid "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."
+msgid ""
+"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."
msgstr ""
#. module: project_issue
@@ -463,7 +471,8 @@ msgstr ""
#. module: project_issue
#: model:ir.module.module,description:project_issue.module_meta_information
-msgid "\n"
+msgid ""
+"\n"
" This module provide Issues/Bugs Management in Project\n"
" "
msgstr ""
@@ -487,7 +496,10 @@ msgstr ""
#. module: project_issue
#: help:project.issue,email_cc:0
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
+msgid ""
+"These email addresses will be added to the CC field of all inbound and "
+"outbound emails for this record before being sent. Separate multiple email "
+"addresses with a comma"
msgstr ""
#. module: project_issue
@@ -753,7 +765,8 @@ msgstr ""
#. module: project_issue
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: project_issue
@@ -843,9 +856,13 @@ msgstr ""
#. module: project_issue
#: help:project.issue,state:0
-msgid "The state is set to 'Draft', when a case is created. \n"
-"If the case is in progress the state is set to 'Open'. \n"
-"When the case is over, the state is set to 'Done'. \n"
+msgid ""
+"The state is set to 'Draft', when a case is created. "
+" \n"
+"If the case is in progress the state is set to 'Open'. "
+" \n"
+"When the case is over, the state is set to 'Done'. "
+" \n"
"If the case needs to be reviewed then the state is set to 'Pending'."
msgstr ""
@@ -872,7 +889,9 @@ msgstr ""
#. module: project_issue
#: help:project.issue,section_id:0
-msgid "Sales team to which Case belongs to. Define Responsible user and Email account for mail gateway."
+msgid ""
+"Sales team to which Case belongs to. Define "
+"Responsible user and Email account for mail gateway."
msgstr ""
#. module: project_issue
@@ -943,4 +962,3 @@ msgstr ""
#: field:project.issue,duration:0
msgid "Duration"
msgstr ""
-
diff --git a/addons/project_issue/project_issue_data.xml b/addons/project_issue/project_issue_data.xml
index fb914dfaca2..0ad753b0004 100644
--- a/addons/project_issue/project_issue_data.xml
+++ b/addons/project_issue/project_issue_data.xml
@@ -1,75 +1,75 @@
-
+
-
-
-
-
- Bugs
-
-
-
+
+
-
- Feature Requests
-
-
-
+
+ Maintenance
+
+
+
-
-
-
- Version 4.2
-
-
-
-
-
- Version 4.4
-
-
-
+
+ Feature Requests
+
+
+
-
-
-
-
- Accepted as Bug
-
-
-
-
- Fixed
-
-
-
-
- Won't fix
-
-
-
-
- Invalid
-
-
-
-
- Awaiting Response
-
-
-
-
- Works For Me
-
-
-
+
+
+
+ Version 4.2
+
+
+
-
+
+ Version 5.0
+
+
+
+
+
+ Version 6.0
+
+
+
+
+
+
+
+
+ Accepted as Bug
+
+
+
+
+ Fixed
+
+
+
+
+ Won't fix
+
+
+
+
+ Invalid
+
+
+
+
+ Awaiting Response
+
+
+
+
+ Works For Me
+
+
+
+
+
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 78e27854c09..f1e4d34f54c 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -13,6 +13,8 @@
{'object_id':'project.issue'}
+
+
Issue Stagescrm.case.stage
@@ -63,10 +65,10 @@
-
-
+
+
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index d0bf5e29336..bf8085ba932 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -35,7 +35,7 @@ class project_issue_report(osv.osv):
_name = "project.issue.report"
_auto = False
- def _get_data(self, cr, uid, ids, field_name, arg, context=None):
+ def _get_data(self, cr, uid, ids, field_names, arg, context=None):
if context is None:
context = {}
""" @param cr: the current row, from the database cursor,
@@ -46,40 +46,24 @@ class project_issue_report(osv.osv):
res = {}
avg_ans = 0.0
- for case in self.browse(cr, uid, ids, context):
- if field_name != 'avg_answers':
- state = field_name[5:]
- cr.execute("select count(*) from crm_opportunity where \
- section_id =%s and state='%s'"%(case.section_id.id, state))
- state_cases = cr.fetchone()[0]
- perc_state = (state_cases / float(case.nbr)) * 100
-
- res[case.id] = perc_state
- else:
- model_name = self._name.split('report.')
- if len(model_name) < 2:
- res[case.id] = 0.0
- else:
- model_name = model_name[1]
-
- cr.execute("select count(*) from crm_case_log l, ir_model m \
- where l.model_id=m.id and m.model = '%s'" , model_name)
- logs = cr.fetchone()[0]
-
- avg_ans = logs / case.nbr
- res[case.id] = avg_ans
+ for report in self.browse(cr, uid, ids, context):
+ res[report.id]= {
+ 'avg_answers': 0.0,
+ 'perc_done' : 0.0,
+ 'perc_cancel': 0.0
+ }
+ #TODO: Calculate
return res
_columns = {
'name': fields.char('Year', size=64, required=False, readonly=True),
'user_id':fields.many2one('res.users', 'Responsible', readonly=True),
- 'user_id2':fields.many2one('res.users', 'Assignee', readonly=True),
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
'state': fields.selection(AVAILABLE_STATES, 'State', size=16, readonly=True),
- 'avg_answers': fields.function(_get_data, string='Avg. Answers', method=True, type="integer"),
- 'perc_done': fields.function(_get_data, string='%Done', method=True, type="float"),
- 'perc_cancel': fields.function(_get_data, string='%Cancel', method=True, type="float"),
+ 'avg_answers': fields.function(_get_data, group_operator='avg', string='Avg. Answers', multi='avg_answers', method=True, type="integer"),
+ 'perc_done': fields.function(_get_data, group_operator='avg', string='%Done', multi='perc_done', method=True, type="float"),
+ 'perc_cancel': fields.function(_get_data, group_operator='avg', string='%Cancel', multi='perc_cancel', method=True, type="float"),
'month':fields.selection([('01', 'January'), ('02', 'February'), \
('03', 'March'), ('04', 'April'),\
('05', 'May'), ('06', 'June'), \
@@ -104,7 +88,6 @@ class project_issue_report(osv.osv):
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority'),
'project_id':fields.many2one('project.project', 'Project',readonly=True),
'type_id': fields.many2one('crm.case.resource.type', 'Version', domain="[('object_id.model', '=', 'project.issue')]"),
- 'user_id2losed': fields.date('Close Date', readonly=True),
'assigned_to' : fields.many2one('res.users', 'Assigned to',readonly=True),
'partner_id': fields.many2one('res.partner','Partner',domain="[('object_id.model', '=', 'project.issue')]"),
'canal_id': fields.many2one('res.partner.canal', 'Channel',readonly=True),
diff --git a/addons/project_issue_sheet/i18n/fr.po b/addons/project_issue_sheet/i18n/fr.po
index 37f03be85e7..d98bd1db1fc 100644
--- a/addons/project_issue_sheet/i18n/fr.po
+++ b/addons/project_issue_sheet/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 10:05:59+0000\n"
-"PO-Revision-Date: 2010-08-20 10:05:59+0000\n"
+"POT-Creation-Date: 2010-08-20 10:05+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: project_issue_sheet
#: constraint:ir.ui.view:0
@@ -22,8 +23,10 @@ msgstr ""
#. module: project_issue_sheet
#: model:ir.module.module,description:project_issue_sheet.module_meta_information
-msgid "\n"
-" This module adds the Timesheet support for the Issues/Bugs Management in Project\n"
+msgid ""
+"\n"
+" This module adds the Timesheet support for the "
+"Issues/Bugs Management in Project\n"
" "
msgstr ""
@@ -44,7 +47,8 @@ msgstr ""
#. module: project_issue_sheet
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: project_issue_sheet
@@ -81,4 +85,3 @@ msgstr ""
#: field:hr.analytic.timesheet,issue_id:0
msgid "Issue"
msgstr ""
-
diff --git a/addons/project_issue_sheet/project_issue_sheet_view.xml b/addons/project_issue_sheet/project_issue_sheet_view.xml
index ffc3332ab8c..ac842d7e018 100644
--- a/addons/project_issue_sheet/project_issue_sheet_view.xml
+++ b/addons/project_issue_sheet/project_issue_sheet_view.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/addons/project_long_term/__openerp__.py b/addons/project_long_term/__openerp__.py
index c98c85006fa..0d03b5f7315 100644
--- a/addons/project_long_term/__openerp__.py
+++ b/addons/project_long_term/__openerp__.py
@@ -27,14 +27,14 @@
"category": "Generic Modules/Projects & Services",
"depends": ["resource", "project"],
"description": """
-
- Long Term Project management module that tracks planning, scheduling, resources allocation.
- Mainly used with Big project management.
- - Project Phases will be maintained by Manager of the project
- - Compute Phase Scheduling: Compute start date and end date of the phases which are in draft,open and pending state of the project given.
- If no project given then all the draft,open and pending state phases will be taken
- - Compute Task Scheduling: This works same as the scheduler button on project.phase. It takes the project as argument and computes all the open,draft and pending tasks
- - Schedule Tasks: All the tasks which are in draft,pending and open state are scheduled with taking the phase's start date
+Long Term Project management module that tracks planning, scheduling, resources allocation.
+Features.
+ - Manage Big project.
+ - Define various Phases of Project.
+ - Compute Phase Scheduling: Compute start date and end date of the phases which are in draft,open and pending state of the project given.
+ If no project given then all the draft,open and pending state phases will be taken
+ - Compute Task Scheduling: This works same as the scheduler button on project.phase. It takes the project as argument and computes all the open,draft and pending tasks
+ - Schedule Tasks: All the tasks which are in draft,pending and open state are scheduled with taking the phase's start date
""",
"init_xml": [],
diff --git a/addons/project_long_term/i18n/fr.po b/addons/project_long_term/i18n/fr.po
index e508e1f3fba..dbafb922c94 100644
--- a/addons/project_long_term/i18n/fr.po
+++ b/addons/project_long_term/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 10:11:42+0000\n"
-"PO-Revision-Date: 2010-08-20 10:11:42+0000\n"
+"POT-Creation-Date: 2010-08-20 10:11+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: project_long_term
#: model:ir.module.module,shortdesc:project_long_term.module_meta_information
@@ -71,15 +72,22 @@ msgstr ""
#. module: project_long_term
#: model:ir.module.module,description:project_long_term.module_meta_information
-msgid "\n"
+msgid ""
"\n"
-" Long Term Project management module that tracks planning, scheduling, resources allocation.\n"
+"\n"
+" Long Term Project management module that tracks planning, "
+"scheduling, resources allocation.\n"
" Mainly used with Big project management.\n"
" - Project Phases will be maintained by Manager of the project\n"
-" - Compute Phase Scheduling: Compute start date and end date of the phases which are in draft,open and pending state of the project given.\n"
-" If no project given then all the draft,open and pending state phases will be taken\n"
-" - Compute Task Scheduling: This works same as the scheduler button on project.phase. It takes the project as argument and computes all the open,draft and pending tasks\n"
-" - Schedule Tasks: All the tasks which are in draft,pending and open state are scheduled with taking the phase's start date\n"
+" - Compute Phase Scheduling: Compute start date and end date of "
+"the phases which are in draft,open and pending state of the project given.\n"
+" If no project given then all the "
+"draft,open and pending state phases will be taken\n"
+" - Compute Task Scheduling: This works same as the scheduler "
+"button on project.phase. It takes the project as argument and computes all "
+"the open,draft and pending tasks\n"
+" - Schedule Tasks: All the tasks which are in draft,pending and "
+"open state are scheduled with taking the phase's start date\n"
"\n"
" "
msgstr ""
@@ -155,7 +163,8 @@ msgstr ""
#. module: project_long_term
#: help:project.resource.allocation,useability:0
-msgid "Usability of this resource for this project phase in percentage (=50%)"
+msgid ""
+"Usability of this resource for this project phase in percentage (=50%)"
msgstr ""
#. module: project_long_term
@@ -398,7 +407,8 @@ msgstr ""
#. module: project_long_term
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: project_long_term
@@ -446,9 +456,11 @@ msgstr ""
#. module: project_long_term
#: help:project.phase,state:0
-msgid "If the phase is created the state 'Draft'.\n"
+msgid ""
+"If the phase is created the state 'Draft'.\n"
" If the phase is started, the state becomes 'In Progress'.\n"
-" If review is needed the phase is in 'Pending' state. \n"
+" If review is needed the phase is in 'Pending' state. "
+" \n"
" If the phase is over, the states is set to 'Done'."
msgstr ""
@@ -534,4 +546,3 @@ msgstr ""
#: field:project.phase,duration:0
msgid "Duration"
msgstr ""
-
diff --git a/addons/project_long_term/project_long_term.py b/addons/project_long_term/project_long_term.py
index 04fde75342e..79baff679cc 100644
--- a/addons/project_long_term/project_long_term.py
+++ b/addons/project_long_term/project_long_term.py
@@ -116,7 +116,7 @@ class project_phase(osv.osv):
'sequence': 10,
'product_uom': lambda self,cr,uid,c: self.pool.get('product.uom').search(cr, uid, [('name', '=', _('Day'))], context=c)[0]
}
- _order = "name"
+ _order = "project_id, date_start, sequence, name"
_constraints = [
(_check_recursion,'Loops in phases not allowed',['next_phase_ids', 'previous_phase_ids']),
(_check_dates, 'Phase start-date must be lower than phase end-date.', ['date_start', 'date_end']),
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 671ca0f5c62..ee763b759b6 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -72,9 +72,9 @@
Resource Allocationsproject.resource.allocationform
- gantt,tree,form
+ tree,form,gantt{}
-
+
@@ -116,7 +116,7 @@
-
+
@@ -254,7 +254,7 @@
Project Phasesproject.phaseform
- gantt,tree,form,calendar
+ tree,form,gantt,calendar{'search_default_responsible_id':uid}You can subdivide your larger projects into several phases. For each phase, you can define your resources allocation (humans or engine), describe de differend task and link your phase with previous and next one, add constraints date and scheduling. A gantt view of your project phase is also available from this menu. Gantt view is a graphically draw of the project plan; it includes any task dependencies by visually adjusting task durations and priorities, and by linking tasks to each other.
@@ -314,13 +314,13 @@
+ id="menu_project_phase" parent="base.menu_project_long_term" sequence="1"/>
diff --git a/addons/project_long_term/test/schedule_phase_tasks.yml b/addons/project_long_term/test/schedule_phase_tasks.yml
index 92286700e6c..323d9cbc8f2 100644
--- a/addons/project_long_term/test/schedule_phase_tasks.yml
+++ b/addons/project_long_term/test/schedule_phase_tasks.yml
@@ -41,7 +41,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
+ user_id: project_long_term.res_users_userdeveloper0
-
Create the phase task 'Develop GUI for Modules Configuration'
@@ -53,7 +53,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
+ user_id: project_long_term.res_users_userdeveloper0
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
@@ -64,8 +64,7 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
-
+ user_id: project_long_term.res_users_userdeveloper0
-
Create the phase task 'Develop required Menus'
-
@@ -76,16 +75,19 @@
state: draft
phase_id: project_phase_phase0
project_id: project_project_project0
-
+ user_id: project_long_term.res_users_userdesign0
-
Schedule phase tasks
-
!python {model: project.schedule.tasks}: |
- self.compute_date(cr, uid, {"lang": "en_US",
- "active_model": "project.phase", "active_ids": [ref("project_phase_phase0")],
- "tz": False, "record_id": 138, "project_id": ref("project_project_project0"), "active_id": ref("project_phase_phase0"),
- })
+ res = self.compute_date(cr, uid, {"lang": "en_US", "tz": False,
+ "active_id": ref("project_phase_phase0"),
+ # rest may be obsolete:
+ # "active_model": "project.phase", "active_ids": [ref("project_phase_phase0")],
+ # "record_id": 138, "project_id": ref("project_project_project0"),
+ })
+ print res
-
Check if tasks scheduled, check that either of task's start_date, end_date and user_id is not null
@@ -93,5 +95,6 @@
!python {model: project.phase}: |
phase=self.browse(cr, uid, [ref("project_phase_phase0")])[0]
for task in phase.task_ids:
- if (not task.user_id) or (not task.date_start) or (not task.date_end):
- raise AssertionError("Phase Tasks not scheduled")
\ No newline at end of file
+ if (not task.user_id) or (not task.date_start) or (not task.date_end):
+ raise AssertionError("Phase Tasks not scheduled: %d uid=%r start=%r end=%r" % \
+ (task.id, task.user_id, task.date_start, task.date_end))
\ No newline at end of file
diff --git a/addons/project_long_term/test/schedule_project_tasks.yml b/addons/project_long_term/test/schedule_project_tasks.yml
index 012898b9860..b1cd70487f7 100644
--- a/addons/project_long_term/test/schedule_project_tasks.yml
+++ b/addons/project_long_term/test/schedule_project_tasks.yml
@@ -42,7 +42,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
+ user_id: project_long_term.res_users_userdeveloper0
-
Create the phase task 'Develop GUI for Modules Configuration'
@@ -54,7 +54,7 @@
state: draft
phase_id: project_phase_phase1
project_id: project_project_project1
-
+ user_id: project_long_term.res_users_userdeveloper0
-
Create the phase task 'Develop GUI for OpenERP Synchronisation'
-
@@ -89,10 +89,10 @@
Schedule tasks
-
!python {model: project.compute.tasks}: |
- self.compute_date(cr, uid, [ref("project_compute_tasks_0")], {"lang": "en_US",
- "active_model": "ir.ui.menu", "active_ids": [ref("project_long_term.menu_compute_tasks")],
- "tz": False, "record_id": 138, "project_id": ref("project_project_project1"), "active_id": ref("project_long_term.menu_compute_tasks"),
- })
+ self.compute_date(cr, uid, [ref("project_compute_tasks_0")], {"lang": "en_US", "tz": False,
+ "active_id": ref("project_long_term.menu_compute_tasks"),
+ "active_model": "ir.ui.menu", "active_ids": [ref("project_long_term.menu_compute_tasks")],
+ })
-
Check if tasks scheduled, check that either of task's start_date, end_date and user_id is not null
diff --git a/addons/project_long_term/wizard/project_compute_phases_view.xml b/addons/project_long_term/wizard/project_compute_phases_view.xml
index 3895b0cc4c8..8818684e8fa 100644
--- a/addons/project_long_term/wizard/project_compute_phases_view.xml
+++ b/addons/project_long_term/wizard/project_compute_phases_view.xml
@@ -8,20 +8,16 @@
form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
diff --git a/addons/project_long_term/wizard/project_compute_tasks.py b/addons/project_long_term/wizard/project_compute_tasks.py
index c251ca6f332..8e98f26b353 100644
--- a/addons/project_long_term/wizard/project_compute_tasks.py
+++ b/addons/project_long_term/wizard/project_compute_tasks.py
@@ -113,12 +113,13 @@ class project_compute_tasks(osv.osv_memory):
hours = str(each_task.planned_hours )+ 'H'
if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority]
+ rcre = False
if each_task.user_id:
for resrce in resources:
if resrce.__name__ == each_task.user_id.name: # check me!!
- task = create_tasks(i, hours, priorty, resrce)
- else:
- task = create_tasks(i, hours, priorty)
+ rcre = resrce
+ break
+ task = create_tasks(i, hours, priorty, rcre)
i += 1
project = BalancedProject(Project)
diff --git a/addons/project_long_term/wizard/project_compute_tasks_view.xml b/addons/project_long_term/wizard/project_compute_tasks_view.xml
index bf6fe379048..e0cd30d5622 100644
--- a/addons/project_long_term/wizard/project_compute_tasks_view.xml
+++ b/addons/project_long_term/wizard/project_compute_tasks_view.xml
@@ -7,12 +7,16 @@
project.compute.tasksform
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_long_term/wizard/project_schedule_tasks.py b/addons/project_long_term/wizard/project_schedule_tasks.py
index 5931451081b..c64e800c9c6 100644
--- a/addons/project_long_term/wizard/project_schedule_tasks.py
+++ b/addons/project_long_term/wizard/project_schedule_tasks.py
@@ -73,8 +73,6 @@ class project_schedule_task(osv.osv_memory):
return resource_objs
def compute_date(self, cr, uid, context=None):
- if context is None:
- context = {}
"""
Schedule the tasks according to resource available and priority.
"""
@@ -84,7 +82,8 @@ class project_schedule_task(osv.osv_memory):
user_obj = self.pool.get('res.users')
if context is None:
- context = {}
+ # It makes no sense to continue on empty context
+ return { 'warning': _("You must select some project phase to compute on")}
if not 'active_id' in context:
return {}
@@ -135,15 +134,18 @@ class project_schedule_task(osv.osv_memory):
hours = str(each_task.planned_hours )+ 'H'
if each_task.priority in priority_dict.keys():
priorty = priority_dict[each_task.priority]
+ resc = False
if each_task.user_id:
- for resrce in resources:
+ for resrce in resources:
if resrce.__name__ == each_task.user_id.name:
- task = create_tasks(i, hours, priorty, resrce)
- else:
- task = create_tasks(i, hours, priorty)
+ resc = resrce
+ break
+
+ task = create_tasks(i, hours, priorty, resc)
i += 1
project = BalancedProject(Project)
+
loop_no = 0
# Write back the computed dates
for t in project:
@@ -160,6 +162,8 @@ class project_schedule_task(osv.osv_memory):
}, context=ctx)
loop_no += 1
+ else:
+ return {"warning": _("No tasks to compute for this phase") }
return {}
project_schedule_task()
diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py
index bc7bc43df03..9b6b7d77f7b 100644
--- a/addons/project_mailgate/project_mailgate.py
+++ b/addons/project_mailgate/project_mailgate.py
@@ -120,88 +120,37 @@ class project_tasks(osv.osv):
message_id=message_id, attach=attach, \
context=context)
- def do_draft(self, cr, uid, ids, *args):
- res = super(project_tasks, self).do_draft(cr, uid, ids, *args)
+ def do_draft(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_tasks, self).do_draft(cr, uid, ids, *args, **kwargs)
tasks = self.browse(cr, uid, ids)
self._history(cr, uid, tasks, _('Draft'))
return res
- def do_open(self, cr, uid, ids, *args):
- res = super(project_tasks, self).do_open(cr, uid, ids, *args)
+ def do_open(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_tasks, self).do_open(cr, uid, ids, *args, **kwargs)
tasks = self.browse(cr, uid, ids)
self._history(cr, uid, tasks, _('Open'))
return res
- def do_pending(self, cr, uid, ids, *args):
- res = super(project_tasks, self).do_pending(cr, uid, ids, *args)
+ def do_pending(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_tasks, self).do_pending(cr, uid, ids, *args, **kwargs)
tasks = self.browse(cr, uid, ids)
self._history(cr, uid, tasks, _('Pending'))
return res
- def do_close(self, cr, uid, ids, *args):
- res = super(project_tasks, self).do_close(cr, uid, ids, *args)
+ def do_close(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_tasks, self).do_close(cr, uid, ids, *args, **kwargs)
tasks = self.browse(cr, uid, ids)
for task in tasks:
if task.state == 'done':
self._history(cr, uid, tasks, _('Done'))
return res
- def do_cancel(self, cr, uid, ids, *args):
- res = super(project_tasks, self).do_cancel(cr, uid, ids, *args)
+ def do_cancel(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_tasks, self).do_cancel(cr, uid, ids, *args, **kwargs)
tasks = self.browse(cr, uid, ids)
self._history(cr, uid, tasks, _('Cancel'))
return res
project_tasks()
-
-class config_compute_remaining(osv.osv_memory):
- _inherit = "config.compute.remaining"
- _name='config.compute.remaining'
-
- def compute_hours(self, cr, uid, ids, context=None):
- res = super(config_compute_remaining, self).compute_hours(cr, uid, ids, context=context)
- task_obj = self.pool.get('project.task')
- if 'active_id' in context:
- task = task_obj.browse(cr, uid, context['active_id'])
- if task.state == 'open':
- task_obj._history(cr, uid, [task], _('Open'))
- return res
-config_compute_remaining()
-
-class project_close_task(osv.osv_memory):
- _inherit = "close.task"
- _name = "close.task"
-
- def close(self, cr, uid, ids, context=None):
- res = super(project_close_task, self).close(cr, uid, ids, context=context)
- if not context:
- context={}
- task_obj = self.pool.get('project.task')
-
- if 'task_id' in context:
- task = task_obj.browse(cr, uid, context['task_id'], context=context)
- task_obj._history(cr, uid, [task], _('Done'))
- return res
-
- def confirm(self, cr, uid, ids, context=None):
- res=super(project_close_task, self).confirm(cr, uid, ids, context=context)
- task_obj = self.pool.get('project.task')
-
- if 'task_id' in context:
- close_wizard = self.read(cr, uid, ids[0], [])
- to_adr = []
- to_adr.append(context.get('send_manager', '') and close_wizard.get('manager_email', '') or '')
- to_adr.append(context.get('send_partner', '') and close_wizard.get('partner_email', '') or '')
- description = close_wizard['description']
-
- task = task_obj.browse(cr, uid, context['task_id'], context=context)
- subject = "Task '%s' closed" % task.name
- from_adr = task.user_id.address_id.email
- task_obj._history(cr, uid, [task], _('Send'), history=True, subject=subject, email=to_adr, details=description, email_from=from_adr)
- if task.state == 'done':
- task_obj._history(cr, uid, [task], _('Done'))
- return res
-
-project_close_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/i18n/fr.po b/addons/project_messages/i18n/fr.po
index 7c3229eaf44..44c435e3071 100644
--- a/addons/project_messages/i18n/fr.po
+++ b/addons/project_messages/i18n/fr.po
@@ -6,14 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 10:28:48+0000\n"
-"PO-Revision-Date: 2010-08-20 10:28:48+0000\n"
+"POT-Creation-Date: 2010-08-20 10:28+0000\n"
+"PO-Revision-Date: 2010-08-30 12:19+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: project_messages
#: field:project.messages,to_id:0
@@ -49,7 +50,8 @@ msgstr ""
#. module: project_messages
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: project_messages
@@ -78,9 +80,12 @@ msgstr ""
#. module: project_messages
#: model:ir.module.module,description:project_messages.module_meta_information
-msgid "\n"
-" This module provides the functionality to send messages within a project.\n"
-" A user can send messages individually to other user. He can even broadcast\n"
+msgid ""
+"\n"
+" This module provides the functionality to send messages within a "
+"project.\n"
+" A user can send messages individually to other user. He can even "
+"broadcast\n"
" it to all the users.\n"
" "
msgstr ""
@@ -111,4 +116,3 @@ msgstr ""
#: model:ir.module.module,shortdesc:project_messages.module_meta_information
msgid "In-Project Messaging System"
msgstr ""
-
diff --git a/addons/project_messages/project_messages.py b/addons/project_messages/project_messages.py
index f71e64d2887..88142f78984 100644
--- a/addons/project_messages/project_messages.py
+++ b/addons/project_messages/project_messages.py
@@ -55,9 +55,7 @@ class project_with_message(osv.osv):
_inherit = 'project.project'
_columns = {
- 'message_ids':fields.one2many(
- 'project.messages', 'project_id', 'Messages',
- ),
+ 'message_ids':fields.one2many('project.messages', 'project_id', 'Messages'),
}
project_with_message()
diff --git a/addons/project_messages/project_messages_view.xml b/addons/project_messages/project_messages_view.xml
index ad1588797a1..7c292f10a7e 100644
--- a/addons/project_messages/project_messages_view.xml
+++ b/addons/project_messages/project_messages_view.xml
@@ -10,7 +10,7 @@
-
+
@@ -90,8 +90,20 @@
{"search_default_to_id":uid}
+ An in-project messagery system permits an efficient and trackable communication between project members. The messages are kept in the system and can then be used for post-analysis.
-
+
+
+
+
+
+
+ Messages
+ project.messages
+ form
+ tree,form
+
+
diff --git a/addons/project_mrp/__init__.py b/addons/project_mrp/__init__.py
index c2ef40bbb1e..364dec5a437 100644
--- a/addons/project_mrp/__init__.py
+++ b/addons/project_mrp/__init__.py
@@ -18,6 +18,6 @@
# along with this program. If not, see .
#
##############################################################################
+
import project_procurement
import project_mrp
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_mrp/i18n/tr.po b/addons/project_mrp/i18n/tr.po
index ced7c23a54f..62f391d5bc6 100644
--- a/addons/project_mrp/i18n/tr.po
+++ b/addons/project_mrp/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:04+0000\n"
+"PO-Revision-Date: 2010-09-08 09:08+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:56+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: project_mrp
diff --git a/addons/project_mrp/project_mrp.py b/addons/project_mrp/project_mrp.py
index d5a76812a2d..b027e9eb60f 100644
--- a/addons/project_mrp/project_mrp.py
+++ b/addons/project_mrp/project_mrp.py
@@ -29,31 +29,30 @@ class project_task(osv.osv):
'procurement_id': fields.many2one('procurement.order', 'Procurement', ondelete='set null')
}
- def do_close(self, cr, uid, ids, *args):
- res = super(project_task, self).do_close(cr, uid, ids, *args)
- tasks = self.browse(cr, uid, ids)
- for task in tasks:
+ def _validate_subflows(self, cr, uid, ids):
+ for task in self.browse(cr, uid, ids):
if task.procurement_id:
wf_service = netsvc.LocalService("workflow")
wf_service.trg_validate(uid, 'procurement.order', task.procurement_id.id, 'subflow.done', cr)
+
+ def do_close(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_task, self).do_close(cr, uid, ids, *args, **kwargs)
+ self._validate_subflows(cr, uid, ids)
return res
- def do_cancel(self, cr, uid, ids, *args):
- res = super(project_task, self).do_cancel(cr, uid, ids, *args)
- tasks = self.browse(cr, uid, ids)
- for task in tasks:
- if task.procurement_id:
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'procurement.order', task.procurement_id.id, 'subflow.cancel', cr)
- return True
+ def do_cancel(self, cr, uid, ids, *args, **kwargs):
+ res = super(project_task, self).do_cancel(cr, uid, ids, *args, **kwargs)
+ self._validate_subflows(cr, uid, ids)
+ return res
project_task()
+
class product_product(osv.osv):
_inherit = "product.product"
_columns = {
'project_id': fields.many2one('project.project', 'Project', ondelete='set null',)
}
-product_product()
+product_product()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py
index 251a4600081..393961a005d 100644
--- a/addons/project_mrp/project_procurement.py
+++ b/addons/project_mrp/project_procurement.py
@@ -29,83 +29,32 @@ class procurement_order(osv.osv):
_columns = {
'task_id': fields.many2one('project.task', 'Task')
}
+ def check_produce_service(self, cr, uid, procurement, context=[]):
+ return True
def action_produce_assign_service(self, cr, uid, ids, context=None):
if context is None:
context = {}
for procurement in self.browse(cr, uid, ids):
- sline = self.pool.get('sale.order.line')
- product_obj=self.pool.get('product.product')
- 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.
- project_obj = self.pool.get('project.project')
- proj_name = tools.ustr(so_ref)
- product_project = procurement.product_id.project_id or False
- proj_exist_id = project_obj.search(cr, uid, [('name', '=', proj_name)], context=context)
- if not proj_exist_id:
- parent_project = False
- if product_project:
- parent_project = product_project.analytic_account_id.id
- project_id = project_obj.create(cr, uid, {'name': proj_name, 'partner_id': partner_id, 'parent_id': parent_project})
- else:
- project_id = proj_exist_id[0]
-
self.write(cr, uid, [procurement.id], {'state': 'running'})
-
- name_task = ('','')
- planned_hours=0.0
- 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 '')
- planned_hours= procurement.product_id.sale_delay + procurement.product_id. produce_delay
+ planned_hours = procurement.product_qty
task_id = self.pool.get('project.task').create(cr, uid, {
- 'name': '%s:%s' % name_task,
+ 'name': '%s:%s' % (procurement.origin or '', procurement.name),
'date_deadline': procurement.date_planned,
'planned_hours':planned_hours,
'remaining_hours': planned_hours,
'user_id': procurement.product_id.product_manager.id,
- 'notes': "b"+(l and l.order_id.note or ''),
+ 'notes': procurement.note,
'procurement_id': procurement.id,
- 'description': content,
+ 'description': procurement.note,
'date_deadline': procurement.date_planned,
+ 'project_id': procurement.product_id.project_id and procurement.product_id.project_id.id or False,
'state': 'draft',
- 'partner_id': l and l.order_id.partner_id.id or False,
'company_id': procurement.company_id.id,
- 'project_id': project_id,
},context=context)
self.write(cr, uid, [procurement.id],{'task_id':task_id})
- product_obj.write(cr,uid,[procurement.product_id.id],{'project_id':project_id})
return task_id
procurement_order()
-# 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_mrp/test/project_task_procurement.yml b/addons/project_mrp/test/project_task_procurement.yml
index 50bc74f82ae..a997f09fd04 100644
--- a/addons/project_mrp/test/project_task_procurement.yml
+++ b/addons/project_mrp/test/project_task_procurement.yml
@@ -35,7 +35,6 @@
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
@@ -49,27 +48,23 @@
I check the procurements.
-
!python {model: procurement.order}: |
- 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!')
+ assert proc_ids, 'No Procurements!'
-
The scheduler runs.
-
!function {model: procurement.order, name: run_scheduler}:
- model: procurement.order
- search: "[('state','=','confirmed')]"
+ search: "[]"
-
- Now I check the tasks.
--
- I see that one task is created for my sale order.
+ Now I check 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
+ task_id = self.search(cr, uid, [('name','like', order.name)])
+ assert task_id, 'No Task is created!'
+
diff --git a/addons/project_planning/project_planning_report.xml b/addons/project_planning/project_planning_report.xml
index 2b71602f97c..6a60850124b 100644
--- a/addons/project_planning/project_planning_report.xml
+++ b/addons/project_planning/project_planning_report.xml
@@ -1,6 +1,10 @@
-
+
\ No newline at end of file
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index 38c65315ef5..93a5c2c81b7 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -100,7 +100,6 @@
attrs="{'readonly':[('state','!=','draft')]}"
on_change="onchange_planned(planned_hours,effective_hours)"/>
-
@@ -110,7 +109,7 @@
-
+
diff --git a/addons/project_planning/report/__init__.py b/addons/project_planning/report/__init__.py
index 9a6ca02408e..230f7e6a702 100644
--- a/addons/project_planning/report/__init__.py
+++ b/addons/project_planning/report/__init__.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL ().
#
@@ -15,8 +15,8 @@
# 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 .
+# along with this program. If not, see .
#
##############################################################################
-
+import report_planning
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account/project/wizard/account_analytic_check.py b/addons/project_planning/report/report_planning.py
similarity index 53%
rename from addons/account/project/wizard/account_analytic_check.py
rename to addons/project_planning/report/report_planning.py
index 53327963151..67fd118491f 100644
--- a/addons/account/project/wizard/account_analytic_check.py
+++ b/addons/project_planning/report/report_planning.py
@@ -18,40 +18,19 @@
# along with this program. If not, see .
#
##############################################################################
+
import time
-from osv import osv, fields
+from report import report_sxw
-class account_analytic_check(osv.osv_memory):
- _name = 'account.analytic.check'
- _description = 'Account Analytic Check'
+class report_planning(report_sxw.rml_parse):
+ def __init__(self, cr, uid, name, context=None):
+ super(report_planning, self).__init__(cr, uid, name, context=context)
+ self.localcontext.update({
+ 'time': time,
+ })
- _columns = {
- 'date1': fields.date('Start of period', required=True),
- 'date2': fields.date('End of period', required=True),
- }
-
- _defaults = {
- 'date1':time.strftime('%Y-01-01'),
- 'date2':time.strftime('%Y-%m-%d')
- }
-
- def check_report(self, cr, uid, ids, context=None):
- datas = {}
- if context is None:
- context = {}
- data = self.read(cr, uid, ids)[0]
- datas = {
- 'ids': context.get('active_ids',[]),
- 'model': 'account.account',
- 'form': data
- }
- return {
- 'type': 'ir.actions.report.xml',
- 'report_name': 'account.analytic.account.analytic.check',
- 'datas': datas,
- }
-
-account_analytic_check()
+report_sxw.report_sxw('report.report_account_analytic.planning.print','report_account_analytic.planning','addons/project_planning/report/report_planning.rml',parser=report_planning, header='internal')
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/project_planning/report/report_planning.rml b/addons/project_planning/report/report_planning.rml
index 976af76e9d6..8a6fe372661 100644
--- a/addons/project_planning/report/report_planning.rml
+++ b/addons/project_planning/report/report_planning.rml
@@ -1,8 +1,8 @@
-
+
-
+
@@ -12,7 +12,7 @@
-
+
@@ -22,17 +22,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -53,15 +42,22 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
@@ -69,17 +65,10 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
@@ -88,8 +77,8 @@
+
- [[ repeatIn(objects, 'o') ]]
@@ -98,21 +87,21 @@
- HR Planning
+ HR Planning
-
+
@@ -397,4 +364,4 @@
-
+
\ No newline at end of file
diff --git a/addons/purchase/report/request_quotation.rml b/addons/purchase/report/request_quotation.rml
index 961ce8239b4..ed2f1859f79 100644
--- a/addons/purchase/report/request_quotation.rml
+++ b/addons/purchase/report/request_quotation.rml
@@ -1,6 +1,6 @@
-
+
@@ -33,16 +33,16 @@
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -66,8 +66,8 @@
+
- [[repeatIn(objects,'order')]][[ setLang(order.partner_id.lang) ]]
@@ -80,7 +80,7 @@
[[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.street) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street) or '']][[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.street2) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.street2) or '']][[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.zip) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.zip) or '' ]] [[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.city) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.city) or '' ]]
- [[ (order.dest_address_id and order.dest_address_id and order.dest_address_id.state_id and order.dest_address_id.state_id.name) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.state_id and order.warehouse_id.partner_address_id.state_id.name) or '']] [[(order.dest_address_id and order.dest_address_id and order.dest_address_id.country_id and order.dest_address_id.country_id.name) or (order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.country_id and order.warehouse_id.partner_address_id.country_id.name) or '' ]]
+ [[(order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.state_id and order.warehouse_id.partner_address_id.state_id.name) or order.partner_address_id and order.partner_address_id.state_id and order.partner_address_id.state_id.name]] [[(order.warehouse_id and order.warehouse_id.partner_address_id and order.warehouse_id.partner_address_id.country_id and order.warehouse_id.partner_address_id.country_id.name) or order.partner_address_id.country_id.name ]]
@@ -88,7 +88,7 @@
- [[ order.partner_id.name ]] [[ order.partner_id.title or '' ]]
+ [[ (order.partner_id and order.partner_id.title) or '' ]] [[ order.partner_id.name ]][[ (order.partner_address_id and order.partner_address_id.title) or '' ]] [[ order.partner_address_id.name ]] [[ (order.partner_address_id and order.partner_address_id.street) or '']] [[ order.partner_address_id.street2 ]][[ (order.partner_address_id and order.partner_address_id.zip) or '' ]] [[ (order.partner_address_id and order.partner_address_id.city) or '' ]]
@@ -124,13 +124,13 @@
[[repeatIn(order.order_line,'order_line')]]
-
+
-
-
-
+ [[ format(order.notes or '') ]]
@@ -162,4 +160,4 @@
[[ user.signature or '' ]]
-
+
\ No newline at end of file
diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml
index a991b79d0e9..2b741536d3b 100644
--- a/addons/purchase/stock_view.xml
+++ b/addons/purchase/stock_view.xml
@@ -8,7 +8,7 @@
form
-
+
diff --git a/addons/purchase/wizard/purchase_installer.py b/addons/purchase/wizard/purchase_installer.py
index 010f847ad99..bf106adc3ac 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="Manages your Purchase Requisition and allow you to easily keep track and manage all your purchase orders."),
+ 'purchase_requisition':fields.boolean('Purchase Requisition',help="Manages your Purchase Requisition and allows you to easily keep track and manage all your purchase orders."),
'purchase_analytic_plans': fields.boolean('Purchase Analytic Plans',help="Manages analytic distribution and purchase orders.")
}
purchase_installer()
diff --git a/addons/purchase/wizard/purchase_installer.xml b/addons/purchase/wizard/purchase_installer.xml
index 369849e1b18..b39dbc6003b 100644
--- a/addons/purchase/wizard/purchase_installer.xml
+++ b/addons/purchase/wizard/purchase_installer.xml
@@ -8,20 +8,20 @@
-
- Purchase Modules Configuration
-
-
-
-
-
- Configure Your Purchase System
-
-
- In this page, you can extend your purchase system with purchase requisition facility and analytic distribution of purchase orders.
-
+
+ Purchase Modules Configuration
+
+
+
+
+
+ Configure Your Purchase System
+
+
+ In this page, you can extend your purchase system with purchase requisition facility and analytic distribution of purchase orders.
+ Configure
@@ -43,21 +43,10 @@
new
-
+ 3
-
- ir.actions.todo
- purchase_installer_action_replace
- tree
-
-
-
-
-
-
-
diff --git a/addons/purchase_requisition/__init__.py b/addons/purchase_requisition/__init__.py
index ea44f749bbf..0c1aab5b6e7 100644
--- a/addons/purchase_requisition/__init__.py
+++ b/addons/purchase_requisition/__init__.py
@@ -20,5 +20,6 @@
import purchase_requisition
import wizard
+import report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/purchase_requisition/__openerp__.py b/addons/purchase_requisition/__openerp__.py
index e8811499a9f..27be1f3ce64 100644
--- a/addons/purchase_requisition/__openerp__.py
+++ b/addons/purchase_requisition/__openerp__.py
@@ -32,7 +32,9 @@
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ["wizard/purchase_requisition_partner_view.xml",
+ "purchase_requisition_data.xml",
"purchase_requisition_view.xml",
+ "purchase_requisition_report.xml",
"security/ir.model.access.csv","purchase_requisition_sequence.xml"
],
"active": False,
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index 4e7ebb19a64..13a760c9b87 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -40,6 +40,7 @@ class purchase_requisition(osv.osv):
'company_id': fields.many2one('res.company', 'Company', required=True),
'purchase_ids' : fields.one2many('purchase.order','requisition_id','Purchase Orders',states={'done': [('readonly', True)]}),
'line_ids' : fields.one2many('purchase.requisition.line','requisition_id','Products to Purchase',states={'done': [('readonly', True)]}),
+ 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'),
'state': fields.selection([('draft','Draft'),('in_progress','In Progress'),('cancel','Cancelled'),('done','Done')], 'State', required=True)
}
_defaults = {
@@ -51,6 +52,15 @@ class purchase_requisition(osv.osv):
'name': lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'purchase.order.requisition'),
}
+ def copy(self, cr, uid, id, default=None,context={}):
+ if not default:
+ default = {}
+ default.update({
+ 'state':'draft',
+ 'purchase_ids':[],
+ 'name': self.pool.get('ir.sequence').get(cr, uid, 'purchase.order.requisition'),
+ })
+ return super(purchase_requisition, self).copy(cr, uid, id, default, context)
def tender_cancel(self, cr, uid, ids, context=None):
purchase_order_obj = self.pool.get('purchase.order')
for purchase in self.browse(cr, uid, ids):
@@ -64,9 +74,6 @@ class purchase_requisition(osv.osv):
return True
def tender_in_progress(self, cr, uid, ids, context=None):
- for quotations in self.browse(cr, uid, ids):
- if not quotations.purchase_ids:
- raise osv.except_osv(_('Purchase order required'),('You should have atleast one purchase order line defined for this tender'))
self.write(cr, uid, ids, {'state':'in_progress'} ,context=context)
for (id,name) in self.name_get(cr, uid, ids):
message = _('Tender') + " '" + name + "' "+ _(" is In Progress")
@@ -172,6 +179,8 @@ class procurement_order(osv.osv):
'name': sequence_obj.get(cr, uid, 'purchase.order.requisition'),
'origin': procurement.name,
'date_end': procurement.date_planned,
+ 'warehouse_id':procurement.purchase_id and procurement.purchase_id.warehouse_id.id,
+ 'company_id':procurement.company_id.id,
'line_ids': [(0,0,{
'product_id': procurement.product_id.id,
'product_uom_id': procurement.product_uom.id,
diff --git a/addons/purchase_requisition/purchase_requisition_data.xml b/addons/purchase_requisition/purchase_requisition_data.xml
new file mode 100644
index 00000000000..73b828161a1
--- /dev/null
+++ b/addons/purchase_requisition/purchase_requisition_data.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/purchase_requisition/purchase_requisition_report.xml b/addons/purchase_requisition/purchase_requisition_report.xml
new file mode 100644
index 00000000000..97d510fe752
--- /dev/null
+++ b/addons/purchase_requisition/purchase_requisition_report.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/addons/purchase_requisition/purchase_requisition_view.xml b/addons/purchase_requisition/purchase_requisition_view.xml
index 8a9c4375e52..eed99cefd6c 100644
--- a/addons/purchase_requisition/purchase_requisition_view.xml
+++ b/addons/purchase_requisition/purchase_requisition_view.xml
@@ -2,17 +2,6 @@
-
- purchase.order.tree.inherit
- tree
- purchase.order
-
-
-
-
-
-
- purchase.order.form.inherit
@@ -20,12 +9,23 @@
purchase.order
-
+
+
+ purchase.order.list.select.inherit
+ form
+ purchase.order
+
+
+
+
+
+
+ purchase.requisition.formform
@@ -39,6 +39,7 @@
+
@@ -77,12 +78,15 @@
+
+
+
-
@@ -123,6 +127,7 @@
+
@@ -181,5 +186,12 @@
+
+
diff --git a/addons/purchase_requisition/report/__init__.py b/addons/purchase_requisition/report/__init__.py
new file mode 100644
index 00000000000..a2d5684cd1d
--- /dev/null
+++ b/addons/purchase_requisition/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 requisition
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/purchase_requisition/report/purchase_requisition.rml b/addons/purchase_requisition/report/purchase_requisition.rml
new file mode 100644
index 00000000000..95f1dd47d31
--- /dev/null
+++ b/addons/purchase_requisition/report/purchase_requisition.rml
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [[ repeatIn(objects,'requisition') ]]
+ Purchase for Requisitions [[ requisition.name ]]
+
+
+
+
+
+
+ Requisition Reference
+
+
+ Requisition Date
+
+
+ Type
+
+
+ Origin
+
+
+
+
+ [[ requisition.name ]]
+
+
+ [[ requisition.date_start ]]
+
+
+ [[ requisition.exclusive=='multiple' and 'Multiple Requisitions' or requisition.exclusive=='exclusive' and 'Purchase Requisitions (exclusive)' ]]
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/purchase_requisition/report/requisition.py b/addons/purchase_requisition/report/requisition.py
new file mode 100644
index 00000000000..4e3f3dd93a3
--- /dev/null
+++ b/addons/purchase_requisition/report/requisition.py
@@ -0,0 +1,37 @@
+# -*- 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 time
+from report import report_sxw
+from osv import osv
+import pooler
+
+class requisition(report_sxw.rml_parse):
+ def __init__(self, cr, uid, name, context):
+ super(requisition, self).__init__(cr, uid, name, context=context)
+ self.localcontext.update({
+ 'time': time,
+ })
+
+report_sxw.report_sxw('report.purchase.requisition','purchase.requisition','addons/purchase_requisition/report/purchase_requisition.rml',parser=requisition)
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
diff --git a/addons/purchase_requisition/wizard/purchase_requisition_partner.py b/addons/purchase_requisition/wizard/purchase_requisition_partner.py
index f87460489ea..297286ce472 100644
--- a/addons/purchase_requisition/wizard/purchase_requisition_partner.py
+++ b/addons/purchase_requisition/wizard/purchase_requisition_partner.py
@@ -92,7 +92,7 @@ class purchase_requisition_partner(osv.osv_memory):
pricelist_id = partner.property_product_pricelist_purchase and partner.property_product_pricelist_purchase.id or False
price = pricelist_obj.price_get(cr, uid, [pricelist_id], line.product_id.id, line.product_qty, False, {'uom': uom_id})[pricelist_id]
product = prod_obj.browse(cr, uid, line.product_id.id, context=context)
-
+ location_id = self.pool.get('stock.warehouse').read(cr, uid, [tender.warehouse_id.id], ['lot_input_id'])[0]['lot_input_id'][0]
purchase_order_line= {
'name': product.partner_ref,
@@ -118,6 +118,10 @@ class purchase_requisition_partner(osv.osv_memory):
'company_id': tender.company_id.id,
'fiscal_position': partner.property_account_position and partner.property_account_position.id or False,
'requisition_id':tender.id,
+ 'notes':tender.description,
+ 'warehouse_id':tender.warehouse_id.id and tender.warehouse_id.id ,
+ 'location_id':location_id,
+ 'company_id':tender.company_id.id,
})
order_ids=[]
for order_line in list_line:
diff --git a/addons/purchase_requisition/wizard/purchase_requisition_partner_view.xml b/addons/purchase_requisition/wizard/purchase_requisition_partner_view.xml
index c7a38cf64e1..6214c4fad51 100644
--- a/addons/purchase_requisition/wizard/purchase_requisition_partner_view.xml
+++ b/addons/purchase_requisition/wizard/purchase_requisition_partner_view.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/addons/report_designer/installer.py b/addons/report_designer/installer.py
index d67ebabb77e..4dd35fd4560 100644
--- a/addons/report_designer/installer.py
+++ b/addons/report_designer/installer.py
@@ -29,14 +29,14 @@ class report_designer_installer(osv.osv_memory):
'base_report_designer':fields.boolean('OpenOffice Report Designer',help="This module adds wizards to import/export .SXW report that "
"you can modify in OpenOffice.Once you have modified it you can "
"upload the report using the same wizard."),
- 'base_report_creator':fields.boolean('Query Builder',help="his module allows you to create any statistic "
+ 'base_report_creator':fields.boolean('Query Builder',help="Query Builder allows you to create any statistic "
"reports on several objects. It's a SQL query builder and browser for and users. "
"After installation, it adds a menu to define custom report in the Dashboard menu."),
'olap':fields.boolean('Business Intelligence Report',help="Olap module is used to install BI module in client. Olap provides Online "
"Analytical Process with the mdx query. BI provides Cube Browsing and Cube Designing. "
- "After installation you will get Cube Browser and Cube Desinger in Reporting Menu. "
+ "After installation you will get Cube Browser and Cube Designer in Reporting Menu. "
"Cube Browser is used to generate the reports with table view (mdx view) of mdx query "
- "and Cube designer is used to make cubes in BI."),
+ "and Cube Designer is used to make cubes in BI."),
}
report_designer_installer()
diff --git a/addons/report_designer/report_designer_installer.xml b/addons/report_designer/report_designer_installer.xml
index 6a48c919460..79381691d32 100644
--- a/addons/report_designer/report_designer_installer.xml
+++ b/addons/report_designer/report_designer_installer.xml
@@ -8,11 +8,11 @@
-
+
-
+
\ No newline at end of file
diff --git a/addons/stock/report/packing.rml b/addons/stock/report/packing.rml
index 7288615da6d..15fa35e07e9 100644
--- a/addons/stock/report/packing.rml
+++ b/addons/stock/report/packing.rml
@@ -1,6 +1,6 @@
-
+
@@ -136,7 +136,7 @@
[[ (picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.title) or '' ]] [[ picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.name ]][[ picking.address_id and picking.address_id.street or '' ]][[ picking.address_id and picking.address_id.zip or '' ]] [[ picking.address_id and picking.address_id.city or '']]
-
+
@@ -276,7 +276,7 @@
-
+
[[ ([line for line in picking.move_lines if (line.state == 'draft' )]) and 'Non Assigned Products:' or removeParentNode('para') ]]
diff --git a/addons/stock/report/picking.rml b/addons/stock/report/picking.rml
index 3ef7ce2e866..3b837f51844 100644
--- a/addons/stock/report/picking.rml
+++ b/addons/stock/report/picking.rml
@@ -1,6 +1,6 @@
-
+
@@ -97,7 +97,7 @@
-
+
@@ -125,35 +125,20 @@
-
-
-
-
-
[[ (picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.title) or '' ]] [[ picking.address_id and picking.address_id.partner_id and picking.address_id.partner_id.name ]][[ picking.address_id and picking.address_id.street or '' ]]
+ [[ picking.address_id and picking.address_id.street2 or removeParentNode('para') ]][[ picking.address_id and picking.address_id.zip or '' ]] [[ picking.address_id and picking.address_id.city or '']]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ [[ (picking.address_id and picking.address_id.state_id and picking.address_id.state_id.name) or removeParentNode('para') ]]
+ [[ (picking.address_id and picking.address_id.country_id and picking.address_id.country_id.name) or '' ]]
- [[ picking.address_id and 'Shipping Address :' or removeParentNode('para') ]]
- [[ ( picking.address_id and picking.address_id.title) or '' ]] [[ (picking.address_id and picking.address_id.name) or '' ]]
+ [[ (picking.address_id and picking.address_id.title) or '' ]] [[ (picking.address_id and picking.address_id.name) or '' ]] [[ (picking.address_id and picking.address_id.street) or '' ]]
- [[ (picking.address_id and picking.address_id.zip) or '' ]] [[ (picking.address_id and picking.address_id.city) or '' ]] [[ (picking.address_id and picking.address_id.state_id and picking.address_id.state_id.name) or '' ]]
+ [[ (picking.address_id and picking.address_id.street2) or removeParentNode('para') ]]
+ [[ (picking.address_id and picking.address_id.zip) or '' ]] [[ (picking.address_id and picking.address_id.city) or '' ]]
+ [[ (picking.address_id and picking.address_id.state_id and picking.address_id.state_id.name) or removeParentNode('para') ]][[ (picking.address_id and picking.address_id.country_id and picking.address_id.country_id.name) or '' ]]
- [[ 'weight' in picking._columns.keys() and picking.weight or '']]
+ [[ 'weight' in picking._columns.keys() and picking.weight or '']]
-
+
Description
@@ -227,22 +212,16 @@
State
- Quantity
+ Quantity
Location
-
-
-
-
-
- [[ repeatIn([line for line in picking.move_lines if (line.state == 'confirmed' or line.state=='done' or line.state=='assigned')],'move_lines') ]]
- [[ picking.move_lines or removeParentNode('blockTable')]]
+ [[ picking.move_lines or removeParentNode('blockTable')]]
- [[ (move_lines.location_id and move_lines.location_id.name) or '' ]]
+ [[ (move_lines.location_id and move_lines.location_id.name) or '' ]]
-
-
-
-
-
-
-
-
-
-
-
+
+
+ [[ ([line for line in picking.move_lines if (line.state == 'draft' or line.state=='waiting' )]) and 'Non Assigned Products:' or removeParentNode('para') ]][[ repeatIn([line for line in picking.move_lines if (line.state == 'draft' or line.state=='waiting')],'move_lines') ]]
- [[ picking.move_lines or removeParentNode('blockTable')]]
+ [[ picking.move_lines or removeParentNode('blockTable')]]
[[ p.location_id.name ]]
@@ -208,4 +222,4 @@
-
+
\ No newline at end of file
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index c76bc609a65..5ecbd5f40ba 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -28,6 +28,7 @@ from tools.translate import _
import netsvc
import tools
import decimal_precision as dp
+import logging
#----------------------------------------------------------
@@ -39,7 +40,7 @@ class stock_incoterms(osv.osv):
_columns = {
'name': fields.char('Name', size=64, required=True, help="Incoterms are series of sales terms.They are used to divide transaction costs and responsibilities between buyer and seller and reflect state-of-the-art transportation practices."),
'code': fields.char('Code', size=3, required=True, help="Code for Incoterms"),
- 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the incoterms without removing it."),
+ 'active': fields.boolean('Active', help="By unchecking the active field, you may hide an INCOTERM without deleting it."),
}
_defaults = {
'active': True,
@@ -167,9 +168,17 @@ class stock_location(osv.osv):
_columns = {
'name': fields.char('Location Name', size=64, required=True, translate=True),
- 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the stock location without removing it."),
- 'usage': fields.selection([('supplier', 'Supplier Location'), ('view', 'View'), ('internal', 'Internal Location'), ('customer', 'Customer Location'), ('inventory', 'Inventory'), ('procurement', 'Procurement'), ('production', 'Production'), ('transit', 'Transit Location for Inter-Companies Transfers')], 'Location Type', required=True),
- 'allocation_method': fields.selection([('fifo', 'FIFO'), ('lifo', 'LIFO'), ('nearest', 'Nearest')], 'Allocation Method', required=True),
+ 'active': fields.boolean('Active', help="By unchecking the active field, you may hide a location without deleting it."),
+ 'usage': fields.selection([('supplier', 'Supplier Location'), ('view', 'View'), ('internal', 'Internal Location'), ('customer', 'Customer Location'), ('inventory', 'Inventory'), ('procurement', 'Procurement'), ('production', 'Production'), ('transit', 'Transit Location for Inter-Companies Transfers')], 'Location Type', required=True,
+ help="""* Supplier Location: Virtual location representing the source location for products coming from your suppliers
+ \n* View: Virtual location used to create a hierarchical structures for your warehouse, aggregating its child locations ; can't directly contain products
+ \n* Internal Location: Physical locations inside your own warehouses,
+ \n* Customer Location: Virtual location representing the destination location for products sent to your customers
+ \n* Inventory: Virtual location serving as counterpart for inventory operations used to correct stock levels (Physical inventories)
+ \n* Procurement: Virtual location serving as temporary counterpart for procurement operations when the source (supplier or production) is not known yet. This location should be empty when the procurement scheduler has finished running.
+ \n* Production: Virtual counterpart location for production operations: this location consumes the raw material and produces finished products
+ """, select = True),
+ # temporarily removed, as it's unused: 'allocation_method': fields.selection([('fifo', 'FIFO'), ('lifo', 'LIFO'), ('nearest', 'Nearest')], 'Allocation Method', required=True),
'complete_name': fields.function(_complete_name, method=True, type='char', size=100, string="Location Name"),
'stock_real': fields.function(_product_qty_available, method=True, type='float', string='Real Stock', multi="stock"),
@@ -178,44 +187,46 @@ class stock_location(osv.osv):
'location_id': fields.many2one('stock.location', 'Parent Location', select=True, ondelete='cascade'),
'child_ids': fields.one2many('stock.location', 'location_id', 'Contains'),
- 'chained_journal_id': fields.many2one('stock.journal', 'Chained Journal'),
+ 'chained_journal_id': fields.many2one('stock.journal', 'Chaining Journal',help="Inventory Journal in which the chained move will be written, if the Chaining Type is not Transparent (no journal is used if left empty)"),
'chained_location_id': fields.many2one('stock.location', 'Chained Location If Fixed'),
'chained_location_type': fields.selection([('none', 'None'), ('customer', 'Customer'), ('fixed', 'Fixed Location')],
'Chained Location Type', required=True,
- help="This field is set to determine the destination location.\n" \
- "If the field is set to 'customer', the location is given by the properties of the partner form.\n"\
- "If the field is set to 'fixed', the destination location is given by the field Location if link is fixed."),
+ help="Determines whether this location is chained to another location, i.e. any incoming product in this location \n" \
+ "should next go to the chained location. The chained location is determined according to the type :"\
+ "\n* None: No chaining at all"\
+ "\n* Customer: The chained location will be taken from the Customer Location field on the Partner form of the Partner that is specified in the Picking list of the incoming products." \
+ "\n* Fixed Location: The chained location is taken from the next field: Chained Location if Fixed." \
+ ),
'chained_auto_packing': fields.selection(
[('auto', 'Automatic Move'), ('manual', 'Manual Operation'), ('transparent', 'Automatic No Step Added')],
- 'Automatic Move',
+ 'Chaining Type',
required=True,
help="This is used only if you select a chained location type.\n" \
"The 'Automatic Move' value will create a stock move after the current one that will be "\
"validated automatically. With 'Manual Operation', the stock move has to be validated "\
"by a worker. With 'Automatic No Step Added', the location is replaced in the original move."
),
- 'chained_picking_type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', help="Shipping type specify of the chained move, goods coming in or going out."),
- 'chained_company_id': fields.many2one('res.company', 'Chained Company', help='Set here the belonging company of the chained move'),
- 'chained_delay': fields.integer('Chained lead time (days)'),
- 'address_id': fields.many2one('res.partner.address', 'Location Address'),
- 'icon': fields.selection(tools.icons, 'Icon', size=64),
+ 'chained_picking_type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', help="Shipping Type of the Picking List that will contain the chained move (leave empty to automatically detect the type based on the source and destination locations)."),
+ 'chained_company_id': fields.many2one('res.company', 'Chained Company', help='The company the Picking List containing the chained move will belong to (leave empty to use the default company determination rules'),
+ 'chained_delay': fields.integer('Chaining Lead Time',help="Delay between original move and chained move in days"),
+ 'address_id': fields.many2one('res.partner.address', 'Location Address',help="Address of customer or supplier."),
+ 'icon': fields.selection(tools.icons, 'Icon', size=64,help="Icon show in hierarchical tree view"),
'comment': fields.text('Additional Information'),
- 'posx': fields.integer('Corridor (X)'),
- 'posy': fields.integer('Shelves (Y)'),
- 'posz': fields.integer('Height (Z)'),
+ 'posx': fields.integer('Corridor (X)',help="Optional localization details, for information purpose only"),
+ 'posy': fields.integer('Shelves (Y)', help="Optional localization details, for information purpose only"),
+ 'posz': fields.integer('Height (Z)', help="Optional localization details, for information purpose only"),
'parent_left': fields.integer('Left Parent', select=1),
'parent_right': fields.integer('Right Parent', select=1),
'stock_real_value': fields.function(_product_value, method=True, type='float', string='Real Stock Value', multi="stock"),
'stock_virtual_value': fields.function(_product_value, method=True, type='float', string='Virtual Stock Value', multi="stock"),
- 'company_id': fields.many2one('res.company', 'Company', select=1, help='Let this field empty if this location is shared for every companies'),
- 'scrap_location': fields.boolean('Scrap Location', help='Check this box if the current location is a place for destroyed items'),
+ 'company_id': fields.many2one('res.company', 'Company', select=1, help='Let this field empty if this location is shared between all companies'),
+ 'scrap_location': fields.boolean('Scrap Location', help='Check this box to allow using this location to put scrapped/damaged goods.'),
}
_defaults = {
'active': True,
'usage': 'internal',
- 'allocation_method': 'fifo',
'chained_location_type': 'none',
'chained_auto_packing': 'manual',
'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location', context=c),
@@ -274,6 +285,9 @@ class stock_location(osv.osv):
pricetype = self.pool.get('product.price.type').browse(cr, uid, price_type_id)
context['currency_id'] = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
+ # To be able to offer recursive or non-recursive reports we need to prevent recursive quantities by default
+ context['compute_child'] = False
+
if not product_ids:
product_ids = product_obj.search(cr, uid, [])
@@ -360,20 +374,82 @@ class stock_location(osv.osv):
def _product_virtual_get(self, cr, uid, id, product_ids=False, context=None, states=['done']):
return self._product_all_get(cr, uid, id, product_ids, context, ['confirmed', 'waiting', 'assigned', 'done'])
- def _product_reserve(self, cr, uid, ids, product_id, product_qty, context=None):
+ def _product_reserve(self, cr, uid, ids, product_id, product_qty, context=None, lock=False):
"""
- @param product_id: Id of product
- @param product_qty: Quantity of product
- @return: List of Values or False
+ Attempt to find a quantity ``product_qty`` (in the product's default uom or the uom passed in ``context``) of product ``product_id``
+ in locations with id ``ids`` and their child locations. If ``lock`` is True, the stock.move lines
+ of product with id ``product_id`` in the searched location will be write-locked using Postgres's
+ "FOR UPDATE NOWAIT" option until the transaction is committed or rolled back, to prevent reservin
+ twice the same products.
+ If ``lock`` is True and the lock cannot be obtained (because another transaction has locked some of
+ the same stock.move lines), a log line will be output and False will be returned, as if there was
+ not enough stock.
+
+ :param product_id: Id of product to reserve
+ :param product_qty: Quantity of product to reserve (in the product's default uom or the uom passed in ``context``)
+ :param lock: if True, the stock.move lines of product with id ``product_id`` in all locations (and children locations) with ``ids`` will
+ be write-locked using postgres's "FOR UPDATE NOWAIT" option until the transaction is committed or rolled back. This is
+ to prevent reserving twice the same products.
+ :param context: optional context dictionary: it a 'uom' key is present it will be used instead of the default product uom to
+ compute the ``product_qty`` and in the return value.
+ :return: List of tuples in the form (qty, location_id) with the (partial) quantities that can be taken in each location to
+ reach the requested product_qty (``qty`` is expressed in the default uom of the product), of False if enough
+ products could not be found, or the lock could not be obtained (and ``lock`` was True).
"""
result = []
amount = 0.0
if context is None:
context = {}
for id in self.search(cr, uid, [('location_id', 'child_of', ids)]):
- cr.execute("select product_uom,sum(product_qty) as product_qty from stock_move where location_dest_id=%s and location_id<>%s and product_id=%s and state='done' group by product_uom", (id, id, product_id))
+ if lock:
+ try:
+ # Must lock with a separate select query because FOR UPDATE can't be used with
+ # aggregation/group by's (when individual rows aren't identifiable).
+ # We use a SAVEPOINT to be able to rollback this part of the transaction without
+ # failing the whole transaction in case the LOCK cannot be acquired.
+ cr.execute("SAVEPOINT stock_location_product_reserve")
+ cr.execute("""SELECT id FROM stock_move
+ WHERE product_id=%s AND
+ (
+ (location_dest_id=%s AND
+ location_id<>%s AND
+ state='done')
+ OR
+ (location_id=%s AND
+ location_dest_id<>%s AND
+ state in ('done', 'assigned'))
+ )
+ FOR UPDATE of stock_move NOWAIT""", (product_id, id, id, id, id), log_exceptions=False)
+ except Exception:
+ # Here it's likely that the FOR UPDATE NOWAIT failed to get the LOCK,
+ # so we ROLLBACK to the SAVEPOINT to restore the transaction to its earlier
+ # state, we return False as if the products were not available, and log it:
+ cr.execute("ROLLBACK TO stock_location_product_reserve")
+ logger = logging.getLogger('stock.location')
+ logger.warn("Failed attempt to reserve %s x product %s, likely due to another transaction already in progress. Next attempt is likely to work. Detailed error available at DEBUG level.", product_qty, product_id)
+ logger.debug("Trace of the failed product reservation attempt: ", exc_info=True)
+ return False
+
+ # XXX TODO: rewrite this with one single query, possibly even the quantity conversion
+ cr.execute("""SELECT product_uom, sum(product_qty) AS product_qty
+ FROM stock_move
+ WHERE location_dest_id=%s AND
+ location_id<>%s AND
+ product_id=%s AND
+ state='done'
+ GROUP BY product_uom
+ """,
+ (id, id, product_id))
results = cr.dictfetchall()
- cr.execute("select product_uom,-sum(product_qty) as product_qty from stock_move where location_id=%s and location_dest_id<>%s and product_id=%s and state in ('done', 'assigned') group by product_uom", (id, id, product_id))
+ cr.execute("""SELECT product_uom,-sum(product_qty) AS product_qty
+ FROM stock_move
+ WHERE location_id=%s AND
+ location_dest_id<>%s AND
+ product_id=%s AND
+ state in ('done', 'assigned')
+ GROUP BY product_uom
+ """,
+ (id, id, product_id))
results += cr.dictfetchall()
total = 0.0
@@ -419,11 +495,11 @@ class stock_tracking(osv.osv):
return sequence + str(self.checksum(sequence))
_columns = {
- 'name': fields.char('Tracking ID', size=64, required=True),
- 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the pack without removing it."),
- 'serial': fields.char('Reference', size=64),
- 'move_ids': fields.one2many('stock.move', 'tracking_id', 'Moves Tracked'),
- 'date': fields.datetime('Created Date', required=True),
+ 'name': fields.char('Pack Reference', size=64, required=True, select=True),
+ 'active': fields.boolean('Active', help="By unchecking the active field, you may hide a pack without deleting it."),
+ 'serial': fields.char('Additional Reference', size=64, select=True, help="Other reference or serial number"),
+ 'move_ids': fields.one2many('stock.move', 'tracking_id', 'Moves for this pack', readonly=True),
+ 'date': fields.datetime('Creation Date', required=True),
}
_defaults = {
'active': 1,
@@ -448,7 +524,19 @@ class stock_tracking(osv.osv):
def unlink(self, cr, uid, ids, context=None):
raise osv.except_osv(_('Error'), _('You can not remove a lot line !'))
-
+
+ def action_traceability(self, cr, uid, ids, context={}):
+ """ It traces the information of a product
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param ids: List of IDs selected
+ @param context: A standard dictionary
+ @return: A dictionary of values
+ """
+ value={}
+ value=self.pool.get('action.traceability').action_traceability(cr,uid,ids,context)
+ return value
stock_tracking()
#----------------------------------------------------------
@@ -534,16 +622,15 @@ class stock_picking(osv.osv):
_columns = {
'name': fields.char('Reference', size=64, select=True),
- 'origin': fields.char('Origin', size=64, help="Reference of the document that produced this picking."),
- 'backorder_id': fields.many2one('stock.picking', 'Back Order', help="If the picking is splitted then the picking id in available state of move for this picking is stored in Backorder."),
+ 'origin': fields.char('Origin', size=64, help="Reference of the document that produced this picking.", select=True),
+ 'backorder_id': fields.many2one('stock.picking', 'Back Order of', help="If this picking was split this field links to the picking that contains the other part that has been processed already.", select=True),
'type': fields.selection([('out', 'Sending Goods'), ('in', 'Getting Goods'), ('internal', 'Internal'), ('delivery', 'Delivery')], 'Shipping Type', required=True, select=True, help="Shipping type specify, goods coming in or going out."),
- 'active': fields.boolean('Active', help="If the active field is set to true, it will allow you to hide the picking without removing it."),
'note': fields.text('Notes'),
- 'stock_journal_id': fields.many2one('stock.journal','Stock Journal'),
+ 'stock_journal_id': fields.many2one('stock.journal','Stock Journal', select=True),
'location_id': fields.many2one('stock.location', 'Location', help="Keep empty if you produce at the location where the finished products are needed." \
"Set 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."),
+ "if you subcontract the manufacturing operations.", select=True),
+ 'location_dest_id': fields.many2one('stock.location', 'Dest. Location',help="Location where the system will stock the finished products.", select=True),
'move_type': fields.selection([('direct', 'Direct Delivery'), ('one', 'All at once')], 'Delivery Method', required=True, help="It specifies goods to be delivered all at once or by direct delivery"),
'state': fields.selection([
('draft', 'Draft'),
@@ -553,13 +640,15 @@ class stock_picking(osv.osv):
('done', 'Done'),
('cancel', 'Cancelled'),
], 'State', readonly=True, select=True,
- help=' * The \'Draft\' state is used when a user is encoding a new and unconfirmed picking. \
- \n* The \'Confirmed\' state is used for stock movement to do with unavailable products. \
- \n* The \'Available\' state is set automatically when the products are ready to be moved.\
- \n* The \'Waiting\' state is used in MTO moves when a movement is waiting for another one.'),
+ help="* Draft: not confirmed yet and will not be scheduled until confirmed\n"\
+ "* Confirmed: still waiting for the availability of products\n"\
+ "* Available: products reserved, simply waiting for confirmation.\n"\
+ "* Waiting: waiting for another move to proceed before it becomes automatically available (e.g. in Make-To-Order flows)\n"\
+ "* Done: has been processed, can't be modified or cancelled anymore\n"\
+ "* Cancelled: has been cancelled, can't be confirmed anymore"),
'min_date': fields.function(get_min_max_date, fnct_inv=_set_minimum_date, multi="min_max_date",
- method=True, store=True, type='datetime', string='Expected Date', select=1, help="Expected date for Picking. Default it takes current date"),
- 'date': fields.datetime('Order Date', help="Date of Order"),
+ method=True, store=True, type='datetime', string='Expected Date', select=1, help="Expected date for the picking to be processed. Will be set to date of actual processing if not specified."),
+ 'date': fields.datetime('Order Date', help="Date of Order", select=True),
'date_done': fields.datetime('Date Done', help="Date of Completion"),
'max_date': fields.function(get_min_max_date, fnct_inv=_set_maximum_date, multi="min_max_date",
method=True, store=True, type='datetime', string='Max. Expected Date', select=2),
@@ -569,13 +658,12 @@ class stock_picking(osv.osv):
'invoice_state': fields.selection([
("invoiced", "Invoiced"),
("2binvoiced", "To Be Invoiced"),
- ("none", "Not from Picking")], "Invoice Status",
+ ("none", "Not from Picking")], "Invoice Control",
select=True, required=True, readonly=True, states={'draft': [('readonly', False)]}),
- 'company_id': fields.many2one('res.company', 'Company', required=True, select=1),
+ 'company_id': fields.many2one('res.company', 'Company', required=True, select=True),
}
_defaults = {
'name': lambda self, cr, uid, context: '/',
- 'active': 1,
'state': 'draft',
'move_type': 'direct',
'type': 'in',
@@ -589,10 +677,18 @@ class stock_picking(osv.osv):
default = {}
default = default.copy()
picking_obj = self.browse(cr, uid, [id], context)[0]
+ move_obj=self.pool.get('stock.move')
if ('name' not in default) or (picking_obj.name=='/'):
seq_obj_name = 'stock.picking.' + picking_obj.type
default['name'] = self.pool.get('ir.sequence').get(cr, uid, seq_obj_name)
- return super(stock_picking, self).copy(cr, uid, id, default, context)
+ default['origin'] = ''
+ default['backorder_id'] = False
+ res=super(stock_picking, self).copy(cr, uid, id, default, context)
+ if res:
+ picking_obj = self.browse(cr, uid, [res], context)[0]
+ for move in picking_obj.move_lines:
+ move_obj.write(cr, uid, [move.id], {'tracking_id': False,'prodlot_id':False})
+ return res
def onchange_partner_in(self, cr, uid, context=None, partner_id=None):
return {}
@@ -1003,7 +1099,7 @@ class stock_picking(osv.osv):
def unlink(self, cr, uid, ids, context=None):
move_obj = self.pool.get('stock.move')
- if not context:
+ if context is None:
context = {}
for pick in self.browse(cr, uid, ids, context=context):
if pick.state in ['done','cancel']:
@@ -1164,6 +1260,7 @@ class stock_picking(osv.osv):
@param ids: List of Picking Ids
@param context: A standard dictionary for contextual values
"""
+ msg=''
for pick in self.browse(cr, uid, ids, context=context):
type_list = {
'out':'Picking List',
@@ -1172,11 +1269,14 @@ class stock_picking(osv.osv):
'delivery': 'Delivery order'
}
message = type_list.get(pick.type, _('Document')) + " '" + (pick.name or 'n/a') + "' "
+ if pick.min_date:
+ msg=datetime.strptime(pick.min_date, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d') + "'."
state_list = {
- 'confirmed': "is scheduled for the '" + datetime.strptime(pick.min_date, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d') + "'.",
+ 'confirmed': "is scheduled for the '" + msg ,
'assigned': 'is ready to process.',
'cancel': 'is Cancelled.',
'done': 'is processed.',
+ 'draft':'is draft.',
}
message += state_list[pick.state]
self.log(cr, uid, pick.id, message)
@@ -1247,14 +1347,15 @@ class stock_production_lot(osv.osv):
return ids
_columns = {
- 'name': fields.char('Serial', size=64, required=True),
- 'ref': fields.char('Internal Reference', size=256),
- 'prefix': fields.char('Prefix', size=64),
+ 'name': fields.char('Serial Number', size=64, required=True, help="Unique serial number, will be displayed as: PREFIX/SERIAL [INT_REF]"),
+ 'ref': fields.char('Internal Reference', size=256, help="Internal reference number in case it differs from the manufacturer's serial number"),
+ 'prefix': fields.char('Prefix', size=64, help="Optional prefix to prepend when displaying this serial number: PREFIX/SERIAL [INT_REF]"),
'product_id': fields.many2one('product.product', 'Product', required=True),
- 'date': fields.datetime('Created Date', required=True),
- 'stock_available': fields.function(_get_stock, fnct_search=_stock_search, method=True, type="float", string="Available", select="2"),
+ 'date': fields.datetime('Creation Date', required=True),
+ 'stock_available': fields.function(_get_stock, fnct_search=_stock_search, method=True, type="float", string="Available", select="2", help="Current quantity of products with this Production Lot Number available in company warehouses"),
'revisions': fields.one2many('stock.production.lot.revision', 'lot_id', 'Revisions'),
- 'company_id': fields.many2one('res.company','Company',select=1),
+ 'company_id': fields.many2one('res.company', 'Company', select=True),
+ 'move_ids': fields.one2many('stock.move', 'prodlot_id', 'Moves for this production lot', readonly=True),
}
_defaults = {
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
@@ -1262,9 +1363,19 @@ class stock_production_lot(osv.osv):
'product_id': lambda x, y, z, c: c.get('product_id', False),
}
_sql_constraints = [
- ('name_ref_uniq', 'unique (name, ref)', 'The serial/ref must be unique !'),
+ ('name_ref_uniq', 'unique (name, ref)', _('The combination of serial number and internal reference must be unique !')),
]
-
+ def action_traceability(self, cr, uid, ids, context={}):
+ """ It traces the information of a product
+ @param self: The object pointer.
+ @param cr: A database cursor
+ @param uid: ID of the user currently logged in
+ @param ids: List of IDs selected
+ @param context: A standard dictionary
+ @return: A dictionary of values
+ """
+ value=self.pool.get('action.traceability').action_traceability(cr,uid,ids,context)
+ return value
stock_production_lot()
class stock_production_lot_revision(osv.osv):
@@ -1275,7 +1386,7 @@ class stock_production_lot_revision(osv.osv):
'name': fields.char('Revision Name', size=64, required=True),
'description': fields.text('Description'),
'date': fields.date('Revision Date'),
- 'indice': fields.char('Revision', size=16),
+ 'indice': fields.char('Revision Number', size=16),
'author_id': fields.many2one('res.users', 'Author'),
'lot_id': fields.many2one('stock.production.lot', 'Production lot', select=True, ondelete='cascade'),
'company_id': fields.related('lot_id','company_id',type='many2one',relation='res.company',string='Company',store=True),
@@ -1321,10 +1432,10 @@ class stock_move(osv.osv):
if not move.prodlot_id and \
(move.state == 'done' and \
( \
- (move.product_id.track_production and move.location_id.usage=='production') or \
- (move.product_id.track_production and move.location_dest_id.usage=='production') or \
- (move.product_id.track_incoming and move.location_id.usage in ('supplier','internal')) or \
- (move.product_id.track_outgoing and move.location_dest_id.usage in ('customer','internal')) \
+ (move.product_id.track_production and move.location_id.usage == 'production') or \
+ (move.product_id.track_production and move.location_dest_id.usage == 'production') or \
+ (move.product_id.track_incoming and move.location_id.usage == 'supplier') or \
+ (move.product_id.track_outgoing and move.location_dest_id.usage == 'customer') \
)):
return False
return True
@@ -1342,7 +1453,7 @@ class stock_move(osv.osv):
'name': fields.char('Name', size=64, required=True, select=True),
'priority': fields.selection([('0', 'Not urgent'), ('1', 'Urgent')], 'Priority'),
- 'date': fields.datetime('Created Date'),
+ 'date': fields.datetime('Creation Date', select=True),
'date_planned': fields.datetime('Date', required=True, help="Scheduled date for the movement of the products or real date if the move is done."),
'date_expected': fields.datetime('Date Expected', readonly=True,required=True, help="Scheduled date for the movement of the products"),
'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
@@ -1354,17 +1465,17 @@ class stock_move(osv.osv):
'product_packaging': fields.many2one('product.packaging', 'Packaging', help="It specifies attributes of packaging like type, quantity of packaging,etc."),
'location_id': fields.many2one('stock.location', 'Source Location', required=True, select=True, 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', required=True, select=True, help="Location where the system will stock the finished products."),
- 'address_id': fields.many2one('res.partner.address', 'Dest. Address', help="Address where goods are to be delivered"),
+ 'location_dest_id': fields.many2one('stock.location', 'Destination Location', required=True, select=True, help="Location where the system will stock the finished products."),
+ 'address_id': fields.many2one('res.partner.address', 'Destination Address', help="Optional address where goods are to be delivered, specifically used for allotment"),
- 'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', help="Production lot is used to put a serial number on the production"),
- 'tracking_id': fields.many2one('stock.tracking', 'Pack', select=True, help="This is the code that will be put on the logistical unit: pallet, box, pack."),
+ 'prodlot_id': fields.many2one('stock.production.lot', 'Production Lot', help="Production lot is used to put a serial number on the production", select=True),
+ 'tracking_id': fields.many2one('stock.tracking', 'Pack', select=True, help="Logistical shipping unit: pallet, box, pack ..."),
'auto_validate': fields.boolean('Auto Validate'),
- 'move_dest_id': fields.many2one('stock.move', 'Dest. Move'),
- 'move_history_ids': fields.many2many('stock.move', 'stock_move_history_ids', 'parent_id', 'child_id', 'Move History'),
- 'move_history_ids2': fields.many2many('stock.move', 'stock_move_history_ids', 'child_id', 'parent_id', 'Move History'),
+ 'move_dest_id': fields.many2one('stock.move', 'Destination Move', help="Optional: next stock move when chaining them", select=True),
+ 'move_history_ids': fields.many2many('stock.move', 'stock_move_history_ids', 'parent_id', 'child_id', 'Move History (child moves)'),
+ 'move_history_ids2': fields.many2many('stock.move', 'stock_move_history_ids', 'child_id', 'parent_id', 'Move History (parent moves)'),
'picking_id': fields.many2one('stock.picking', 'Picking List', select=True),
'note': fields.text('Notes'),
'state': fields.selection([('draft', 'Draft'), ('waiting', 'Waiting'), ('confirmed', 'Confirmed'), ('assigned', 'Available'), ('done', 'Done'), ('cancel', 'Cancelled')], 'State', readonly=True, select=True,
@@ -1372,12 +1483,13 @@ class stock_move(osv.osv):
\nThe state is \'Waiting\' if the move is waiting for another one.'),
'price_unit': fields.float('Unit Price',
digits_compute= dp.get_precision('Account')),
- 'company_id': fields.many2one('res.company', 'Company', required=True, select=1),
- 'partner_id': fields.related('picking_id','address_id','partner_id',type='many2one', relation="res.partner", string="Partner", store=True),
- 'backorder_id': fields.related('picking_id','backorder_id',type='many2one', relation="stock.picking", string="Back Order"),
- 'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin",store=True),
- 'scraped': fields.related('location_dest_id','scrap_location',type='boolean',relation='stock.location',string='Scraped'),
- 'move_stock_return_history': fields.many2many('stock.move', 'stock_move_return_history', 'move_id', 'return_move_id', 'Move Return History',readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company', required=True, select=True),
+ 'partner_id': fields.related('picking_id','address_id','partner_id',type='many2one', relation="res.partner", string="Partner", store=True, select=True),
+ 'backorder_id': fields.related('picking_id','backorder_id',type='many2one', relation="stock.picking", string="Back Order", select=True),
+ 'origin': fields.related('picking_id','origin',type='char', size=64, relation="stock.picking", string="Origin", store=True),
+
+ # used for colors in tree views:
+ 'scrapped': fields.related('location_dest_id','scrap_location',type='boolean',relation='stock.location',string='Scrapped'),
}
_constraints = [
(_check_tracking,
@@ -1422,18 +1534,27 @@ class stock_move(osv.osv):
'state': 'draft',
'priority': '1',
'product_qty': 1.0,
- 'scraped' : False,
+ 'scrapped' : False,
'date_planned': time.strftime('%Y-%m-%d %H:%M:%S'),
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.move', context=c),
'date_expected': time.strftime('%Y-%m-%d %H:%M:%S'),
}
+ def write(self, cr, uid, ids, vals, context=None):
+ if uid != 1:
+ for move in self.browse(cr, uid, ids):
+ if move.state == 'done':
+ frozen_fields = set(['product_qty', 'product_uom', 'product_uos_qty', 'product_uos', 'location_id', 'location_dest_id', 'product_id'])
+ if frozen_fields.intersection(vals):
+ raise osv.except_osv(_('Operation forbidden'),
+ _('Quantities, UoMs, Products and Locations cannot be modified on stock moves that have already been processed (except by the Administrator)'))
+ return super(stock_move, self).write(cr, uid, ids, vals, context=context)
+
def copy(self, cr, uid, id, default=None, context=None):
if default is None:
default = {}
default = default.copy()
- default['move_stock_return_history'] = []
return super(stock_move, self).copy(cr, uid, id, default, context=context)
def _auto_init(self, cursor, context=None):
@@ -1464,8 +1585,8 @@ class stock_move(osv.osv):
warning = {}
if (location.usage == 'internal') and (product_qty > (prodlot.stock_available or 0.0)):
warning = {
- 'title': 'Bad Lot Assignation !',
- 'message': 'You are moving %.2f products but only %.2f available in this lot.' % (product_qty, prodlot.stock_available or 0.0)
+ 'title': _('Bad Lot Assignation !'),
+ 'message': _('You are moving %.2f products but only %.2f available in this lot.') % (product_qty, prodlot.stock_available or 0.0)
}
return {'warning': warning}
@@ -1572,24 +1693,30 @@ class stock_move(osv.osv):
context = {}
for picking, todo in self._chain_compute(cr, uid, moves, context=context).items():
ptype = todo[0][1][5] and todo[0][1][5] or self.pool.get('stock.location').picking_type_get(cr, uid, todo[0][0].location_dest_id, todo[0][1][0])
- pick_name = picking.name
+ pick_name = picking.name or ''
if ptype == 'delivery':
pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.delivery')
-
- pickid = picking_obj.create(cr, uid, {
- 'name': pick_name,
- 'origin': str(picking.origin or ''),
- 'type': ptype,
- 'note': picking.note,
- 'move_type': picking.move_type,
- 'auto_picking': todo[0][1][1] == 'auto',
- 'stock_journal_id': todo[0][1][3],
- 'company_id': todo[0][1][4] or res_obj._company_default_get(cr, uid, 'stock.company', context),
- 'address_id': picking.address_id.id,
- 'invoice_state': 'none',
- 'date': picking.date,
- 'sale_id':' sale_id' in picking._columns.keys() and picking.sale_id.id or False
- })
+ check_picking_ids = picking_obj.search(cr, uid, [('name','=',picking.name),('origin','=',str(picking.origin or '')),('type','=',ptype),('move_type','=',picking.move_type)])
+ if check_picking_ids:
+ pickid = check_picking_ids[0]
+ else:
+ if picking:
+ pickid = picking_obj.create(cr, uid, {
+ 'name': pick_name,
+ 'origin': str(picking.origin or ''),
+ 'type': ptype,
+ 'note': picking.note,
+ 'move_type': picking.move_type,
+ 'auto_picking': todo[0][1][1] == 'auto',
+ 'stock_journal_id': todo[0][1][3],
+ 'company_id': todo[0][1][4] or res_obj._company_default_get(cr, uid, 'stock.company', context=context),
+ 'address_id': picking.address_id.id,
+ 'invoice_state': 'none',
+ 'date': picking.date,
+ 'sale_id':' sale_id' in picking._columns.keys() and picking.sale_id.id or False
+ })
+ else:
+ pickid = False
for move, (loc, auto, delay, journal, company_id, ptype) in todo:
new_id = move_obj.copy(cr, uid, move.id, {
'location_id': move.location_dest_id.id,
@@ -1597,7 +1724,7 @@ class stock_move(osv.osv):
'date_moved': time.strftime('%Y-%m-%d'),
'picking_id': pickid,
'state': 'waiting',
- 'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context) ,
+ 'company_id': company_id or res_obj._company_default_get(cr, uid, 'stock.company', context=context) ,
'move_history_ids': [],
'date_planned': (datetime.strptime(move.date_planned, '%Y-%m-%d %H:%M:%S') + relativedelta(days=delay or 0)).strftime('%Y-%m-%d'),
'move_history_ids2': []}
@@ -1607,8 +1734,9 @@ class stock_move(osv.osv):
'move_history_ids': [(4, new_id)]
})
new_moves.append(self.browse(cr, uid, [new_id])[0])
- wf_service = netsvc.LocalService("workflow")
- wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr)
+ if pickid:
+ wf_service = netsvc.LocalService("workflow")
+ wf_service.trg_validate(uid, 'stock.picking', pickid, 'button_confirm', cr)
if new_moves:
create_chained_picking(self, cr, uid, new_moves, context)
create_chained_picking(self, cr, uid, moves, context)
@@ -1652,19 +1780,20 @@ class stock_move(osv.osv):
if context is None:
context = {}
for move in self.browse(cr, uid, ids, context=context):
- if move.product_id.type == 'consu':
+ if move.product_id.type == 'consu' or move.location_id.usage == 'supplier':
if move.state in ('confirmed', 'waiting'):
done.append(move.id)
pickings[move.picking_id.id] = 1
continue
if move.state in ('confirmed', 'waiting'):
- res = self.pool.get('stock.location')._product_reserve(cr, uid, [move.location_id.id], move.product_id.id, move.product_qty, {'uom': move.product_uom.id})
+ # Important: we must pass lock=True to _product_reserve() to avoid race conditions and double reservations
+ res = self.pool.get('stock.location')._product_reserve(cr, uid, [move.location_id.id], move.product_id.id, move.product_qty, {'uom': move.product_uom.id}, lock=True)
if res:
#_product_available_test depends on the next status for correct functioning
#the test does not work correctly if the same product occurs multiple times
#in the same order. This is e.g. the case when using the button 'split in two' of
#the stock outgoing form
- self.write(cr, uid, move.id, {'state':'assigned'})
+ self.write(cr, uid, [move.id], {'state':'assigned'})
done.append(move.id)
pickings[move.picking_id.id] = 1
r = res.pop(0)
@@ -1687,13 +1816,15 @@ class stock_move(osv.osv):
def setlast_tracking(self, cr, uid, ids, context=None):
tracking_obj = self.pool.get('stock.tracking')
tracking = context.get('tracking', False)
- last_track = [line.tracking_id.id for line in self.browse(cr, uid, ids)[0].picking_id.move_lines if line.tracking_id]
- if not last_track:
- last_track = tracking_obj.create(cr, uid, {}, context=context)
- else:
- last_track.sort()
- last_track = last_track[-1]
- self.write(cr, uid, ids, {'tracking_id': last_track})
+ picking = self.browse(cr, uid, ids)[0].picking_id
+ if picking:
+ last_track = [line.tracking_id.id for line in picking.move_lines if line.tracking_id]
+ if not last_track:
+ last_track = tracking_obj.create(cr, uid, {}, context=context)
+ else:
+ last_track.sort()
+ last_track = last_track[-1]
+ self.write(cr, uid, ids, {'tracking_id': last_track})
return True
#
@@ -1877,12 +2008,13 @@ class stock_move(osv.osv):
def unlink(self, cr, uid, ids, context=None):
if context is None:
context = {}
+ ctx = context.copy()
for move in self.browse(cr, uid, ids, context=context):
- if move.state != 'draft':
+ if move.state != 'draft' and not ctx.get('call_unlink',False):
raise osv.except_osv(_('UserError'),
_('You can only delete draft moves.'))
return super(stock_move, self).unlink(
- cr, uid, ids, context=context)
+ cr, uid, ids, context=ctx)
def _create_lot(self, cr, uid, ids, product_id, prefix=False):
""" Creates production lot
@@ -1896,14 +2028,14 @@ class stock_move(osv.osv):
""" Move the scrap/damaged product into scrap location
@param cr: the database cursor
@param uid: the user id
- @param ids: ids of stock move object to be scraped
+ @param ids: ids of stock move object to be scrapped
@param quantity : specify scrap qty
@param location_id : specify scrap location
@param context: context arguments
@return: Scraped lines
"""
if quantity <= 0:
- raise osv.except_osv(_('Warning!'), _('Please provide Proper Quantity !'))
+ raise osv.except_osv(_('Warning!'), _('Please provide a positive quantity to scrap!'))
res = []
for move in self.browse(cr, uid, ids, context=context):
move_qty = move.product_qty
@@ -1912,15 +2044,17 @@ class stock_move(osv.osv):
'product_qty': quantity,
'product_uos_qty': uos_qty,
'state': move.state,
- 'scraped' : True,
- 'location_dest_id': location_id
+ 'scrapped' : True,
+ 'location_dest_id': location_id,
+ 'tracking_id':False,
+ 'prodlot_id':False
}
new_move = self.copy(cr, uid, move.id, default_val)
+
res += [new_move]
product_obj = self.pool.get('product.product')
for (id, name) in product_obj.name_get(cr, uid, [move.product_id.id]):
- message = _('Product ') + " '" + name + "' "+ _("is scraped with") + " '" + str(move.product_qty) + "' "+ _("quantity.")
- self.log(cr, uid, move.id, message)
+ self.log(cr, uid, move.id, "%s x %s %s" % (move.product_qty, name, _("were scrapped")))
self.action_done(cr, uid, res)
return res
@@ -2181,13 +2315,13 @@ class stock_inventory(osv.osv):
_name = "stock.inventory"
_description = "Inventory"
_columns = {
- 'name': fields.char('Inventory', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
- 'date': fields.datetime('Date create', required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'name': fields.char('Inventory Reference', size=64, required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'date': fields.datetime('Creation Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'date_done': fields.datetime('Date done'),
'inventory_line_id': fields.one2many('stock.inventory.line', 'inventory_id', 'Inventories', states={'done': [('readonly', True)]}),
'move_ids': fields.many2many('stock.move', 'stock_inventory_move_rel', 'inventory_id', 'move_id', 'Created Moves'),
- 'state': fields.selection( (('draft', 'Draft'), ('done', 'Done'), ('cancel','Cancelled')), 'State', readonly=True),
- 'company_id': fields.many2one('res.company','Company',required=True,select=1),
+ 'state': fields.selection( (('draft', 'Draft'), ('done', 'Done'), ('cancel','Cancelled')), 'State', readonly=True, select=True),
+ 'company_id': fields.many2one('res.company','Company',required=True,select=True),
}
_defaults = {
'date': time.strftime('%Y-%m-%d %H:%M:%S'),
@@ -2279,10 +2413,10 @@ class stock_inventory_line(osv.osv):
_columns = {
'inventory_id': fields.many2one('stock.inventory', 'Inventory', ondelete='cascade', select=True),
'location_id': fields.many2one('stock.location', 'Location', required=True),
- 'product_id': fields.many2one('product.product', 'Product', required=True),
+ 'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
'product_uom': fields.many2one('product.uom', 'Product UOM', required=True),
'product_qty': fields.float('Quantity'),
- 'company_id': fields.related('inventory_id','company_id',type='many2one',relation='res.company',string='Company',store=True),
+ 'company_id': fields.related('inventory_id','company_id',type='many2one',relation='res.company',string='Company',store=True, select=True),
'prod_lot_id': fields.many2one('stock.production.lot', 'Production Lot', domain="[('product_id','=',product_id)]"),
'state': fields.related('inventory_id','state',type='char',string='State',readonly=True),
}
@@ -2312,8 +2446,8 @@ class stock_warehouse(osv.osv):
_name = "stock.warehouse"
_description = "Warehouse"
_columns = {
- 'name': fields.char('Name', size=60, required=True),
- 'company_id': fields.many2one('res.company','Company',required=True,select=1),
+ 'name': fields.char('Name', size=128, required=True, select=True),
+ 'company_id': fields.many2one('res.company', 'Company', required=True, select=True),
'partner_address_id': fields.many2one('res.partner.address', 'Owner Address'),
'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')]),
@@ -2380,7 +2514,7 @@ stock_picking_move_wizard()
class report_products_to_received_planned(osv.osv):
_name = "report.products.to.received.planned"
- _description = "Product to Received Vs Planned"
+ _description = "Received Products vs Planned"
_auto = False
_columns = {
'date':fields.date('Date'),
@@ -2414,7 +2548,7 @@ report_products_to_received_planned()
class report_delivery_products_planned(osv.osv):
_name = "report.delivery.products.planned"
- _description = "Number of Delivery products vs planned"
+ _description = "Delivered products vs Planned"
_auto = False
_columns = {
'date':fields.date('Date'),
diff --git a/addons/stock/stock_data.xml b/addons/stock/stock_data.xml
index 205e4a44396..6933db289a0 100644
--- a/addons/stock/stock_data.xml
+++ b/addons/stock/stock_data.xml
@@ -37,8 +37,8 @@
viewterp-mrp
-
- Scraped
+
+ ScrappedTrueinventory
diff --git a/addons/stock/stock_demo.xml b/addons/stock/stock_demo.xml
index 31cd94e040d..6607d97b2b3 100644
--- a/addons/stock/stock_demo.xml
+++ b/addons/stock/stock_demo.xml
@@ -224,7 +224,6 @@
-
diff --git a/addons/stock/stock_report.xml b/addons/stock/stock_report.xml
index 855a56a0f75..1332e840e10 100644
--- a/addons/stock/stock_report.xml
+++ b/addons/stock/stock_report.xml
@@ -1,12 +1,12 @@
-
+
-
-
-
+
+
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index f81de1c5faf..f9fd2ed2bd2 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -3,12 +3,12 @@
-
+
-
+
@@ -98,7 +98,7 @@
-
+
@@ -157,10 +157,25 @@
form
@@ -1623,8 +1761,6 @@
-
-
@@ -1653,7 +1789,7 @@
ir.actions.act_windowformtree,form
- [('picking_id.type','=','in')]
+ ['|','&',('picking_id','=',False),('location_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','in')]{"search_default_receive":1}
@@ -1744,7 +1880,7 @@
Products
-
+
@@ -1753,7 +1889,7 @@
Open Products
-
+
@@ -1862,7 +1998,7 @@
ir.actions.act_windowformtree,form
- [('picking_id','!=',False),('picking_id.type','=','out')]
+ ['|','&',('picking_id','=',False),('location_dest_id.usage', 'in', ['customer','supplier']),'&',('picking_id','!=',False),('picking_id.type','=','out')]{"search_default_receive":1}
diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py
index b8692783824..f931e575b2f 100644
--- a/addons/stock/wizard/stock_invoice_onshipping.py
+++ b/addons/stock/wizard/stock_invoice_onshipping.py
@@ -53,7 +53,7 @@ class stock_invoice_onshipping(osv.osv_memory):
if pick.invoice_state == 'invoiced':
raise osv.except_osv(_('UserError'), _('Invoice is already created.'))
if pick.invoice_state == 'none':
- raise osv.except_osv(_('UserError'), _('Invoice cannot be created from Picking.'))
+ raise osv.except_osv(_('UserError'), _('This picking does not require any invoicing.'))
if pick.move_lines:
usage = pick.move_lines[0].location_id.usage
diff --git a/addons/stock/wizard/stock_invoice_onshipping_view.xml b/addons/stock/wizard/stock_invoice_onshipping_view.xml
index 62689019af0..e1e742d7aee 100644
--- a/addons/stock/wizard/stock_invoice_onshipping_view.xml
+++ b/addons/stock/wizard/stock_invoice_onshipping_view.xml
@@ -22,12 +22,15 @@
-
+
+ Create Invoice
+ stock.invoice.onshipping
+ ir.actions.act_window
+ form
+ tree,form
+
+ new
+
+
diff --git a/addons/stock/wizard/stock_move.py b/addons/stock/wizard/stock_move.py
index e50266706d5..a5a401800d3 100644
--- a/addons/stock/wizard/stock_move.py
+++ b/addons/stock/wizard/stock_move.py
@@ -142,7 +142,7 @@ class stock_move_scrap(osv.osv_memory):
return res
def move_scrap(self, cr, uid, ids, context={}):
- """ To move scraped products
+ """ To move scrapped products
@param self: The object pointer.
@param cr: A database cursor
@param uid: ID of the user currently logged in
@@ -191,10 +191,10 @@ class split_in_production_lot(osv.osv_memory):
_columns = {
'qty': fields.integer('Quantity'),
'product_id': fields.many2one('product.product', 'Product', required=True, select=True),
- 'product_uom': fields.many2one('product.uom', 'Product UOM'),
- 'line_ids': fields.one2many('stock.move.split.lines', 'lot_id', 'Lots Number'),
- 'line_exist_ids': fields.one2many('stock.move.split.lines.exist', 'lot_id', 'Lots Existing Numbers'),
- 'use_exist' : fields.boolean('Existing Lot'),
+ 'product_uom': fields.many2one('product.uom', 'UoM'),
+ 'line_ids': fields.one2many('stock.move.split.lines', 'lot_id', 'Production Lots'),
+ 'line_exist_ids': fields.one2many('stock.move.split.lines.exist', 'lot_id', 'Production Lots'),
+ 'use_exist' : fields.boolean('Existing Lots', help="Check this option to select existing lots in the list below, otherwise you should enter new ones line by line."),
}
def split_lot(self, cr, uid, ids, context=None):
@@ -261,7 +261,7 @@ class split_in_production_lot(osv.osv_memory):
'name': line.name,
'product_id': move.product_id.id},
context=context)
- print 'write', current_move, {'prodlot_id': prodlot_id, 'state':move.state}
+
move_obj.write(cr, uid, [current_move], {'prodlot_id': prodlot_id, 'state':move.state})
update_val = {}
diff --git a/addons/stock/wizard/stock_move_view.xml b/addons/stock/wizard/stock_move_view.xml
index 980a1b5f402..46d3893900b 100644
--- a/addons/stock/wizard/stock_move_view.xml
+++ b/addons/stock/wizard/stock_move_view.xml
@@ -73,7 +73,7 @@
-
+
@@ -121,24 +121,24 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py
index 51429058eb5..17515f86252 100644
--- a/addons/stock/wizard/stock_partial_move.py
+++ b/addons/stock/wizard/stock_partial_move.py
@@ -28,9 +28,7 @@ class stock_partial_move(osv.osv_memory):
_description = "Partial Move"
_columns = {
'date': fields.datetime('Date', required=True),
- 'partner_id': fields.many2one('res.partner',string="Partner"),
'type': fields.char("Type", size=3),
- 'address_id': fields.many2one('res.partner.address', 'Address', help="Address where goods are to be delivered"),
}
def view_init(self, cr, uid, fields_list, context=None):
@@ -66,12 +64,6 @@ class stock_partial_move(osv.osv_memory):
_moves_arch_lst = """
-
-
-
-
-
-
"""
_moves_fields = result['fields']
@@ -164,21 +156,7 @@ class stock_partial_move(osv.osv_memory):
if m.state in ('done', 'cancel'):
continue
res['type'] = m.picking_id and m.picking_id.type or ''
- address_ids = list(set([(pick.address_id and pick.address_id.id, pick.address_id and pick.address_id.partner_id and pick.address_id.partner_id.id) for pick in move_obj.browse(cr, uid, move_ids)]))
- address_ids1 = list(set([(pick.address_id and pick.address_id.id, pick.address_id and pick.address_id.partner_id and pick.address_id.partner_id.id) for pick in move_obj.browse(cr, uid, move_ids) if pick.address_id]))
- if len(address_ids1) == 1:
- if m.picking_id and m.picking_id.type=='out':
- res['address_id'] = address_ids[0][0] or False
- res['partner_id'] = address_ids[0][1] or False
- if m.picking_id and m.picking_id.type=='in':
- res['partner_id'] = m.company_id.partner_id.id or False
- if m.company_id.partner_id:
- address_default = [add.id for add in m.company_id.partner_id.address if add.type=='default']
- address_delivery = [add.id for add in m.company_id.partner_id.address if add.type=='delivery']
- if len(address_delivery):
- res['address_id'] = address_delivery and address_delivery[0] or False
- else:
- res['address_id'] = address_default and address_default[0] or False
+
if 'move%s_product_id'%(m.id) in fields:
res['move%s_product_id'%(m.id)] = m.product_id.id
@@ -230,8 +208,6 @@ class stock_partial_move(osv.osv_memory):
move_ids = context.get('active_ids', False)
partial = self.browse(cr, uid, ids[0], context)
partial_datas = {
- 'partner_id' : partial.partner_id and partial.partner_id.id or False,
- 'address_id' : partial.address_id and partial.address_id.id or False,
'delivery_date' : partial.date
}
for m in move_obj.browse(cr, uid, move_ids):
diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py
index e1aa0dc4e13..30403e3b1d0 100644
--- a/addons/stock/wizard/stock_return_picking.py
+++ b/addons/stock/wizard/stock_return_picking.py
@@ -103,7 +103,7 @@ class stock_return_picking(osv.osv_memory):
return_history = {}
for m_line in pick.move_lines:
return_history[m_line.id] = 0
- for rec in m_line.move_stock_return_history:
+ for rec in m_line.move_history_ids2:
return_history[m_line.id] += rec.product_qty
res['fields'].clear()
arch_lst=['', '
' % _('Return lines'), '' % _('Provide the quantities of the returned products.')]
@@ -169,7 +169,7 @@ class stock_return_picking(osv.osv_memory):
new_qty = data['return%s' % move.id]
returned_qty = move.product_qty
- for rec in move.move_stock_return_history:
+ for rec in move.move_history_ids2:
returned_qty -= rec.product_qty
if returned_qty != new_qty:
@@ -182,7 +182,7 @@ class stock_return_picking(osv.osv_memory):
'picking_id':new_picking, 'state':'draft',
'location_id':new_location, 'location_dest_id':move.location_id.id,
'date':date_cur, 'date_planned':date_cur,})
- move_obj.write(cr, uid, [move.id], {'move_stock_return_history':[(4,new_move)]})
+ move_obj.write(cr, uid, [move.id], {'move_history_ids2':[(4,new_move)]})
if set_invoice_state_to_none:
pick_obj.write(cr, uid, [pick.id], {'invoice_state':'none'})
diff --git a/addons/stock/wizard/stock_splitinto.py b/addons/stock/wizard/stock_splitinto.py
index 8623ba65875..5e75801d2f6 100644
--- a/addons/stock/wizard/stock_splitinto.py
+++ b/addons/stock/wizard/stock_splitinto.py
@@ -41,6 +41,14 @@ class stock_split_into(osv.osv_memory):
quantity = self.browse(cr, uid, data[0], context).quantity or 0.0
for move in move_obj.browse(cr, uid, rec_id):
quantity_rest = move.product_qty - quantity
+ if move.tracking_id :
+ raise osv.except_osv(_('Error!'), _('The current move line is already assigned to a pack, please remove it first if you really want to change it ' \
+ 'for this product: "%s" (id: %d)') % \
+ (move.product_id.name, move.product_id.id,))
+ if quantity > move.product_qty:
+ raise osv.except_osv(_('Error!'), _('Total quantity after split exceeds the quantity to split ' \
+ 'for this product: "%s" (id: %d)') % \
+ (move.product_id.name, move.product_id.id,))
if quantity > 0:
move_obj.setlast_tracking(cr, uid, [move.id], context=context)
move_obj.write(cr, uid, [move.id], {
@@ -51,14 +59,17 @@ class stock_split_into(osv.osv_memory):
if quantity_rest>0:
quantity_rest = move.product_qty - quantity
tracking_id = track_obj.create(cr, uid, {})
- default_val = {
+ if quantity==0.0:
+ move_obj.write(cr, uid, [move.id], {'tracking_id': tracking_id})
+ else:
+ default_val = {
'product_qty': quantity_rest,
'product_uos_qty': quantity_rest,
'tracking_id': tracking_id,
'state': move.state,
'product_uos': move.product_uom.id
}
- current_move = move_obj.copy(cr, uid, move.id, default_val)
+ current_move = move_obj.copy(cr, uid, move.id, default_val)
return {}
stock_split_into()
diff --git a/addons/stock/wizard/stock_splitinto_view.xml b/addons/stock/wizard/stock_splitinto_view.xml
index b6c19db5e9c..a325519ca75 100644
--- a/addons/stock/wizard/stock_splitinto_view.xml
+++ b/addons/stock/wizard/stock_splitinto_view.xml
@@ -7,7 +7,7 @@
form
-
+
diff --git a/addons/stock/wizard/stock_traceability.py b/addons/stock/wizard/stock_traceability.py
index 063c094d296..815f90810ed 100644
--- a/addons/stock/wizard/stock_traceability.py
+++ b/addons/stock/wizard/stock_traceability.py
@@ -39,7 +39,7 @@ class action_traceability(osv.osv_memory):
@return: A dictionary of values
"""
- type1 = context['type'] or 'move_history_ids'
+ type1 = context['type'] or 'move_history_ids2'
field = context['field'] or 'tracking_id'
obj = self.pool.get('stock.move')
ids = obj.search(cr, uid, [(field, 'in',context['active_ids'])])
@@ -47,60 +47,17 @@ class action_traceability(osv.osv_memory):
view_id = cr.fetchone()[0]
value = {
'domain': "[('id','in',["+','.join(map(str, ids))+"])]",
- 'name': ((type1=='move_history_ids') and 'Upstream Traceability') or 'Downstream Traceability',
+ 'name': ((type1=='move_history_ids2') and 'Upstream Traceability') or 'Downstream Traceability',
'view_type': 'tree',
'res_model': 'stock.move',
'field_parent': type1,
'view_id': (view_id,'View'),
- 'type': 'ir.actions.act_window'
+ 'type': 'ir.actions.act_window',
+ 'nodestroy':True,
}
return value
action_traceability()
-class stock_traceability_downstream(osv.osv_memory):
- """
- This class is defined for Stock traceability downstream wizard
-
- """
- _name = "stock.traceability.downstream"
- _inherit = "action.traceability"
- _description = "Stock traceability downstream"
-
-stock_traceability_downstream()
-
-class stock_traceability_upstream(osv.osv_memory):
- """
- This class is defined for Stock traceability upstream wizard
-
- """
- _name = "stock.traceability.upstream"
- _inherit = "action.traceability"
- _description = "Stock traceability upstream"
-
-stock_traceability_upstream()
-
-class stock_traceability_lot_upstream(osv.osv_memory):
- """
- This class is defined for Stock traceability lot upstream wizard
-
- """
- _name = "stock.traceability.lot.upstream"
- _inherit = "action.traceability"
- _description = "Stock traceability lot upstream"
-
-stock_traceability_lot_upstream()
-
-class stock_traceability_lot_downstream(osv.osv_memory):
- """
- This class is defined for Stock traceability lot downstream wizard
-
- """
- _name = "stock.traceability.lot.downstream"
- _inherit = "action.traceability"
- _description = "Stock traceability lot downstream"
-
-stock_traceability_lot_downstream()
-
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/stock/wizard/stock_traceability_view.xml b/addons/stock/wizard/stock_traceability_view.xml
deleted file mode 100644
index 47f244b2cb6..00000000000
--- a/addons/stock/wizard/stock_traceability_view.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
- Stock traceability downstream
- stock.traceability.downstream
- form
-
-
-
-
-
-
-
-
-
-
- Stock traceability lot upstream
- stock.traceability.lot.upstream
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Stock traceability lot downstream
- stock.traceability.lot.downstream
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/stock_invoice_directly/i18n/tr.po b/addons/stock_invoice_directly/i18n/tr.po
index 7c54d4d1b40..a5c935b49ff 100644
--- a/addons/stock_invoice_directly/i18n/tr.po
+++ b/addons/stock_invoice_directly/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:46+0000\n"
+"PO-Revision-Date: 2010-09-08 09:07+0000\n"
"Last-Translator: OpenERP Administrators \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_invoice_directly
diff --git a/addons/stock_location/i18n/tr.po b/addons/stock_location/i18n/tr.po
index 901787a10bd..f86750fa1dd 100644
--- a/addons/stock_location/i18n/tr.po
+++ b/addons/stock_location/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 08:02+0000\n"
+"PO-Revision-Date: 2010-09-08 09:14+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_location
diff --git a/addons/stock_location/test/stock_location.yml b/addons/stock_location/test/stock_location.yml
index 8b79eb5f63c..c5360ce67c5 100644
--- a/addons/stock_location/test/stock_location.yml
+++ b/addons/stock_location/test/stock_location.yml
@@ -171,7 +171,6 @@
Creating a stock.location record
-
!record {model: stock.location, id: stock_location_suppiler0}:
- allocation_method: fifo
chained_auto_packing: auto
chained_delay: 15
chained_location_type: none
@@ -212,7 +211,6 @@
-
!record {model: stock.location, id: stock_location_suppiler0}:
address_id: res_partner_address_0
- allocation_method: fifo
chained_auto_packing: manual
chained_delay: 20
chained_location_type: none
diff --git a/addons/stock_no_autopicking/i18n/tr.po b/addons/stock_no_autopicking/i18n/tr.po
index 768eeab7102..6a7b3d46488 100644
--- a/addons/stock_no_autopicking/i18n/tr.po
+++ b/addons/stock_no_autopicking/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:17+0000\n"
+"PO-Revision-Date: 2010-09-08 09:07+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:57+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:47+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_no_autopicking
diff --git a/addons/stock_planning/i18n/fr.po b/addons/stock_planning/i18n/fr.po
index e750d2558d7..60aca809502 100644
--- a/addons/stock_planning/i18n/fr.po
+++ b/addons/stock_planning/i18n/fr.po
@@ -6,24 +6,29 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
-"POT-Creation-Date: 2010-08-20 10:50:02+0000\n"
-"PO-Revision-Date: 2010-08-20 10:50:02+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2010-08-20 10:50+0000\n"
+"PO-Revision-Date: 2010-08-30 12:21+0000\n"
+"Last-Translator: Fabien (Open ERP) \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-08-31 03:59+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#. module: stock_planning
#: code:addons/stock_planning/wizard/stock_planning_createlines.py:0
#, python-format
-msgid "No forecasts for selected period or no products in selected category !"
+msgid ""
+"No forecasts for selected period or no products in selected category !"
msgstr ""
#. module: stock_planning
#: help:stock.planning,stock_only:0
-msgid "Check to calculate stock location of selected warehouse only. If not selected calculation is made for input, stock and output location of warehouse."
+msgid ""
+"Check to calculate stock location of selected warehouse only. If not "
+"selected calculation is made for input, stock and output location of "
+"warehouse."
msgstr ""
#. module: stock_planning
@@ -45,12 +50,16 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Already Out: "
+msgid ""
+"\n"
+" Already Out: "
msgstr ""
#. module: stock_planning
#: help:stock.sale.forecast,product_amt:0
-msgid "Forecast value which will be converted to Product Quantity according to prices."
+msgid ""
+"Forecast value which will be converted to Product Quantity according to "
+"prices."
msgstr ""
#. module: stock_planning
@@ -66,7 +75,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,outgoing_before:0
-msgid "Planned Out in periods before calculated. Between start date of current period and one day before start of calculated period."
+msgid ""
+"Planned Out in periods before calculated. Between start date of current "
+"period and one day before start of calculated period."
msgstr ""
#. module: stock_planning
@@ -77,7 +88,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.sale.forecast.createlines,warehouse_id:0
-msgid "Warehouse which forecasts will concern. If during stock planning you will need sales forecast for all warehouses choose any warehouse now."
+msgid ""
+"Warehouse which forecasts will concern. If during stock planning you will "
+"need sales forecast for all warehouses choose any warehouse now."
msgstr ""
#. module: stock_planning
@@ -88,7 +101,7 @@ msgstr ""
#. module: stock_planning
#: view:stock.sale.forecast:0
msgid " "
-msgstr ""
+msgstr " "
#. module: stock_planning
#: field:stock.planning,incoming_left:0
@@ -127,7 +140,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,warehouse_forecast:0
-msgid "All sales forecasts for selected Warehouse of selected Product during selected Period."
+msgid ""
+"All sales forecasts for selected Warehouse of selected Product during "
+"selected Period."
msgstr ""
#. module: stock_planning
@@ -152,12 +167,15 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,already_out:0
-msgid "Quantity which is already dispatched out of this warehouse in current period."
+msgid ""
+"Quantity which is already dispatched out of this warehouse in current period."
msgstr ""
#. module: stock_planning
#: help:stock.planning,procure_to_stock:0
-msgid "Chect to make procurement to stock location of selected warehouse. If not selected procurement will be made into input location of warehouse."
+msgid ""
+"Chect to make procurement to stock location of selected warehouse. If not "
+"selected procurement will be made into input location of warehouse."
msgstr ""
#. module: stock_planning
@@ -168,7 +186,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Planned Out Before: "
+msgid ""
+"\n"
+" Planned Out Before: "
msgstr ""
#. module: stock_planning
@@ -178,7 +198,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,supply_warehouse_id:0
-msgid "Warehouse used as source in supply pick move created by 'Supply from Another Warhouse'."
+msgid ""
+"Warehouse used as source in supply pick move created by 'Supply from Another "
+"Warhouse'."
msgstr ""
#. module: stock_planning
@@ -203,7 +225,8 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,already_in:0
-msgid "Quantity which is already picked up to this warehouse in current period."
+msgid ""
+"Quantity which is already picked up to this warehouse in current period."
msgstr ""
#. module: stock_planning
@@ -244,7 +267,10 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,incoming_before:0
-msgid "Confirmed incoming in periods before calculated (Including Already In). Between start date of current period and one day before start of calculated period."
+msgid ""
+"Confirmed incoming in periods before calculated (Including Already In). "
+"Between start date of current period and one day before start of calculated "
+"period."
msgstr ""
#. module: stock_planning
@@ -264,7 +290,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,company_forecast:0
-msgid "All sales forecasts for whole company (for all Warehouses) of selected Product during selected Period."
+msgid ""
+"All sales forecasts for whole company (for all Warehouses) of selected "
+"Product during selected Period."
msgstr ""
#. module: stock_planning
@@ -370,11 +398,13 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,stock_simulation:0
-msgid "Stock simulation at the end of selected Period.\n"
+msgid ""
+"Stock simulation at the end of selected Period.\n"
" For current period it is: \n"
"Initial Stock - Already Out + Already In - Expected Out + Incoming Left.\n"
"For periods ahead it is: \n"
-"Initial Stock - Planned Out Before + Incoming Before - Planned Out + Planned In."
+"Initial Stock - Planned Out Before + Incoming Before - Planned Out + Planned "
+"In."
msgstr ""
#. module: stock_planning
@@ -478,7 +508,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Warehouse Forecast: "
+msgid ""
+"\n"
+" Warehouse Forecast: "
msgstr ""
#. module: stock_planning
@@ -511,7 +543,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,product_uom:0
#: help:stock.sale.forecast,product_uom:0
-msgid "Unit of Measure used to show the quanities of stock calculation.You can use units form default category or from second category (UoS category)."
+msgid ""
+"Unit of Measure used to show the quanities of stock calculation.You can use "
+"units form default category or from second category (UoS category)."
msgstr ""
#. module: stock_planning
@@ -548,7 +582,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Planned Out: "
+msgid ""
+"\n"
+" Planned Out: "
msgstr ""
#. module: stock_planning
@@ -579,7 +615,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning.createlines,product_categ_id:0
-msgid "Planning will be created for products from Product Category selected by this field. This field is ignored when you check \"All Forecasted Product\" box."
+msgid ""
+"Planning will be created for products from Product Category selected by this "
+"field. This field is ignored when you check \"All Forecasted Product\" box."
msgstr ""
#. module: stock_planning
@@ -622,65 +660,123 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,planned_outgoing:0
-msgid "Enter planned outgoing quantity from selected Warehouse during the selected Period of selected Product. To plan this value look at Confirmed Out or Sales Forecasts. This value should be equal or greater than Confirmed Out."
+msgid ""
+"Enter planned outgoing quantity from selected Warehouse during the selected "
+"Period of selected Product. To plan this value look at Confirmed Out or "
+"Sales Forecasts. This value should be equal or greater than Confirmed Out."
msgstr ""
#. module: stock_planning
#: model:ir.module.module,description:stock_planning.module_meta_information
-msgid "\n"
-"This module is based on original OpenERP SA module stock_planning version 1.0 of the same name Master Procurement Schedule.\n"
+msgid ""
"\n"
-"Purpose of MPS is to allow create a manual procurement (requisition) apart of MRP scheduler (which works automatically on minimum stock rules).\n"
+"This module is based on original OpenERP SA module stock_planning version "
+"1.0 of the same name Master Procurement Schedule.\n"
+"\n"
+"Purpose of MPS is to allow create a manual procurement (requisition) apart "
+"of MRP scheduler (which works automatically on minimum stock rules).\n"
"\n"
"Terms used in the module:\n"
-"- Stock and Sales Period - is the time (between Start Date and End Date) for which you plan Stock and Sales Forecast and make Procurement Planning. \n"
-"- Stock and Sales Forecast - is the quantity of products you plan to sell in the Period.\n"
-"- Stock Planning - is the quantity of products you plan to purchase or produce for the Period.\n"
+"- Stock and Sales Period - is the time (between Start Date and End Date) for "
+"which you plan Stock and Sales Forecast and make Procurement Planning. \n"
+"- Stock and Sales Forecast - is the quantity of products you plan to sell in "
+"the Period.\n"
+"- Stock Planning - is the quantity of products you plan to purchase or "
+"produce for the Period.\n"
"\n"
-"Because we have another module sale_forecast which uses terms \"Sales Forecast\" and \"Planning\" as amount values we will use terms \"Stock and Sales Forecast\" and \"Stock Planning\" to emphasize that we use quantity values. \n"
+"Because we have another module sale_forecast which uses terms \"Sales "
+"Forecast\" and \"Planning\" as amount values we will use terms \"Stock and "
+"Sales Forecast\" and \"Stock Planning\" to emphasize that we use quantity "
+"values. \n"
"\n"
"Activity with this module is divided to three steps:\n"
"- Creating Periods. Mandatory step.\n"
-"- Creating Sale Forecasts and entering quantities to them. Optional step but useful for further planning.\n"
-"- Creating Planning lines, entering quantities to them and making Procurement. Making procurement is the final step for the Period.\n"
+"- Creating Sale Forecasts and entering quantities to them. Optional step but "
+"useful for further planning.\n"
+"- Creating Planning lines, entering quantities to them and making "
+"Procurement. Making procurement is the final step for the Period.\n"
"\n"
"Periods\n"
"=======\n"
-"You have two menu items for Periods in \"Sales Management - Configuration\". There are:\n"
-"- \"Create Sales Periods\" - Which automates creating daily, weekly or monthly periods.\n"
-"- \"Stock and sales Periods\" - Which allows to create any type of periods, change the dates and change the State of period.\n"
+"You have two menu items for Periods in \"Sales Management - Configuration\". "
+"There are:\n"
+"- \"Create Sales Periods\" - Which automates creating daily, weekly or "
+"monthly periods.\n"
+"- \"Stock and sales Periods\" - Which allows to create any type of periods, "
+"change the dates and change the State of period.\n"
"\n"
-"Creating periods is the first step you have to do to use modules features. You can create custom periods using \"New\" button in \"Stock and Sales Periods\" form or view but it is recommended to use automating tool.\n"
+"Creating periods is the first step you have to do to use modules features. "
+"You can create custom periods using \"New\" button in \"Stock and Sales "
+"Periods\" form or view but it is recommended to use automating tool.\n"
"\n"
"Remarks:\n"
-"- These periods (officially Stock and Sales Periods) are separated of Financial or other periods in the system.\n"
-"- Periods are not assigned to companies (when you use multicompany feature at all). Module suppose that you use the same periods across companies. If you wish to use different periods for different companies define them as you wish (they can overlap). Later on in this text will be indications how to use such periods.\n"
-"- When periods are created automatically their start and finish dates are with start hour 00:00:00 and end hour 23:59:00. Fe. when you create daily periods they will have start date 31.01.2010 00:00:00 and end date 31.01.2010 23:59:00. It works only in automatic creation of periods. When you create periods manually you have to take care about hours because you can have incorrect values form sales or stock. \n"
-"- If you use overlapping periods for the same product, warehouse and company results can be unpredictable.\n"
-"- If current date doesn't belong to any period or you have holes between periods results can be unpredictable.\n"
+"- These periods (officially Stock and Sales Periods) are separated of "
+"Financial or other periods in the system.\n"
+"- Periods are not assigned to companies (when you use multicompany feature "
+"at all). Module suppose that you use the same periods across companies. If "
+"you wish to use different periods for different companies define them as you "
+"wish (they can overlap). Later on in this text will be indications how to "
+"use such periods.\n"
+"- When periods are created automatically their start and finish dates are "
+"with start hour 00:00:00 and end hour 23:59:00. Fe. when you create daily "
+"periods they will have start date 31.01.2010 00:00:00 and end date "
+"31.01.2010 23:59:00. It works only in automatic creation of periods. When "
+"you create periods manually you have to take care about hours because you "
+"can have incorrect values form sales or stock. \n"
+"- If you use overlapping periods for the same product, warehouse and company "
+"results can be unpredictable.\n"
+"- If current date doesn't belong to any period or you have holes between "
+"periods results can be unpredictable.\n"
"\n"
"Sales Forecasts\n"
"===============\n"
-"You have few menus for Sales forecast in \"Sales Management - Sales Forecasts\".\n"
-"- \"Create Sales Forecasts for Sales Periods\" - which automates creating forecasts lines according to some parameters.\n"
-"- \"Sales Forecasts\" - few menus for working with forecasts lists and forms.\n"
+"You have few menus for Sales forecast in \"Sales Management - Sales "
+"Forecasts\".\n"
+"- \"Create Sales Forecasts for Sales Periods\" - which automates creating "
+"forecasts lines according to some parameters.\n"
+"- \"Sales Forecasts\" - few menus for working with forecasts lists and "
+"forms.\n"
"\n"
-"Menu \"Create Sales Forecasts for Sales Periods\" creates Forecasts for products from selected Category, for selected Period and for selected Warehouse. It is an option \"Copy Last Forecast\" to copy forecast and other settings of period before this one to created one.\n"
+"Menu \"Create Sales Forecasts for Sales Periods\" creates Forecasts for "
+"products from selected Category, for selected Period and for selected "
+"Warehouse. It is an option \"Copy Last Forecast\" to copy forecast and other "
+"settings of period before this one to created one.\n"
"\n"
"Remarks:\n"
-"- This tool doesn't create lines, if relevant lines (for the same Product, Period, Warehouse and validated or created by you) already exists. If you wish to create another forecast, if relevant lines exists you have to do it manually using menus described bellow.\n"
-"- When created lines are validated by someone else you can use this tool to create another lines for the same Period, Product and Warehouse. \n"
-"- When you choose \"Copy Last Forecast\" created line takes quantity and some settings from your (validated by you or created by you if not validated yet) forecast which is for last period before period of created forecast. If there are few your forecasts for period before this one (it is possible) system takes one of them (no rule which of them).\n"
+"- This tool doesn't create lines, if relevant lines (for the same Product, "
+"Period, Warehouse and validated or created by you) already exists. If you "
+"wish to create another forecast, if relevant lines exists you have to do it "
+"manually using menus described bellow.\n"
+"- When created lines are validated by someone else you can use this tool to "
+"create another lines for the same Period, Product and Warehouse. \n"
+"- When you choose \"Copy Last Forecast\" created line takes quantity and "
+"some settings from your (validated by you or created by you if not validated "
+"yet) forecast which is for last period before period of created forecast. If "
+"there are few your forecasts for period before this one (it is possible) "
+"system takes one of them (no rule which of them).\n"
"\n"
"\n"
"Menus \"Sales Forecasts\"\n"
-"On \"Sales Forecast\" form mainly you have to enter a forecast quantity in \"Product Quantity\". Further calculation can work for draft forecasts. But validation can save your data against any accidental changes. You can click \"Validate\" button but it is not mandatory.\n"
+"On \"Sales Forecast\" form mainly you have to enter a forecast quantity in "
+"\"Product Quantity\". Further calculation can work for draft forecasts. But "
+"validation can save your data against any accidental changes. You can click "
+"\"Validate\" button but it is not mandatory.\n"
"\n"
-"Instead of forecast quantity you can enter amount of forecast sales in field \"Product Amount\". System will count quantity from amount according to Sale price of the Product.\n"
+"Instead of forecast quantity you can enter amount of forecast sales in field "
+"\"Product Amount\". System will count quantity from amount according to Sale "
+"price of the Product.\n"
"\n"
-"All values on the form are expressed in unit of measure selected on form. You can select one of unit of measure from default category or from second category. When you change unit of measure the quanities will be recalculated according to new UoM: editable values (blue fields) immediately, non edited fields after clicking of \"Calculate Planning\" button.\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
"\n"
-"To find proper value for Sale Forecast you can use \"Sales History\" table for this product. You have to enter parameters to the top and left of this table and system will count sale quantities according to these parameters. So you can select fe. your department (at the top) then (to the left): last period, period before last and period year ago.\n"
+"To find proper value for Sale Forecast you can use \"Sales History\" table "
+"for this product. You have to enter parameters to the top and left of this "
+"table and system will count sale quantities according to these parameters. "
+"So you can select fe. your department (at the top) then (to the left): last "
+"period, period before last and period year ago.\n"
"\n"
"Remarks:\n"
"\n"
@@ -688,58 +784,119 @@ msgid "\n"
"Procurement Planning\n"
"====================\n"
"Menu for Planning you can find in \"Warehouse - Stock Planning\".\n"
-"- \"Create Stock Planning Lines\" - allows you to automate creating planning lines according to some parameters.\n"
-"- \"Master Procurement Scheduler\" - is the most important menu of the module which allows to create procurement.\n"
+"- \"Create Stock Planning Lines\" - allows you to automate creating planning "
+"lines according to some parameters.\n"
+"- \"Master Procurement Scheduler\" - is the most important menu of the "
+"module which allows to create procurement.\n"
"\n"
-"As Sales forecast is phase of planning sales. The Procurement Planning (Planning) is the phase of scheduling Purchasing or Producing. You can create Procurement Planning quickly using tool from menu \"Create Stock Planning Lines\", then you can review created planning and make procurement using menu \"Master Procurement Schedule\".\n"
+"As Sales forecast is phase of planning sales. The Procurement Planning "
+"(Planning) is the phase of scheduling Purchasing or Producing. You can "
+"create Procurement Planning quickly using tool from menu \"Create Stock "
+"Planning Lines\", then you can review created planning and make procurement "
+"using menu \"Master Procurement Schedule\".\n"
"\n"
-"Menu \"Create Stock Planning Lines\" allows you to create quickly Planning lines for products from selected Category, for selected Period, and for selected Warehouse. When you check option \"All Products with Forecast\" system creates lines for all products having forecast for selected Period and Warehouse. Selected Category will be ignored in this case.\n"
+"Menu \"Create Stock Planning Lines\" allows you to create quickly Planning "
+"lines for products from selected Category, for selected Period, and for "
+"selected Warehouse. When you check option \"All Products with Forecast\" "
+"system creates lines for all products having forecast for selected Period "
+"and Warehouse. Selected Category will be ignored in this case.\n"
"\n"
-"Under menu \"Master Procurement Scheduler\" you can generally change the values \"Planned Out\" and \"Planned In\" to observe the field \"Stock Simulation\" and decide if this value would be accurate for end of the Period. \n"
-"\"Planned Out\" can be based on \"Warehouse Forecast\" which is the sum of all forecasts for Period and Warehouse. But your planning can be based on any other information you have. It is not necessary to have any forecast. \n"
-"\"Planned In\" quantity is used to calculate field \"Incoming Left\" which is the quantity to be procured to make stock as indicated in \"Stock Simulation\" at the end of Period. You can compare \"Stock Simulation\" quantity to minimum stock rules visible on the form. But you can plan different quantity than in Minimum Stock Rules. Calculation is made for whole Warehouse by default. But if you want to see values for Stock location of calculated warehouse you can use check box \"Stock Location Only\".\n"
+"Under menu \"Master Procurement Scheduler\" you can generally change the "
+"values \"Planned Out\" and \"Planned In\" to observe the field \"Stock "
+"Simulation\" and decide if this value would be accurate for end of the "
+"Period. \n"
+"\"Planned Out\" can be based on \"Warehouse Forecast\" which is the sum of "
+"all forecasts for Period and Warehouse. But your planning can be based on "
+"any other information you have. It is not necessary to have any forecast. \n"
+"\"Planned In\" quantity is used to calculate field \"Incoming Left\" which "
+"is the quantity to be procured to make stock as indicated in \"Stock "
+"Simulation\" at the end of Period. You can compare \"Stock Simulation\" "
+"quantity to minimum stock rules visible on the form. But you can plan "
+"different quantity than in Minimum Stock Rules. Calculation is made for "
+"whole Warehouse by default. But if you want to see values for Stock location "
+"of calculated warehouse you can use check box \"Stock Location Only\".\n"
"\n"
-"If after few tries you decide that you found correct quantities for \"Planned Out\" and \"Planned In\" and you are satisfied with end of period stock calculated in \"Stock Simulation\" you can click \"Procure Incoming Left\" button to procure quantity of field \"Incoming Left\" into the Warehouse. System creates appropriate Procurement Order. You can decide if procurement will be made to Stock or Input location of calculated Warehouse. \n"
+"If after few tries you decide that you found correct quantities for "
+"\"Planned Out\" and \"Planned In\" and you are satisfied with end of period "
+"stock calculated in \"Stock Simulation\" you can click \"Procure Incoming "
+"Left\" button to procure quantity of field \"Incoming Left\" into the "
+"Warehouse. System creates appropriate Procurement Order. You can decide if "
+"procurement will be made to Stock or Input location of calculated Warehouse. "
"\n"
-"If you don't want to Produce or Buy the product but just pick calculated quantity from another warehouse you can click \"Supply from Another Warehouse\" (instead of \"Procure Incoming Left\"). System creates pick list with move from selected source Warehouse to calculated Warehouse (as destination). You can also decide if this pick should be done from Stock or Output location of source warehouse. Destination location (Stock or Input) of destination warehouse will be used as set for \"Procure Incoming Left\". \n"
"\n"
-"To see proper quantities in fields \"Confirmed In\", \"Confirmed Out\", \"Confirmed In Before\", \"Planned Out Before\" and \"Stock Simulation\" you have to click button \"Calculate Planning\".\n"
+"If you don't want to Produce or Buy the product but just pick calculated "
+"quantity from another warehouse you can click \"Supply from Another "
+"Warehouse\" (instead of \"Procure Incoming Left\"). System creates pick list "
+"with move from selected source Warehouse to calculated Warehouse (as "
+"destination). You can also decide if this pick should be done from Stock or "
+"Output location of source warehouse. Destination location (Stock or Input) "
+"of destination warehouse will be used as set for \"Procure Incoming Left\". "
"\n"
-"All values on the form are expressed in unit of measure selected on form. You can select one of unit of measure from default category or from second category. When you change unit of measure the quanities will be recalculated according to new UoM: editable values (blue fields) immediately, non edited fields after clicking of \"Calculate Planning\" button.\n"
+"\n"
+"To see proper quantities in fields \"Confirmed In\", \"Confirmed Out\", "
+"\"Confirmed In Before\", \"Planned Out Before\" and \"Stock Simulation\" you "
+"have to click button \"Calculate Planning\".\n"
+"\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
"\n"
"How Stock Simulation field is calculated:\n"
-"Generally Stock Simulation shows the stock for end of the calculated period according to some planned or confirmed stock moves. Calculation always starts with quantity of real stock of beginning of current period. Then calculation adds or subtracts quantities of calculated period or periods before calculated.\n"
-"When you are in the same period (current period is the same as calculated) Stock Simulation is calculated as follows:\n"
+"Generally Stock Simulation shows the stock for end of the calculated period "
+"according to some planned or confirmed stock moves. Calculation always "
+"starts with quantity of real stock of beginning of current period. Then "
+"calculation adds or subtracts quantities of calculated period or periods "
+"before calculated.\n"
+"When you are in the same period (current period is the same as calculated) "
+"Stock Simulation is calculated as follows:\n"
"Stock Simulation = \n"
-" Stock of beginning of current Period\n"
-" - Planned Out \n"
-" + Planned In\n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out \n"
+"\t+ Planned In\n"
"\n"
"When you calculate period next to current:\n"
"Stock Simulation = \n"
-" Stock of beginning of current Period\n"
-" - Planned Out of current Period \n"
-" + Confirmed In of current Period (incl. Already In)\n"
-" - Planned Out of calculated Period \n"
-" + Planned In of calculated Period .\n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out of current Period \n"
+"\t+ Confirmed In of current Period (incl. Already In)\n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period .\n"
"\n"
-"As you see calculated Period is taken the same way like in case above. But calculation of current Period are made a little bit different. First you should note that system takes for current Period only Confirmed In moves. It means that you have to make planning and procurement for current Period before this calculation (for Period next to current). \n"
+"As you see calculated Period is taken the same way like in case above. But "
+"calculation of current Period are made a little bit different. First you "
+"should note that system takes for current Period only Confirmed In moves. It "
+"means that you have to make planning and procurement for current Period "
+"before this calculation (for Period next to current). \n"
"\n"
"When you calculate Period ahead:\n"
"Stock Simulation = \n"
-" Stock of beginning of current Period \n"
-" - Sum of Planned Out of Periods before calculated \n"
-" + Sum of Confirmed In of Periods before calculated (incl. Already In) \n"
-" - Planned Out of calculated Period \n"
-" + Planned In of calculated Period.\n"
+"\tStock of beginning of current Period \n"
+"\t- Sum of Planned Out of Periods before calculated \n"
+"\t+ Sum of Confirmed In of Periods before calculated (incl. Already In) \n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period.\n"
"\n"
-"Periods before calculated means periods starting from current till period before calculated.\n"
+"Periods before calculated means periods starting from current till period "
+"before calculated.\n"
"\n"
"Remarks:\n"
-"- Remember to make planning for all periods before calculated because omitting these quantities and procurements can cause wrong suggestions for procurements few periods ahead.\n"
-"- If you made planning few periods ahead and you find that real Confirmed Out is bigger than Planned Out in some periods before you can repeat Planning and make another procurement. You should do it in the same planning line. If you create another planning line the suggestions can be wrong.\n"
-"- When you wish to work with different periods for some part of products define two kinds of periods (fe. Weekly and Monthly) and use them for different products. Example: If you use always Weekly periods for Products A, and Monthly periods for Products B your all calculations will work correctly. You can also use different kind of periods for the same products from different warehouse or companies. But you cannot use overlapping periods for the same product, warehouse and company because results can be unpredictable. The same apply to Forecasts lines.\n"
-""
+"- Remember to make planning for all periods before calculated because "
+"omitting these quantities and procurements can cause wrong suggestions for "
+"procurements few periods ahead.\n"
+"- If you made planning few periods ahead and you find that real Confirmed "
+"Out is bigger than Planned Out in some periods before you can repeat "
+"Planning and make another procurement. You should do it in the same planning "
+"line. If you create another planning line the suggestions can be wrong.\n"
+"- When you wish to work with different periods for some part of products "
+"define two kinds of periods (fe. Weekly and Monthly) and use them for "
+"different products. Example: If you use always Weekly periods for Products "
+"A, and Monthly periods for Products B your all calculations will work "
+"correctly. You can also use different kind of periods for the same products "
+"from different warehouse or companies. But you cannot use overlapping "
+"periods for the same product, warehouse and company because results can be "
+"unpredictable. The same apply to Forecasts lines.\n"
msgstr ""
#. module: stock_planning
@@ -756,7 +913,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "You must specify a Source Warehouse different than calculated (destination) Warehouse !"
+msgid ""
+"You must specify a Source Warehouse different than calculated (destination) "
+"Warehouse !"
msgstr ""
#. module: stock_planning
@@ -778,7 +937,10 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,outgoing_left:0
-msgid "Quantity expected to go out in selected period. As a difference between Planned Out and Confirmed Out. For current period Already Out is also calculated"
+msgid ""
+"Quantity expected to go out in selected period. As a difference between "
+"Planned Out and Confirmed Out. For current period Already Out is also "
+"calculated"
msgstr ""
#. module: stock_planning
@@ -810,7 +972,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Initial Stock: "
+msgid ""
+"\n"
+" Initial Stock: "
msgstr ""
#. module: stock_planning
@@ -881,13 +1045,17 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Stock Simulation: "
+msgid ""
+"\n"
+" Stock Simulation: "
msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Confirmed Out: "
+msgid ""
+"\n"
+" Confirmed Out: "
msgstr ""
#. module: stock_planning
@@ -902,7 +1070,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning.createlines,forecasted_products:0
-msgid "Check this box to create planning for all products having any forecast for selected Warehouse and Period. Product Category field will be ignored."
+msgid ""
+"Check this box to create planning for all products having any forecast for "
+"selected Warehouse and Period. Product Category field will be ignored."
msgstr ""
#. module: stock_planning
@@ -1010,7 +1180,8 @@ msgstr ""
#. module: stock_planning
#: constraint:ir.model:0
-msgid "The Object name must start with x_ and not contain any special character !"
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
msgstr ""
#. module: stock_planning
@@ -1065,7 +1236,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.sale.forecast,warehouse_id:0
-msgid "Shows which warehouse this forecast concerns. If during stock planning you will need sales forecast for all warehouses choose any warehouse now."
+msgid ""
+"Shows which warehouse this forecast concerns. If during stock planning you "
+"will need sales forecast for all warehouses choose any warehouse now."
msgstr ""
#. module: stock_planning
@@ -1080,7 +1253,10 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,to_procure:0
-msgid "Enter quantity which (by your plan) should come in. Change this value and observe Stock simulation. This value should be equal or greater than Confirmed In."
+msgid ""
+"Enter quantity which (by your plan) should come in. Change this value and "
+"observe Stock simulation. This value should be equal or greater than "
+"Confirmed In."
msgstr ""
#. module: stock_planning
@@ -1106,7 +1282,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\nFor period: "
+msgid ""
+"\n"
+"For period: "
msgstr ""
#. module: stock_planning
@@ -1143,7 +1321,10 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,stock_supply_location:0
-msgid "Check to supply from Stock location of Supply Warehouse. If not checked supply will be made from Output location of Supply Warehouse. Used in 'Supply from Another Warhouse' with Supply Warehouse."
+msgid ""
+"Check to supply from Stock location of Supply Warehouse. If not checked "
+"supply will be made from Output location of Supply Warehouse. Used in "
+"'Supply from Another Warhouse' with Supply Warehouse."
msgstr ""
#. module: stock_planning
@@ -1182,7 +1363,9 @@ msgstr ""
#. module: stock_planning
#: code:addons/stock_planning/stock_planning.py:0
#, python-format
-msgid "\n Expected Out: "
+msgid ""
+"\n"
+" Expected Out: "
msgstr ""
#. module: stock_planning
@@ -1221,7 +1404,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,period_id:0
-msgid "Period for this planning. Requisition will be created for beginning of the period."
+msgid ""
+"Period for this planning. Requisition will be created for beginning of the "
+"period."
msgstr ""
#. module: stock_planning
@@ -1236,7 +1421,9 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,confirmed_forecasts_only:0
-msgid "Check to take validated forecasts only. If not checked system takes validated and draft forecasts."
+msgid ""
+"Check to take validated forecasts only. If not checked system takes "
+"validated and draft forecasts."
msgstr ""
#. module: stock_planning
@@ -1270,11 +1457,13 @@ msgstr ""
#. module: stock_planning
#: help:stock.planning,incoming_left:0
-msgid "Quantity left to Planned incoming quantity. This is calculated difference between Planned In and Confirmed In. For current period Already In is also calculated. This value is used to create procurement for lacking quantity."
+msgid ""
+"Quantity left to Planned incoming quantity. This is calculated difference "
+"between Planned In and Confirmed In. For current period Already In is also "
+"calculated. This value is used to create procurement for lacking quantity."
msgstr ""
#. module: stock_planning
#: field:stock.planning,stock_start:0
msgid "Initial Stock"
msgstr ""
-
diff --git a/addons/stock_planning/i18n/pt_BR.po b/addons/stock_planning/i18n/pt_BR.po
new file mode 100644
index 00000000000..8affc2682f8
--- /dev/null
+++ b/addons/stock_planning/i18n/pt_BR.po
@@ -0,0 +1,1470 @@
+# Brazilian Portuguese 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: 2010-08-20 10:50+0000\n"
+"PO-Revision-Date: 2010-08-31 08:17+0000\n"
+"Last-Translator: OpenERP Administrators \n"
+"Language-Team: Brazilian Portuguese \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2010-09-01 04:00+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. module: stock_planning
+#: code:addons/stock_planning/wizard/stock_planning_createlines.py:0
+#, python-format
+msgid ""
+"No forecasts for selected period or no products in selected category !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_only:0
+msgid ""
+"Check to calculate stock location of selected warehouse only. If not "
+"selected calculation is made for input, stock and output location of "
+"warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,maximum_op:0
+msgid "Maximum Rule"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_company:0
+msgid "This Copmany Period1"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: view:stock.sale.forecast:0
+msgid "Group By..."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Already Out: "
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_amt:0
+msgid ""
+"Forecast value which will be converted to Product Quantity according to "
+"prices."
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Incoming Left must be greater than 0 !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing_before:0
+msgid ""
+"Planned Out in periods before calculated. Between start date of current "
+"period and one day before start of calculated period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/wizard/stock_planning_forecast.py:0
+#, python-format
+msgid "No products in selected category !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,warehouse_id:0
+msgid ""
+"Warehouse which forecasts will concern. If during stock planning you will "
+"need sales forecast for all warehouses choose any warehouse now."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing_left:0
+msgid "Expected Out"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid " "
+msgstr " "
+
+#. module: stock_planning
+#: field:stock.planning,incoming_left:0
+msgid "Incoming Left"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Requisition history"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast.createlines:0
+msgid "Create Forecasts Lines"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing:0
+msgid "Quantity of all confirmed outgoing moves in calculated Period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Daily Periods"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: field:stock.planning,company_id:0
+#: field:stock.planning.createlines,company_id:0
+#: view:stock.sale.forecast:0
+#: field:stock.sale.forecast,company_id:0
+#: field:stock.sale.forecast.createlines,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,warehouse_forecast:0
+msgid ""
+"All sales forecasts for selected Warehouse of selected Product during "
+"selected Period."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period_creatlines
+msgid "Create Stock and Sales Periods"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Minimum Stock Rule Indicators"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,period_id:0
+msgid "Period which forecasts will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_only:0
+msgid "Stock Location Only"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,already_out:0
+msgid ""
+"Quantity which is already dispatched out of this warehouse in current period."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,procure_to_stock:0
+msgid ""
+"Chect to make procurement to stock location of selected warehouse. If not "
+"selected procurement will be made into input location of warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Current Period Situation"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Planned Out Before: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Monthly Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,supply_warehouse_id:0
+msgid ""
+"Warehouse used as source in supply pick move created by 'Supply from Another "
+"Warhouse'."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_period_createlines
+msgid "stock.period.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing_before:0
+msgid "Planned Out Before"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning.createlines,forecasted_products:0
+msgid "All Products with Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Periods :"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,already_in:0
+msgid ""
+"Quantity which is already picked up to this warehouse in current period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Confirmed In Before: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Stock and Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_sale_forecast
+msgid "stock.sale.forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_dept_id:0
+msgid "This Department"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,to_procure:0
+msgid "Planned In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_simulation:0
+msgid "Stock Simulation"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_planning_createlines
+msgid "stock.planning.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming_before:0
+msgid ""
+"Confirmed incoming in periods before calculated (Including Already In). "
+"Between start date of current period and one day before start of calculated "
+"period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Search Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_user:0
+msgid "This User Period5"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,history:0
+msgid "History of procurement or internal supply of this planning line."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,company_forecast:0
+msgid ""
+"All sales forecasts for whole company (for all Warehouses) of selected "
+"Product during selected Period."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_user:0
+msgid "This User Period1"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_user:0
+msgid "This User Period3"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning_main
+#: view:stock.planning:0
+msgid "Stock Planning"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,minimum_op:0
+msgid "Minimum Rule"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Procure Incoming Left"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Closed"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Pick List "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Create"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_view_stock_planning_form
+#: model:ir.module.module,shortdesc:stock_planning.module_meta_information
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning
+#: view:stock.planning:0
+msgid "Master Procurement Schedule"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Creation Date: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,period_id:0
+#: field:stock.planning.createlines,period_id:0
+#: field:stock.sale.forecast,period_id:0
+#: field:stock.sale.forecast.createlines,period_id:0
+msgid "Period"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: field:stock.period,state:0
+#: field:stock.planning,state:0
+#: field:stock.sale.forecast,state:0
+msgid "State"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,product_categ_id:0
+msgid "Product Category of products which created forecasts will concern."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_period
+msgid "stock period"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_sale_forecast_createlines
+msgid "stock.sale.forecast.createlines"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,warehouse_id:0
+#: field:stock.planning.createlines,warehouse_id:0
+#: field:stock.sale.forecast,warehouse_id:0
+#: field:stock.sale.forecast.createlines,warehouse_id:0
+msgid "Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_simulation:0
+msgid ""
+"Stock simulation at the end of selected Period.\n"
+" For current period it is: \n"
+"Initial Stock - Already Out + Already In - Expected Out + Incoming Left.\n"
+"For periods ahead it is: \n"
+"Initial Stock - Planned Out Before + Incoming Before - Planned Out + Planned "
+"In."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,analyze_company:0
+msgid "Check this box to see the sales for whole company."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,name:0
+msgid "Name"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Search Stock Planning"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,incoming_before:0
+msgid "Incoming Before"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning.createlines,product_categ_id:0
+#: field:stock.sale.forecast.createlines,product_categ_id:0
+msgid "Product Category"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#: code:addons/stock_planning/wizard/stock_planning_createlines.py:0
+#: code:addons/stock_planning/wizard/stock_planning_forecast.py:0
+#, python-format
+msgid "Error !"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Manual planning for "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_user_id:0
+msgid "This User"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Supply from Another Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Calculate Planning"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Procurement created in MPS by user: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Invalid action !"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_start:0
+msgid "Stock quantity one day before current period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create Weekly Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,maximum_op:0
+msgid "Maximum quantity set in Minimum Stock Rules for this Warhouse"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "You must specify a Source Warehouse !"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+msgid "Creates planning lines for selected period and warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Warehouse Forecast: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Cannot delete Validated Sale Forecasts !"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_user:0
+msgid "This User Period4"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Note: Doesn't duplicate existing lines created by you."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Stock and Sales Period"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,company_forecast:0
+msgid "Company Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,product_uom:0
+#: help:stock.sale.forecast,product_uom:0
+msgid ""
+"Unit of Measure used to show the quanities of stock calculation.You can use "
+"units form default category or from second category (UoS category)."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per User :"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,name:0
+#: field:stock.period.createlines,name:0
+msgid "Period Name"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,user_id:0
+msgid "Created/Validated by"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,warehouse_forecast:0
+msgid "Warehouse Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_company:0
+msgid "This Company Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_company:0
+msgid "This Company Period5"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Planned Out: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_company:0
+msgid "This Company Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_company:0
+msgid "This Company Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,date_start:0
+#: field:stock.period.createlines,date_start:0
+msgid "Start Date"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_user:0
+msgid "This User Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,confirmed_forecasts_only:0
+msgid "Validated Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,product_categ_id:0
+msgid ""
+"Planning will be created for products from Product Category selected by this "
+"field. This field is ignored when you check \"All Forecasted Product\" box."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,planned_outgoing:0
+msgid "Planned Out"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: selection:stock.period,state:0
+#: selection:stock.planning,state:0
+#: selection:stock.sale.forecast,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.ui.menu:0
+msgid "Error ! You can not create recursive Menu."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: view:stock.sale.forecast:0
+msgid "Warehouse "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_dept:0
+msgid "This Dept Period5"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Create periods for Stock and Sales Planning"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,planned_outgoing:0
+msgid ""
+"Enter planned outgoing quantity from selected Warehouse during the selected "
+"Period of selected Product. To plan this value look at Confirmed Out or "
+"Sales Forecasts. This value should be equal or greater than Confirmed Out."
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.module.module,description:stock_planning.module_meta_information
+msgid ""
+"\n"
+"This module is based on original OpenERP SA module stock_planning version "
+"1.0 of the same name Master Procurement Schedule.\n"
+"\n"
+"Purpose of MPS is to allow create a manual procurement (requisition) apart "
+"of MRP scheduler (which works automatically on minimum stock rules).\n"
+"\n"
+"Terms used in the module:\n"
+"- Stock and Sales Period - is the time (between Start Date and End Date) for "
+"which you plan Stock and Sales Forecast and make Procurement Planning. \n"
+"- Stock and Sales Forecast - is the quantity of products you plan to sell in "
+"the Period.\n"
+"- Stock Planning - is the quantity of products you plan to purchase or "
+"produce for the Period.\n"
+"\n"
+"Because we have another module sale_forecast which uses terms \"Sales "
+"Forecast\" and \"Planning\" as amount values we will use terms \"Stock and "
+"Sales Forecast\" and \"Stock Planning\" to emphasize that we use quantity "
+"values. \n"
+"\n"
+"Activity with this module is divided to three steps:\n"
+"- Creating Periods. Mandatory step.\n"
+"- Creating Sale Forecasts and entering quantities to them. Optional step but "
+"useful for further planning.\n"
+"- Creating Planning lines, entering quantities to them and making "
+"Procurement. Making procurement is the final step for the Period.\n"
+"\n"
+"Periods\n"
+"=======\n"
+"You have two menu items for Periods in \"Sales Management - Configuration\". "
+"There are:\n"
+"- \"Create Sales Periods\" - Which automates creating daily, weekly or "
+"monthly periods.\n"
+"- \"Stock and sales Periods\" - Which allows to create any type of periods, "
+"change the dates and change the State of period.\n"
+"\n"
+"Creating periods is the first step you have to do to use modules features. "
+"You can create custom periods using \"New\" button in \"Stock and Sales "
+"Periods\" form or view but it is recommended to use automating tool.\n"
+"\n"
+"Remarks:\n"
+"- These periods (officially Stock and Sales Periods) are separated of "
+"Financial or other periods in the system.\n"
+"- Periods are not assigned to companies (when you use multicompany feature "
+"at all). Module suppose that you use the same periods across companies. If "
+"you wish to use different periods for different companies define them as you "
+"wish (they can overlap). Later on in this text will be indications how to "
+"use such periods.\n"
+"- When periods are created automatically their start and finish dates are "
+"with start hour 00:00:00 and end hour 23:59:00. Fe. when you create daily "
+"periods they will have start date 31.01.2010 00:00:00 and end date "
+"31.01.2010 23:59:00. It works only in automatic creation of periods. When "
+"you create periods manually you have to take care about hours because you "
+"can have incorrect values form sales or stock. \n"
+"- If you use overlapping periods for the same product, warehouse and company "
+"results can be unpredictable.\n"
+"- If current date doesn't belong to any period or you have holes between "
+"periods results can be unpredictable.\n"
+"\n"
+"Sales Forecasts\n"
+"===============\n"
+"You have few menus for Sales forecast in \"Sales Management - Sales "
+"Forecasts\".\n"
+"- \"Create Sales Forecasts for Sales Periods\" - which automates creating "
+"forecasts lines according to some parameters.\n"
+"- \"Sales Forecasts\" - few menus for working with forecasts lists and "
+"forms.\n"
+"\n"
+"Menu \"Create Sales Forecasts for Sales Periods\" creates Forecasts for "
+"products from selected Category, for selected Period and for selected "
+"Warehouse. It is an option \"Copy Last Forecast\" to copy forecast and other "
+"settings of period before this one to created one.\n"
+"\n"
+"Remarks:\n"
+"- This tool doesn't create lines, if relevant lines (for the same Product, "
+"Period, Warehouse and validated or created by you) already exists. If you "
+"wish to create another forecast, if relevant lines exists you have to do it "
+"manually using menus described bellow.\n"
+"- When created lines are validated by someone else you can use this tool to "
+"create another lines for the same Period, Product and Warehouse. \n"
+"- When you choose \"Copy Last Forecast\" created line takes quantity and "
+"some settings from your (validated by you or created by you if not validated "
+"yet) forecast which is for last period before period of created forecast. If "
+"there are few your forecasts for period before this one (it is possible) "
+"system takes one of them (no rule which of them).\n"
+"\n"
+"\n"
+"Menus \"Sales Forecasts\"\n"
+"On \"Sales Forecast\" form mainly you have to enter a forecast quantity in "
+"\"Product Quantity\". Further calculation can work for draft forecasts. But "
+"validation can save your data against any accidental changes. You can click "
+"\"Validate\" button but it is not mandatory.\n"
+"\n"
+"Instead of forecast quantity you can enter amount of forecast sales in field "
+"\"Product Amount\". System will count quantity from amount according to Sale "
+"price of the Product.\n"
+"\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
+"\n"
+"To find proper value for Sale Forecast you can use \"Sales History\" table "
+"for this product. You have to enter parameters to the top and left of this "
+"table and system will count sale quantities according to these parameters. "
+"So you can select fe. your department (at the top) then (to the left): last "
+"period, period before last and period year ago.\n"
+"\n"
+"Remarks:\n"
+"\n"
+"\n"
+"Procurement Planning\n"
+"====================\n"
+"Menu for Planning you can find in \"Warehouse - Stock Planning\".\n"
+"- \"Create Stock Planning Lines\" - allows you to automate creating planning "
+"lines according to some parameters.\n"
+"- \"Master Procurement Scheduler\" - is the most important menu of the "
+"module which allows to create procurement.\n"
+"\n"
+"As Sales forecast is phase of planning sales. The Procurement Planning "
+"(Planning) is the phase of scheduling Purchasing or Producing. You can "
+"create Procurement Planning quickly using tool from menu \"Create Stock "
+"Planning Lines\", then you can review created planning and make procurement "
+"using menu \"Master Procurement Schedule\".\n"
+"\n"
+"Menu \"Create Stock Planning Lines\" allows you to create quickly Planning "
+"lines for products from selected Category, for selected Period, and for "
+"selected Warehouse. When you check option \"All Products with Forecast\" "
+"system creates lines for all products having forecast for selected Period "
+"and Warehouse. Selected Category will be ignored in this case.\n"
+"\n"
+"Under menu \"Master Procurement Scheduler\" you can generally change the "
+"values \"Planned Out\" and \"Planned In\" to observe the field \"Stock "
+"Simulation\" and decide if this value would be accurate for end of the "
+"Period. \n"
+"\"Planned Out\" can be based on \"Warehouse Forecast\" which is the sum of "
+"all forecasts for Period and Warehouse. But your planning can be based on "
+"any other information you have. It is not necessary to have any forecast. \n"
+"\"Planned In\" quantity is used to calculate field \"Incoming Left\" which "
+"is the quantity to be procured to make stock as indicated in \"Stock "
+"Simulation\" at the end of Period. You can compare \"Stock Simulation\" "
+"quantity to minimum stock rules visible on the form. But you can plan "
+"different quantity than in Minimum Stock Rules. Calculation is made for "
+"whole Warehouse by default. But if you want to see values for Stock location "
+"of calculated warehouse you can use check box \"Stock Location Only\".\n"
+"\n"
+"If after few tries you decide that you found correct quantities for "
+"\"Planned Out\" and \"Planned In\" and you are satisfied with end of period "
+"stock calculated in \"Stock Simulation\" you can click \"Procure Incoming "
+"Left\" button to procure quantity of field \"Incoming Left\" into the "
+"Warehouse. System creates appropriate Procurement Order. You can decide if "
+"procurement will be made to Stock or Input location of calculated Warehouse. "
+"\n"
+"\n"
+"If you don't want to Produce or Buy the product but just pick calculated "
+"quantity from another warehouse you can click \"Supply from Another "
+"Warehouse\" (instead of \"Procure Incoming Left\"). System creates pick list "
+"with move from selected source Warehouse to calculated Warehouse (as "
+"destination). You can also decide if this pick should be done from Stock or "
+"Output location of source warehouse. Destination location (Stock or Input) "
+"of destination warehouse will be used as set for \"Procure Incoming Left\". "
+"\n"
+"\n"
+"To see proper quantities in fields \"Confirmed In\", \"Confirmed Out\", "
+"\"Confirmed In Before\", \"Planned Out Before\" and \"Stock Simulation\" you "
+"have to click button \"Calculate Planning\".\n"
+"\n"
+"All values on the form are expressed in unit of measure selected on form. "
+"You can select one of unit of measure from default category or from second "
+"category. When you change unit of measure the quanities will be recalculated "
+"according to new UoM: editable values (blue fields) immediately, non edited "
+"fields after clicking of \"Calculate Planning\" button.\n"
+"\n"
+"How Stock Simulation field is calculated:\n"
+"Generally Stock Simulation shows the stock for end of the calculated period "
+"according to some planned or confirmed stock moves. Calculation always "
+"starts with quantity of real stock of beginning of current period. Then "
+"calculation adds or subtracts quantities of calculated period or periods "
+"before calculated.\n"
+"When you are in the same period (current period is the same as calculated) "
+"Stock Simulation is calculated as follows:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out \n"
+"\t+ Planned In\n"
+"\n"
+"When you calculate period next to current:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period\n"
+"\t- Planned Out of current Period \n"
+"\t+ Confirmed In of current Period (incl. Already In)\n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period .\n"
+"\n"
+"As you see calculated Period is taken the same way like in case above. But "
+"calculation of current Period are made a little bit different. First you "
+"should note that system takes for current Period only Confirmed In moves. It "
+"means that you have to make planning and procurement for current Period "
+"before this calculation (for Period next to current). \n"
+"\n"
+"When you calculate Period ahead:\n"
+"Stock Simulation = \n"
+"\tStock of beginning of current Period \n"
+"\t- Sum of Planned Out of Periods before calculated \n"
+"\t+ Sum of Confirmed In of Periods before calculated (incl. Already In) \n"
+"\t- Planned Out of calculated Period \n"
+"\t+ Planned In of calculated Period.\n"
+"\n"
+"Periods before calculated means periods starting from current till period "
+"before calculated.\n"
+"\n"
+"Remarks:\n"
+"- Remember to make planning for all periods before calculated because "
+"omitting these quantities and procurements can cause wrong suggestions for "
+"procurements few periods ahead.\n"
+"- If you made planning few periods ahead and you find that real Confirmed "
+"Out is bigger than Planned Out in some periods before you can repeat "
+"Planning and make another procurement. You should do it in the same planning "
+"line. If you create another planning line the suggestions can be wrong.\n"
+"- When you wish to work with different periods for some part of products "
+"define two kinds of periods (fe. Weekly and Monthly) and use them for "
+"different products. Example: If you use always Weekly periods for Products "
+"A, and Monthly periods for Products B your all calculations will work "
+"correctly. You can also use different kind of periods for the same products "
+"from different warehouse or companies. But you cannot use overlapping "
+"periods for the same product, warehouse and company because results can be "
+"unpredictable. The same apply to Forecasts lines.\n"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Incoming Left: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Internal Supply"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"You must specify a Source Warehouse different than calculated (destination) "
+"Warehouse !"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_sale_forecast_createlines_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast_createlines
+msgid "Create Sales Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast.createlines:0
+msgid "Creates forecast lines for selected warehouse and period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Requisition ("
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,outgoing_left:0
+msgid ""
+"Quantity expected to go out in selected period. As a difference between "
+"Planned Out and Confirmed Out. For current period Already Out is also "
+"calculated"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_id:0
+msgid "Period4"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Already In: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_id:0
+msgid "Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_id:0
+msgid "Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_id:0
+msgid "Period1"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Initial Stock: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Minimum stock: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,active_uom:0
+#: field:stock.sale.forecast,active_uom:0
+msgid "Active UoM"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_planning_createlines_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_planning_createlines
+#: view:stock.planning.createlines:0
+msgid "Create Stock Planning Lines"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "General Info"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_view_stock_sale_forecast_form
+msgid "Sales Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Planning and Situation for Calculated Period"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_warehouse:0
+msgid "This Warehouse Period1"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Confirmed In: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Sales history"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,supply_warehouse_id:0
+msgid "Source Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_qty:0
+msgid "Forecasted quantity."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Stock"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Stock Simulation: "
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Confirmed Out: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_supply_location:0
+msgid "Stock Supply Location"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.period.createlines,date_stop:0
+msgid "Ending date for planning period."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,forecasted_products:0
+msgid ""
+"Check this box to create planning for all products having any forecast for "
+"selected Warehouse and Period. Product Category field will be ignored."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,already_in:0
+msgid "Already In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,product_uom_categ:0
+#: field:stock.planning,product_uos_categ:0
+#: field:stock.sale.forecast,product_uom_categ:0
+msgid "Product UoM Category"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,incoming:0
+msgid "Confirmed In"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,line_time:0
+msgid "Past/Future"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_uos_categ:0
+msgid "Product UoS Category"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_qty:0
+msgid "Product Quantity"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast.createlines,copy_forecast:0
+msgid "Copy Last Forecast"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,product_id:0
+msgid "Shows which product this forecast concerns."
+msgstr ""
+
+#. module: stock_planning
+#: selection:stock.planning,state:0
+msgid "Done"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period.createlines,period_ids:0
+msgid "Periods"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " according to state:"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period.createlines:0
+msgid "Cancel"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: selection:stock.period,state:0
+#: view:stock.planning.createlines:0
+#: view:stock.sale.forecast.createlines:0
+msgid "Close"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+#: selection:stock.sale.forecast,state:0
+msgid "Validated"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+#: selection:stock.period,state:0
+msgid "Open"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast.createlines,copy_forecast:0
+msgid "Copy quantities from last Stock and Sale Forecast."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period1_per_dept:0
+msgid "This Dept Period1"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_dept:0
+msgid "This Dept Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_dept:0
+msgid "This Dept Period2"
+msgstr ""
+
+#. module: stock_planning
+#: constraint:ir.model:0
+msgid ""
+"The Object name must start with x_ and not contain any special character !"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_dept:0
+msgid "This Dept Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period2_per_warehouse:0
+msgid "This Warehouse Period2"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period3_per_warehouse:0
+msgid "This Warehouse Period3"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,outgoing:0
+msgid "Confirmed Out"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,create_uid:0
+msgid "Responsible"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Default UOM"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period4_per_warehouse:0
+msgid "This Warehouse Period4"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_per_warehouse:0
+msgid "This Warehouse Period5"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.period:0
+msgid "Current"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.model,name:stock_planning.model_stock_planning
+msgid "stock.planning"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,warehouse_id:0
+msgid ""
+"Shows which warehouse this forecast concerns. If during stock planning you "
+"will need sales forecast for all warehouses choose any warehouse now."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,warehouse_id:0
+msgid "Warehouse which planning will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyze_company:0
+msgid "Per Company"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,to_procure:0
+msgid ""
+"Enter quantity which (by your plan) should come in. Change this value and "
+"observe Stock simulation. This value should be equal or greater than "
+"Confirmed In."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning.createlines,period_id:0
+msgid "Period which planning will concern."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,already_out:0
+msgid "Already Out"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,product_id:0
+msgid "Product which this planning is created for."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per Warehouse :"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+"For period: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,history:0
+msgid "Procurement History"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.period.createlines,date_start:0
+msgid "Starting date for planning period."
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid " Planned In: "
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Per Department :"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming:0
+msgid "Quantity of all confirmed incoming moves in calculated Period."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.period,date_stop:0
+#: field:stock.period.createlines,date_stop:0
+msgid "End Date"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,stock_supply_location:0
+msgid ""
+"Check to supply from Stock location of Supply Warehouse. If not checked "
+"supply will be made from Output location of Supply Warehouse. Used in "
+"'Supply from Another Warhouse' with Supply Warehouse."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "No Requisition"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,minimum_op:0
+msgid "Minimum quantity set in Minimum Stock Rules for this Warhouse"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,period_id:0
+msgid "Shows which period this forecast concerns."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,product_uom:0
+msgid "UoM"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+msgid "Calculated Period Simulation"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.planning:0
+#: field:stock.planning,product_id:0
+#: view:stock.sale.forecast:0
+#: field:stock.sale.forecast,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid ""
+"\n"
+" Expected Out: "
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast
+#: model:ir.ui.menu,name:stock_planning.menu_stock_sale_forecast_all
+#: view:stock.sale.forecast:0
+msgid "Sales Forecasts"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_uom:0
+msgid "Product UoM"
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "MPS("
+msgstr ""
+
+#. module: stock_planning
+#: code:addons/stock_planning/stock_planning.py:0
+#, python-format
+msgid "Pick created from MPS by user: "
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,procure_to_stock:0
+msgid "Procure To Stock Location"
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Approve"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,period_id:0
+msgid ""
+"Period for this planning. Requisition will be created for beginning of the "
+"period."
+msgstr ""
+
+#. module: stock_planning
+#: view:stock.sale.forecast:0
+msgid "Calculate Sales History"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,product_amt:0
+msgid "Product Amount"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,confirmed_forecasts_only:0
+msgid ""
+"Check to take validated forecasts only. If not checked system takes "
+"validated and draft forecasts."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_period5_id:0
+msgid "Period5"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_period_createlines_form
+msgid "Stock and Sales Planning Periods"
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.sale.forecast,analyzed_warehouse_id:0
+msgid "This Warehouse"
+msgstr ""
+
+#. module: stock_planning
+#: model:ir.actions.act_window,name:stock_planning.action_stock_period_form
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period
+#: model:ir.ui.menu,name:stock_planning.menu_stock_period_main
+#: view:stock.period:0
+#: view:stock.period.createlines:0
+msgid "Stock and Sales Periods"
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.sale.forecast,user_id:0
+msgid "Shows who created this forecast, or who validated."
+msgstr ""
+
+#. module: stock_planning
+#: help:stock.planning,incoming_left:0
+msgid ""
+"Quantity left to Planned incoming quantity. This is calculated difference "
+"between Planned In and Confirmed In. For current period Already In is also "
+"calculated. This value is used to create procurement for lacking quantity."
+msgstr ""
+
+#. module: stock_planning
+#: field:stock.planning,stock_start:0
+msgid "Initial Stock"
+msgstr ""
diff --git a/addons/subscription/__openerp__.py b/addons/subscription/__openerp__.py
index 44d2edb503c..cb5bdbc392b 100644
--- a/addons/subscription/__openerp__.py
+++ b/addons/subscription/__openerp__.py
@@ -29,7 +29,7 @@
'depends': ['base'],
'init_xml': [],
'update_xml': ['security/subcription_security.xml', 'security/ir.model.access.csv', 'subscription_view.xml'],
- 'demo_xml': [],
+ 'demo_xml': ['subscription_demo.xml',],
'installable': True,
'active': False,
'certificate': '0029454782573',
diff --git a/addons/subscription/i18n/pl.po b/addons/subscription/i18n/pl.po
index c5587879631..cc9b3e50303 100644
--- a/addons/subscription/i18n/pl.po
+++ b/addons/subscription/i18n/pl.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 18:52+0000\n"
-"Last-Translator: Grzegorz Grzelak (Cirrus.pl) \n"
+"PO-Revision-Date: 2010-08-26 06:35+0000\n"
+"Last-Translator: OpenERP Administrators \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-08-27 03:38+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: subscription
diff --git a/addons/subscription/i18n/tr.po b/addons/subscription/i18n/tr.po
index b2a889a2282..66348b94846 100644
--- a/addons/subscription/i18n/tr.po
+++ b/addons/subscription/i18n/tr.po
@@ -7,13 +7,13 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2009-08-28 16:01+0000\n"
-"PO-Revision-Date: 2010-08-25 07:29+0000\n"
+"PO-Revision-Date: 2010-09-08 09:15+0000\n"
"Last-Translator: Fabien (Open ERP) \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-08-26 03:54+0000\n"
+"X-Launchpad-Export-Date: 2010-09-09 04:45+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
#. module: subscription
diff --git a/addons/subscription/subscription_demo.xml b/addons/subscription/subscription_demo.xml
new file mode 100644
index 00000000000..bb8d61ef4b0
--- /dev/null
+++ b/addons/subscription/subscription_demo.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Partner
+
+
+
+ false
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index 3ea4396c7d9..0c416c86a20 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -59,10 +59,13 @@
-
-
+
+
+
+
+
@@ -74,12 +77,23 @@
+
+
+
+
+
-
+
+
-
+
+
+
@@ -92,6 +106,7 @@
subscription.subscriptionform
+ {'search_default_User':1}
@@ -155,7 +170,7 @@
-
+