[MERGE] from trunk
bzr revid: chm@openerp.com-20130828163937-japdo58t20hhqfoz
This commit is contained in:
commit
ed35895126
|
@ -1 +1,2 @@
|
||||||
.*
|
.*
|
||||||
|
**/node_modules
|
||||||
|
|
|
@ -561,10 +561,14 @@ class account_invoice(osv.osv):
|
||||||
|
|
||||||
def onchange_payment_term_date_invoice(self, cr, uid, ids, payment_term_id, date_invoice):
|
def onchange_payment_term_date_invoice(self, cr, uid, ids, payment_term_id, date_invoice):
|
||||||
res = {}
|
res = {}
|
||||||
|
if isinstance(ids, (int, long)):
|
||||||
|
ids = [ids]
|
||||||
if not date_invoice:
|
if not date_invoice:
|
||||||
date_invoice = time.strftime('%Y-%m-%d')
|
date_invoice = time.strftime('%Y-%m-%d')
|
||||||
if not payment_term_id:
|
if not payment_term_id:
|
||||||
return {'value':{'date_due': date_invoice}} #To make sure the invoice has a due date when no payment term
|
inv = self.browse(cr, uid, ids[0])
|
||||||
|
#To make sure the invoice due date should contain due date which is entered by user when there is no payment term defined
|
||||||
|
return {'value':{'date_due': inv.date_due and inv.date_due or date_invoice}}
|
||||||
pterm_list = self.pool.get('account.payment.term').compute(cr, uid, payment_term_id, value=1, date_ref=date_invoice)
|
pterm_list = self.pool.get('account.payment.term').compute(cr, uid, payment_term_id, value=1, date_ref=date_invoice)
|
||||||
if pterm_list:
|
if pterm_list:
|
||||||
pterm_list = [line[0] for line in pterm_list]
|
pterm_list = [line[0] for line in pterm_list]
|
||||||
|
|
|
@ -800,7 +800,7 @@ class account_move_line(osv.osv):
|
||||||
r_id = move_rec_obj.create(cr, uid, {
|
r_id = move_rec_obj.create(cr, uid, {
|
||||||
'type': type,
|
'type': type,
|
||||||
'line_partial_ids': map(lambda x: (4,x,False), merges+unmerge)
|
'line_partial_ids': map(lambda x: (4,x,False), merges+unmerge)
|
||||||
})
|
}, context=context)
|
||||||
move_rec_obj.reconcile_partial_check(cr, uid, [r_id] + merges_rec, context=context)
|
move_rec_obj.reconcile_partial_check(cr, uid, [r_id] + merges_rec, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -266,7 +266,7 @@ class account_invoice(osv.osv, EDIMixin):
|
||||||
params = {
|
params = {
|
||||||
"cmd": "_xclick",
|
"cmd": "_xclick",
|
||||||
"business": inv.company_id.paypal_account,
|
"business": inv.company_id.paypal_account,
|
||||||
"item_name": inv.company_id.name + " Invoice " + inv.number,
|
"item_name": "%s Invoice %s" % (inv.company_id.name, inv.number or ''),
|
||||||
"invoice": inv.number,
|
"invoice": inv.number,
|
||||||
"amount": inv.residual,
|
"amount": inv.residual,
|
||||||
"currency_code": inv.currency_id.name,
|
"currency_code": inv.currency_id.name,
|
||||||
|
|
|
@ -25,7 +25,7 @@ from dateutil.relativedelta import relativedelta
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from os.path import join as opj
|
from os.path import join as opj
|
||||||
|
|
||||||
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT as DF
|
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as DF
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
|
|
|
@ -67,9 +67,10 @@
|
||||||
Then I cancel Bank Statements and verifies that it raises a warning
|
Then I cancel Bank Statements and verifies that it raises a warning
|
||||||
-
|
-
|
||||||
!python {model: account.bank.statement}: |
|
!python {model: account.bank.statement}: |
|
||||||
|
from openerp.osv import osv
|
||||||
try:
|
try:
|
||||||
self.button_cancel(cr, uid, [ref("account_bank_statement_0")])
|
self.button_cancel(cr, uid, [ref("account_bank_statement_0")])
|
||||||
assert False, "An exception should have been raised, the journal should not let us cancel moves!"
|
assert False, "An exception should have been raised, the journal should not let us cancel moves!"
|
||||||
except Exception:
|
except osv.except_osv:
|
||||||
# exception was raised as expected, as the journal does not allow cancelling moves
|
# exception was raised as expected, as the journal does not allow cancelling moves
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -73,14 +73,16 @@
|
||||||
I cancel the account move which is in posted state and verifies that it gives warning message
|
I cancel the account move which is in posted state and verifies that it gives warning message
|
||||||
-
|
-
|
||||||
!python {model: account.move}: |
|
!python {model: account.move}: |
|
||||||
|
from openerp.osv import osv
|
||||||
inv_obj = self.pool.get('account.invoice')
|
inv_obj = self.pool.get('account.invoice')
|
||||||
inv = inv_obj.browse(cr, uid, ref('account_invoice_supplier0'))
|
inv = inv_obj.browse(cr, uid, ref('account_invoice_supplier0'))
|
||||||
try:
|
try:
|
||||||
mov_cancel = self.button_cancel(cr, uid, [inv.move_id.id], {'lang': u'en_US', 'tz': False,
|
mov_cancel = self.button_cancel(cr, uid, [inv.move_id.id], {'lang': u'en_US', 'tz': False,
|
||||||
'active_model': 'ir.ui.menu', 'journal_type': 'purchase', 'active_ids': [ref('menu_action_invoice_tree2')],
|
'active_model': 'ir.ui.menu', 'journal_type': 'purchase', 'active_ids': [ref('menu_action_invoice_tree2')],
|
||||||
'type': 'in_invoice', 'active_id': ref('menu_action_invoice_tree2')})
|
'type': 'in_invoice', 'active_id': ref('menu_action_invoice_tree2')})
|
||||||
except Exception, e:
|
assert False, "This should never happen!"
|
||||||
assert e, 'Warning message has not been raised'
|
except osv.except_osv:
|
||||||
|
pass
|
||||||
-
|
-
|
||||||
I verify that 'Period Sum' and 'Year sum' of the tax code are the expected values
|
I verify that 'Period Sum' and 'Year sum' of the tax code are the expected values
|
||||||
-
|
-
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
<separator string="Aged Partner Balance"/>
|
<separator string="Aged Partner Balance"/>
|
||||||
<label string="Aged Partner Balance is a more detailed report of your receivables by intervals. When opening that report, OpenERP asks for the name of the company, the fiscal period and the size of the interval to be analyzed (in days). OpenERP then calculates a table of credit balance by period. So if you request an interval of 30 days OpenERP generates an analysis of creditors for the past month, past two months, and so on. "/>
|
<label string="Aged Partner Balance is a more detailed report of your receivables by intervals. When opening that report, OpenERP asks for the name of the company, the fiscal period and the size of the interval to be analyzed (in days). OpenERP then calculates a table of credit balance by period. So if you request an interval of 30 days OpenERP generates an analysis of creditors for the past month, past two months, and so on. "/>
|
||||||
<group col="4">
|
<group col="4">
|
||||||
<field name="chart_account_id" widget='selection'/>
|
<field name="chart_account_id" widget='selection' on_change="onchange_chart_id(chart_account_id, context)"/>
|
||||||
|
<field name="fiscalyear_id" invisible="1"/>
|
||||||
<newline/>
|
<newline/>
|
||||||
<field name="date_from"/>
|
<field name="date_from"/>
|
||||||
<field name="period_length"/>
|
<field name="period_length"/>
|
||||||
|
|
|
@ -34,7 +34,10 @@ class account_common_report(osv.osv_memory):
|
||||||
res = {}
|
res = {}
|
||||||
if chart_account_id:
|
if chart_account_id:
|
||||||
company_id = self.pool.get('account.account').browse(cr, uid, chart_account_id, context=context).company_id.id
|
company_id = self.pool.get('account.account').browse(cr, uid, chart_account_id, context=context).company_id.id
|
||||||
res['value'] = {'company_id': company_id}
|
now = time.strftime('%Y-%m-%d')
|
||||||
|
domain = [('company_id', '=', company_id), ('date_start', '<', now), ('date_stop', '>', now)]
|
||||||
|
fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, domain, limit=1)
|
||||||
|
res['value'] = {'company_id': company_id, 'fiscalyear_id': fiscalyears and fiscalyears[0] or False}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -124,10 +127,11 @@ class account_common_report(osv.osv_memory):
|
||||||
now = time.strftime('%Y-%m-%d')
|
now = time.strftime('%Y-%m-%d')
|
||||||
company_id = False
|
company_id = False
|
||||||
ids = context.get('active_ids', [])
|
ids = context.get('active_ids', [])
|
||||||
domain = [('date_start', '<', now), ('date_stop', '>', now)]
|
|
||||||
if ids and context.get('active_model') == 'account.account':
|
if ids and context.get('active_model') == 'account.account':
|
||||||
company_id = self.pool.get('account.account').browse(cr, uid, ids[0], context=context).company_id.id
|
company_id = self.pool.get('account.account').browse(cr, uid, ids[0], context=context).company_id.id
|
||||||
domain += [('company_id', '=', company_id)]
|
else: # use current company id
|
||||||
|
company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id
|
||||||
|
domain = [('company_id', '=', company_id), ('date_start', '<', now), ('date_stop', '>', now)]
|
||||||
fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, domain, limit=1)
|
fiscalyears = self.pool.get('account.fiscalyear').search(cr, uid, domain, limit=1)
|
||||||
return fiscalyears and fiscalyears[0] or False
|
return fiscalyears and fiscalyears[0] or False
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,7 @@ class account_analytic_account(osv.osv):
|
||||||
context = {}
|
context = {}
|
||||||
sale_ids = self.pool.get('sale.order').search(cr,uid,[('project_id','=',context.get('search_default_project_id',False)),('partner_id','in',context.get('search_default_partner_id',False))])
|
sale_ids = self.pool.get('sale.order').search(cr,uid,[('project_id','=',context.get('search_default_project_id',False)),('partner_id','in',context.get('search_default_partner_id',False))])
|
||||||
names = [record.name for record in self.browse(cr, uid, ids, context=context)]
|
names = [record.name for record in self.browse(cr, uid, ids, context=context)]
|
||||||
name = _('Sales Order Lines of %s') % ','.join(names)
|
name = _('Sales Order Lines to Invoice of %s') % ','.join(names)
|
||||||
return {
|
return {
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
'name': name,
|
'name': name,
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
width: 250px;
|
width: 250px;
|
||||||
padding-left: 7px;
|
padding-left: 7px;
|
||||||
}
|
}
|
||||||
|
.openerp .oe_form table.oe_form_analytic_account th {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
.openerp .oe_form table.oe_form_analytic_account .oe_timesheet_grey {
|
.openerp .oe_form table.oe_form_analytic_account .oe_timesheet_grey {
|
||||||
background-color: #eeeeee;
|
background-color: #eeeeee;
|
||||||
color: #404040;
|
color: #404040;
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
td.oe_timesheet_action
|
td.oe_timesheet_action
|
||||||
width: 250px
|
width: 250px
|
||||||
padding-left: 7px
|
padding-left: 7px
|
||||||
|
th
|
||||||
|
text-align: right
|
||||||
.oe_timesheet_grey
|
.oe_timesheet_grey
|
||||||
background-color: #eeeeee
|
background-color: #eeeeee
|
||||||
color: #404040
|
color: #404040
|
||||||
|
|
|
@ -0,0 +1,741 @@
|
||||||
|
# Hungarian translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-08-22 11:04+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Hungarian <hu@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-08-23 05:01+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16737)\n"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Assets in draft and open states"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,method_end:0
|
||||||
|
#: field:account.asset.history,method_end:0
|
||||||
|
#: field:asset.modify,method_end:0
|
||||||
|
msgid "Ending date"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,value_residual:0
|
||||||
|
msgid "Residual Value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,account_expense_depreciation_id:0
|
||||||
|
msgid "Depr. Expense Account"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Group By..."
|
||||||
|
msgstr "Csoportosítás"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.asset.report,gross_value:0
|
||||||
|
msgid "Gross Amount"
|
||||||
|
msgstr "Bruttó összeg"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: field:account.asset.depreciation.line,asset_id:0
|
||||||
|
#: field:account.asset.history,asset_id:0
|
||||||
|
#: field:account.move.line,asset_id:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,asset_id:0
|
||||||
|
#: model:ir.model,name:account_asset.model_account_asset_asset
|
||||||
|
msgid "Asset"
|
||||||
|
msgstr "Eszköz"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,prorata:0
|
||||||
|
#: help:account.asset.category,prorata:0
|
||||||
|
msgid ""
|
||||||
|
"Indicates that the first depreciation entry for this asset have to be done "
|
||||||
|
"from the purchase date instead of the first January"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: selection:account.asset.asset,method:0
|
||||||
|
#: selection:account.asset.category,method:0
|
||||||
|
msgid "Linear"
|
||||||
|
msgstr "Lineáris"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,company_id:0
|
||||||
|
#: field:account.asset.category,company_id:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,company_id:0
|
||||||
|
msgid "Company"
|
||||||
|
msgstr "Vállalat"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.modify:0
|
||||||
|
msgid "Modify"
|
||||||
|
msgstr "Módosítás"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: selection:account.asset.asset,state:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: selection:asset.asset.report,state:0
|
||||||
|
msgid "Running"
|
||||||
|
msgstr "Folyamatban lévő"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Set to Draft"
|
||||||
|
msgstr "Beállítás tervezetnek"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_asset_asset_report
|
||||||
|
#: model:ir.model,name:account_asset.model_asset_asset_report
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_action_asset_asset_report
|
||||||
|
msgid "Assets Analysis"
|
||||||
|
msgstr "Eszközök elemzése"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.modify,name:0
|
||||||
|
msgid "Reason"
|
||||||
|
msgstr "Indoklás"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method_progress_factor:0
|
||||||
|
#: field:account.asset.category,method_progress_factor:0
|
||||||
|
msgid "Degressive Factor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_list_normal
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_list_normal
|
||||||
|
msgid "Asset Categories"
|
||||||
|
msgstr "Eszköz kategóriák"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: field:account.asset.asset,account_move_line_ids:0
|
||||||
|
#: field:account.move.line,entry_ids:0
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.act_entries_open
|
||||||
|
msgid "Entries"
|
||||||
|
msgstr "Tételek"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: field:account.asset.asset,depreciation_line_ids:0
|
||||||
|
msgid "Depreciation Lines"
|
||||||
|
msgstr "Értékcsökkénés sorai"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,salvage_value:0
|
||||||
|
msgid "It is the amount you plan to have that you cannot depreciate."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,method_period:0
|
||||||
|
msgid "The amount of time between two depreciations, in months"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,depreciation_date:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,depreciation_date:0
|
||||||
|
msgid "Depreciation Date"
|
||||||
|
msgstr "Értékcsökkenés dátuma"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: constraint:account.asset.asset:0
|
||||||
|
msgid "Error ! You cannot create recursive assets."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.asset.report,posted_value:0
|
||||||
|
msgid "Posted Amount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_form
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_form
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_finance_assets
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_finance_config_assets
|
||||||
|
msgid "Assets"
|
||||||
|
msgstr "Eszközök"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,account_depreciation_id:0
|
||||||
|
msgid "Depreciation Account"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
#: view:account.asset.history:0
|
||||||
|
#: view:asset.modify:0
|
||||||
|
#: field:asset.modify,note:0
|
||||||
|
msgid "Notes"
|
||||||
|
msgstr "Megjegyzések"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,move_id:0
|
||||||
|
msgid "Depreciation Entry"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,nbr:0
|
||||||
|
msgid "# of Depreciation Lines"
|
||||||
|
msgstr "# értékcsökkenési sorok száma"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method_period:0
|
||||||
|
msgid "Number of Months in a Period"
|
||||||
|
msgstr "Hónapok száma az időszakban"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Assets in draft state"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method_end:0
|
||||||
|
#: selection:account.asset.asset,method_time:0
|
||||||
|
#: selection:account.asset.category,method_time:0
|
||||||
|
#: selection:account.asset.history,method_time:0
|
||||||
|
msgid "Ending Date"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,code:0
|
||||||
|
msgid "Reference"
|
||||||
|
msgstr "Hivatkozás"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Account Asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_asset_depreciation_confirmation_wizard
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_asset_depreciation_confirmation_wizard
|
||||||
|
msgid "Compute Assets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,method_period:0
|
||||||
|
#: field:account.asset.history,method_period:0
|
||||||
|
#: field:asset.modify,method_period:0
|
||||||
|
msgid "Period Length"
|
||||||
|
msgstr "Időszak hossza"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: selection:account.asset.asset,state:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: selection:asset.asset.report,state:0
|
||||||
|
msgid "Draft"
|
||||||
|
msgstr "Tervezet"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Date of asset purchase"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Change Duration"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,method_number:0
|
||||||
|
#: help:account.asset.category,method_number:0
|
||||||
|
#: help:account.asset.history,method_number:0
|
||||||
|
msgid "The number of depreciations needed to depreciate your asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
msgid "Analytic Information"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,account_analytic_id:0
|
||||||
|
msgid "Analytic account"
|
||||||
|
msgstr "Gyűjtőkód"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method:0
|
||||||
|
#: field:account.asset.category,method:0
|
||||||
|
msgid "Computation Method"
|
||||||
|
msgstr "Számítási módszer"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: constraint:account.asset.asset:0
|
||||||
|
msgid ""
|
||||||
|
"Prorata temporis can be applied only for time method \"number of "
|
||||||
|
"depreciations\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,remaining_value:0
|
||||||
|
msgid "Next Period Depreciation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.history,method_period:0
|
||||||
|
msgid "Time in month between two depreciations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.modify:0
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_asset_modify
|
||||||
|
#: model:ir.model,name:account_asset.model_asset_modify
|
||||||
|
msgid "Modify Asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,salvage_value:0
|
||||||
|
msgid "Salvage Value"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,category_id:0
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
#: field:account.invoice.line,asset_category_id:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Asset Category"
|
||||||
|
msgstr "Eszköz kategória"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Assets in closed state"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,parent_id:0
|
||||||
|
msgid "Parent Asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.history:0
|
||||||
|
#: model:ir.model,name:account_asset.model_account_asset_history
|
||||||
|
msgid "Asset history"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
msgid "Search Asset Category"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.modify:0
|
||||||
|
msgid "months"
|
||||||
|
msgstr "hónapok"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.model,name:account_asset.model_account_invoice_line
|
||||||
|
msgid "Invoice Line"
|
||||||
|
msgstr "Számlasor"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Depreciation Board"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.asset.report,unposted_value:0
|
||||||
|
msgid "Unposted Amount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method_time:0
|
||||||
|
#: field:account.asset.category,method_time:0
|
||||||
|
#: field:account.asset.history,method_time:0
|
||||||
|
msgid "Time Method"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
|
#: view:asset.modify:0
|
||||||
|
msgid "or"
|
||||||
|
msgstr "vagy"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,note:0
|
||||||
|
#: field:account.asset.category,note:0
|
||||||
|
#: field:account.asset.history,note:0
|
||||||
|
msgid "Note"
|
||||||
|
msgstr "Jegyzet"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.history,method_time:0
|
||||||
|
msgid ""
|
||||||
|
"The method to use to compute the dates and number of depreciation lines.\n"
|
||||||
|
"Number of Depreciations: Fix the number of depreciation lines and the time "
|
||||||
|
"between 2 depreciations.\n"
|
||||||
|
"Ending Date: Choose the time between 2 depreciations and the date the "
|
||||||
|
"depreciations won't go beyond."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,method_time:0
|
||||||
|
#: help:account.asset.category,method_time:0
|
||||||
|
msgid ""
|
||||||
|
"Choose the method to use to compute the dates and number of depreciation "
|
||||||
|
"lines.\n"
|
||||||
|
" * Number of Depreciations: Fix the number of depreciation lines and the "
|
||||||
|
"time between 2 depreciations.\n"
|
||||||
|
" * Ending Date: Choose the time between 2 depreciations and the date the "
|
||||||
|
"depreciations won't go beyond."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Assets in running state"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Closed"
|
||||||
|
msgstr "Lezárt"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,state:0
|
||||||
|
msgid ""
|
||||||
|
"When an asset is created, the status is 'Draft'.\n"
|
||||||
|
"If the asset is confirmed, the status goes in 'Running' and the depreciation "
|
||||||
|
"lines can be posted in the accounting.\n"
|
||||||
|
"You can manually close an asset when the depreciation is over. If the last "
|
||||||
|
"line of depreciation is posted, the asset automatically goes in that status."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,state:0
|
||||||
|
#: field:asset.asset.report,state:0
|
||||||
|
msgid "Status"
|
||||||
|
msgstr "Státusz"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,partner_id:0
|
||||||
|
#: field:asset.asset.report,partner_id:0
|
||||||
|
msgid "Partner"
|
||||||
|
msgstr "Partner"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Posted depreciation lines"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,child_ids:0
|
||||||
|
msgid "Children Assets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Date of depreciation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.history,user_id:0
|
||||||
|
msgid "User"
|
||||||
|
msgstr "Felhasználó"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,account_asset_id:0
|
||||||
|
msgid "Asset Account"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
msgid "Extended Filters..."
|
||||||
|
msgstr "Kiterjesztett szűrők…"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
|
msgid "Compute"
|
||||||
|
msgstr "Kiszámítás"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.history:0
|
||||||
|
msgid "Asset History"
|
||||||
|
msgstr "Eszköz történet"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.model,name:account_asset.model_asset_depreciation_confirmation_wizard
|
||||||
|
msgid "asset.depreciation.confirmation.wizard"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,active:0
|
||||||
|
msgid "Active"
|
||||||
|
msgstr "Aktív"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,parent_state:0
|
||||||
|
msgid "State of Asset"
|
||||||
|
msgstr "Eszköz státusza"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,name:0
|
||||||
|
msgid "Depreciation Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
#: field:account.asset.asset,history_ids:0
|
||||||
|
msgid "History"
|
||||||
|
msgstr "Előzmény"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
|
msgid "Compute Asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.depreciation.confirmation.wizard,period_id:0
|
||||||
|
msgid "Period"
|
||||||
|
msgstr "Időszak"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "General"
|
||||||
|
msgstr "Általános"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,prorata:0
|
||||||
|
#: field:account.asset.category,prorata:0
|
||||||
|
msgid "Prorata Temporis"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.model,name:account_asset.model_account_invoice
|
||||||
|
msgid "Invoice"
|
||||||
|
msgstr "Számla"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Set to Close"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.depreciation.confirmation.wizard:0
|
||||||
|
#: view:asset.modify:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Mégsem"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: selection:account.asset.asset,state:0
|
||||||
|
#: selection:asset.asset.report,state:0
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "Lezár"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.model,name:account_asset.model_account_move_line
|
||||||
|
msgid "Journal Items"
|
||||||
|
msgstr "Könyvelési tételsorok"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.modify:0
|
||||||
|
msgid "Asset Durations to Modify"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,purchase_date:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,purchase_date:0
|
||||||
|
msgid "Purchase Date"
|
||||||
|
msgstr "Vásárlás dátuma"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: selection:account.asset.asset,method:0
|
||||||
|
#: selection:account.asset.category,method:0
|
||||||
|
msgid "Degressive"
|
||||||
|
msgstr "Degresszív"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:asset.depreciation.confirmation.wizard,period_id:0
|
||||||
|
msgid ""
|
||||||
|
"Choose the period for which you want to automatically post the depreciation "
|
||||||
|
"lines of running assets"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Current"
|
||||||
|
msgstr "Jelenlegi"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
msgid "Depreciation Method"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,amount:0
|
||||||
|
msgid "Current Depreciation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,name:0
|
||||||
|
msgid "Asset Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,open_asset:0
|
||||||
|
msgid "Skip Draft State"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
msgid "Depreciation Dates"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,currency_id:0
|
||||||
|
msgid "Currency"
|
||||||
|
msgstr "Pénznem"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,journal_id:0
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Napló"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.history,name:0
|
||||||
|
msgid "History name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,depreciated_value:0
|
||||||
|
msgid "Amount Already Depreciated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.asset,method:0
|
||||||
|
#: help:account.asset.category,method:0
|
||||||
|
msgid ""
|
||||||
|
"Choose the method to use to compute the amount of depreciation lines.\n"
|
||||||
|
" * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n"
|
||||||
|
" * Degressive: Calculated on basis of: Residual Value * Degressive Factor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,move_check:0
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,move_check:0
|
||||||
|
msgid "Posted"
|
||||||
|
msgstr "Könyvelt"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.actions.act_window,help:account_asset.action_asset_asset_report
|
||||||
|
msgid ""
|
||||||
|
"<p>\n"
|
||||||
|
" From this report, you can have an overview on all depreciation. "
|
||||||
|
"The\n"
|
||||||
|
" tool search can also be used to personalise your Assets reports "
|
||||||
|
"and\n"
|
||||||
|
" so, match this analysis to your needs;\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,purchase_value:0
|
||||||
|
msgid "Gross Value"
|
||||||
|
msgstr "Bruttó érték"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.category,name:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Név"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.category,open_asset:0
|
||||||
|
msgid ""
|
||||||
|
"Check this if you want to automatically confirm the assets of this category "
|
||||||
|
"when created by invoices."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:asset.asset.report,name:0
|
||||||
|
msgid "Year"
|
||||||
|
msgstr "Év"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.model,name:account_asset.model_account_asset_depreciation_line
|
||||||
|
msgid "Asset depreciation line"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.category:0
|
||||||
|
#: field:asset.asset.report,asset_category_id:0
|
||||||
|
#: model:ir.model,name:account_asset.model_account_asset_category
|
||||||
|
msgid "Asset category"
|
||||||
|
msgstr "Eszköz kategória"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:asset.asset.report:0
|
||||||
|
#: field:asset.asset.report,depreciation_value:0
|
||||||
|
msgid "Amount of Depreciation Lines"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: code:addons/account_asset/wizard/wizard_asset_compute.py:50
|
||||||
|
#, python-format
|
||||||
|
msgid "Created Asset Moves"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.depreciation.line,sequence:0
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr "Sorszám"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: help:account.asset.category,method_period:0
|
||||||
|
msgid "State here the time between 2 depreciations, in months"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.history,date:0
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "Dátum"
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: field:account.asset.asset,method_number:0
|
||||||
|
#: selection:account.asset.asset,method_time:0
|
||||||
|
#: field:account.asset.category,method_number:0
|
||||||
|
#: selection:account.asset.category,method_time:0
|
||||||
|
#: field:account.asset.history,method_number:0
|
||||||
|
#: selection:account.asset.history,method_time:0
|
||||||
|
#: field:asset.modify,method_number:0
|
||||||
|
msgid "Number of Depreciations"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Create Move"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: view:account.asset.asset:0
|
||||||
|
msgid "Confirm Asset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_asset
|
||||||
|
#: model:ir.actions.act_window,name:account_asset.action_account_asset_asset_tree
|
||||||
|
#: model:ir.ui.menu,name:account_asset.menu_action_account_asset_asset_tree
|
||||||
|
msgid "Asset Hierarchy"
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,361 @@
|
||||||
|
# Russian translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-08-05 10:40+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Russian <ru@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-08-06 04:47+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16718)\n"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: help:account.bank.statement.line.global,name:0
|
||||||
|
msgid "Originator to Beneficiary Information"
|
||||||
|
msgstr "Информация от плательщика получателю"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
#: selection:account.bank.statement.line,state:0
|
||||||
|
msgid "Confirmed"
|
||||||
|
msgstr "Подтверждено"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement:0
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Glob. Id"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: selection:account.bank.statement.line.global,type:0
|
||||||
|
msgid "CODA"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,parent_id:0
|
||||||
|
msgid "Parent Code"
|
||||||
|
msgstr "Основной код"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Debit"
|
||||||
|
msgstr "Дебет"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:cancel.statement.line:0
|
||||||
|
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_cancel_statement_line
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_cancel_statement_line
|
||||||
|
msgid "Cancel selected statement lines"
|
||||||
|
msgstr "Отмена выбранных позиций выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,val_date:0
|
||||||
|
msgid "Value Date"
|
||||||
|
msgstr "Дата зачисления"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Group By..."
|
||||||
|
msgstr "Группировать по ..."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
#: selection:account.bank.statement.line,state:0
|
||||||
|
msgid "Draft"
|
||||||
|
msgstr "Черновик"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Statement"
|
||||||
|
msgstr "Выписка"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_confirm_statement_line
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_confirm_statement_line
|
||||||
|
msgid "Confirm selected statement lines"
|
||||||
|
msgstr "Подтверждение выбранных позиций выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: report:bank.statement.balance.report:0
|
||||||
|
#: model:ir.actions.report.xml,name:account_bank_statement_extensions.bank_statement_balance_report
|
||||||
|
msgid "Bank Statement Balances Report"
|
||||||
|
msgstr "Отчет об остатках банковской выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:cancel.statement.line:0
|
||||||
|
msgid "Cancel Lines"
|
||||||
|
msgstr "Отменить позиции"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line.global:0
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line_global
|
||||||
|
msgid "Batch Payment Info"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,state:0
|
||||||
|
msgid "Status"
|
||||||
|
msgstr "Статус"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Delete operation not allowed. Please go to the associated bank "
|
||||||
|
"statement in order to delete and/or modify bank statement line."
|
||||||
|
msgstr ""
|
||||||
|
"Операция удаления запрещена. Пожалуйста, обратитесь к соответствующей "
|
||||||
|
"банковской выписке для удаления/изменения позиции."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
msgid "or"
|
||||||
|
msgstr "или"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
msgid "Confirm Lines"
|
||||||
|
msgstr "Подтвердить позиции"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line.global:0
|
||||||
|
msgid "Transactions"
|
||||||
|
msgstr "Операции"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,type:0
|
||||||
|
msgid "Type"
|
||||||
|
msgstr "Тип"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
#: report:bank.statement.balance.report:0
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Журнал"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Confirmed Statement Lines."
|
||||||
|
msgstr "Подтвержденные позиции выписки."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Credit Transactions."
|
||||||
|
msgstr "Операции по кредиту"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: model:ir.actions.act_window,help:account_bank_statement_extensions.action_cancel_statement_line
|
||||||
|
msgid "cancel selected statement lines."
|
||||||
|
msgstr "отменить выбранные позиции выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,counterparty_number:0
|
||||||
|
msgid "Counterparty Number"
|
||||||
|
msgstr "Число контрагентов"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: report:bank.statement.balance.report:0
|
||||||
|
msgid "Closing Balance"
|
||||||
|
msgstr "Итоговый баланс"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: report:bank.statement.balance.report:0
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "Дата"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
#: field:account.bank.statement.line,globalisation_amount:0
|
||||||
|
msgid "Glob. Amount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Debit Transactions."
|
||||||
|
msgstr "Операции по дебету"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Extended Filters..."
|
||||||
|
msgstr "Расширенные фильтры..."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
msgid "Confirmed lines cannot be changed anymore."
|
||||||
|
msgstr "Нельзя изменить подтвержденные позиции."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:cancel.statement.line:0
|
||||||
|
msgid "Are you sure you want to cancel the selected Bank Statement lines ?"
|
||||||
|
msgstr ""
|
||||||
|
"Вы уверены, что хотите отменить выбранные позиции банковской выписки ?"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: report:bank.statement.balance.report:0
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Название"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,name:0
|
||||||
|
msgid "OBI"
|
||||||
|
msgstr "Назначение"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: selection:account.bank.statement.line.global,type:0
|
||||||
|
msgid "ISO 20022"
|
||||||
|
msgstr "ISO 20022"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Notes"
|
||||||
|
msgstr "Примечания"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: selection:account.bank.statement.line.global,type:0
|
||||||
|
msgid "Manual"
|
||||||
|
msgstr "Ручной"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Bank Transaction"
|
||||||
|
msgstr "Банковские операции"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Credit"
|
||||||
|
msgstr "Кредит"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,amount:0
|
||||||
|
msgid "Amount"
|
||||||
|
msgstr "Сумма"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Fin.Account"
|
||||||
|
msgstr "Фин. Счет"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,counterparty_currency:0
|
||||||
|
msgid "Counterparty Currency"
|
||||||
|
msgstr "Валюта контрагента"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,counterparty_bic:0
|
||||||
|
msgid "Counterparty BIC"
|
||||||
|
msgstr "БИК контрагента"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,child_ids:0
|
||||||
|
msgid "Child Codes"
|
||||||
|
msgstr "Субкоды"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Search Bank Transactions"
|
||||||
|
msgstr "Поиск банковских операций"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
|
||||||
|
msgstr ""
|
||||||
|
"Вы уверены, что хотите, подтвердить выбранные позиции банковской выписки ?"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: help:account.bank.statement.line,globalisation_id:0
|
||||||
|
msgid ""
|
||||||
|
"Code to identify transactions belonging to the same globalisation level "
|
||||||
|
"within a batch payment"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Draft Statement Lines."
|
||||||
|
msgstr "Черновики позиций выписки."
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Glob. Am."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
|
||||||
|
msgid "Bank Statement Line"
|
||||||
|
msgstr "Позиция банковской выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,code:0
|
||||||
|
msgid "Code"
|
||||||
|
msgstr "Код"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,counterparty_name:0
|
||||||
|
msgid "Counterparty Name"
|
||||||
|
msgstr "Название контрагента"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
|
||||||
|
msgid "Bank Accounts"
|
||||||
|
msgstr "Банковские счета"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
|
||||||
|
msgid "Bank Statement"
|
||||||
|
msgstr "Банковская выписка"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Statement Line"
|
||||||
|
msgstr "Позиция выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: sql_constraint:account.bank.statement.line.global:0
|
||||||
|
msgid "The code must be unique !"
|
||||||
|
msgstr "Код должен быть уникальным !"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line.global,bank_statement_line_ids:0
|
||||||
|
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line
|
||||||
|
#: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line
|
||||||
|
msgid "Bank Statement Lines"
|
||||||
|
msgstr "Позиции банковской выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
|
||||||
|
#, python-format
|
||||||
|
msgid "Warning!"
|
||||||
|
msgstr "Внимание!"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line.global:0
|
||||||
|
msgid "Child Batch Payments"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:confirm.statement.line:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Отмена"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Statement Lines"
|
||||||
|
msgstr "Позиции выписки"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: view:account.bank.statement.line:0
|
||||||
|
msgid "Total Amount"
|
||||||
|
msgstr "Итоговая сумма"
|
||||||
|
|
||||||
|
#. module: account_bank_statement_extensions
|
||||||
|
#: field:account.bank.statement.line,globalisation_id:0
|
||||||
|
msgid "Globalisation ID"
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Ukrainian translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-08-01 11:11+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Ukrainian <uk@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-08-02 05:38+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16718)\n"
|
||||||
|
|
||||||
|
#. module: account_cancel
|
||||||
|
#: view:account.invoice:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
|
@ -0,0 +1,246 @@
|
||||||
|
# Bosnian translation for openobject-addons
|
||||||
|
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
||||||
|
# This file is distributed under the same license as the openobject-addons package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: openobject-addons\n"
|
||||||
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
||||||
|
"PO-Revision-Date: 2013-08-08 22:05+0000\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: Bosnian <bs@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2013-08-09 05:06+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 16723)\n"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: selection:res.company,check_layout:0
|
||||||
|
msgid "Check on Top"
|
||||||
|
msgstr "Ček na vrhu"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Open Balance"
|
||||||
|
msgstr "Otvoreno saldo"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: view:account.check.write:0
|
||||||
|
#: view:account.voucher:0
|
||||||
|
msgid "Print Check"
|
||||||
|
msgstr "Štampaj ček"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: selection:res.company,check_layout:0
|
||||||
|
msgid "Check in middle"
|
||||||
|
msgstr "Ćek u sredini"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: help:res.company,check_layout:0
|
||||||
|
msgid ""
|
||||||
|
"Check on top is compatible with Quicken, QuickBooks and Microsoft Money. "
|
||||||
|
"Check in middle is compatible with Peachtree, ACCPAC and DacEasy. Check on "
|
||||||
|
"bottom is compatible with Peachtree, ACCPAC and DacEasy only"
|
||||||
|
msgstr ""
|
||||||
|
"Ček na vrhu je kompatibilan sa Quicken, QuickBooks i Microsoft Money. Ček u "
|
||||||
|
"sredini je kompatibilan sa Peachtree, ACCPAC i DacEasy. Ček na dnu je "
|
||||||
|
"kompatibilan sa Peachtree, ACCPAC i DacEasy samo"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: selection:res.company,check_layout:0
|
||||||
|
msgid "Check on bottom"
|
||||||
|
msgstr "Ćek na dnu"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.act_window,name:account_check_writing.action_account_check_write
|
||||||
|
msgid "Print Check in Batch"
|
||||||
|
msgstr "Štampaj čekove grupno"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: code:addons/account_check_writing/wizard/account_check_batch_printing.py:59
|
||||||
|
#, python-format
|
||||||
|
msgid "One of the printed check already got a number."
|
||||||
|
msgstr "Jedan od odštampanih čekova je već dobio broj."
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: help:account.journal,allow_check_writing:0
|
||||||
|
msgid "Check this if the journal is to be used for writing checks."
|
||||||
|
msgstr ""
|
||||||
|
"Označite ovo ako će se za pisanje čekova koristiti dnevnik knjiženja."
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:account.journal,allow_check_writing:0
|
||||||
|
msgid "Allow Check writing"
|
||||||
|
msgstr "Dozvoli pisanje čekova"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Description"
|
||||||
|
msgstr "Opis"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.model,name:account_check_writing.model_account_journal
|
||||||
|
msgid "Journal"
|
||||||
|
msgstr "Dnevnik knjiženja"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.act_window,name:account_check_writing.action_write_check
|
||||||
|
#: model:ir.ui.menu,name:account_check_writing.menu_action_write_check
|
||||||
|
msgid "Write Checks"
|
||||||
|
msgstr "Piši čekove"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Discount"
|
||||||
|
msgstr "Popust"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Original Amount"
|
||||||
|
msgstr "Originalni iznos"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:res.company,check_layout:0
|
||||||
|
msgid "Check Layout"
|
||||||
|
msgstr "Raspored čeka"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:account.voucher,allow_check:0
|
||||||
|
msgid "Allow Check Writing"
|
||||||
|
msgstr "Dozvoli pisanje čeka"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Payment"
|
||||||
|
msgstr "Plaćanje"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:account.journal,use_preprint_check:0
|
||||||
|
msgid "Use Preprinted Check"
|
||||||
|
msgstr "Koristi pred-odštampane čekove"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_bottom
|
||||||
|
msgid "Print Check (Bottom)"
|
||||||
|
msgstr "Štampaj ček (donji)"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.act_window,help:account_check_writing.action_write_check
|
||||||
|
msgid ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" Click to create a new check. \n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" The check payment form allows you to track the payment you "
|
||||||
|
"do\n"
|
||||||
|
" to your suppliers using checks. When you select a supplier, "
|
||||||
|
"the\n"
|
||||||
|
" payment method and an amount for the payment, OpenERP will\n"
|
||||||
|
" propose to reconcile your payment with the open supplier\n"
|
||||||
|
" invoices or bills.\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
msgstr ""
|
||||||
|
"<p class=\"oe_view_nocontent_create\">\n"
|
||||||
|
" Kliknite da kreirate nove čekove. \n"
|
||||||
|
" </p><p>\n"
|
||||||
|
" Forma plaćanje čekom omogućava vam da pratite plaćanja koja "
|
||||||
|
"izvršavate\n"
|
||||||
|
" vašim dobavljačima koristeći čekove. Kada odaberete "
|
||||||
|
"dobavljača,\n"
|
||||||
|
" metodu plaćanja i iznos za plaćanje, OpenERP će predložiti "
|
||||||
|
"da izravna\n"
|
||||||
|
" vašu uplatu sa otvorenom fakturom ili računom dobavljača.\n"
|
||||||
|
" </p>\n"
|
||||||
|
" "
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Due Date"
|
||||||
|
msgstr "Datum dospijeća"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_middle
|
||||||
|
msgid "Print Check (Middle)"
|
||||||
|
msgstr "Štampaj ček (srednji)"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.model,name:account_check_writing.model_res_company
|
||||||
|
msgid "Companies"
|
||||||
|
msgstr "Kompanije"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: code:addons/account_check_writing/wizard/account_check_batch_printing.py:59
|
||||||
|
#, python-format
|
||||||
|
msgid "Error!"
|
||||||
|
msgstr "Greška!"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: help:account.check.write,check_number:0
|
||||||
|
msgid "The number of the next check number to be printed."
|
||||||
|
msgstr "Broj sljedećeg čeka za štampanje."
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
msgid "Balance Due"
|
||||||
|
msgstr "Saldo valute"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_top
|
||||||
|
msgid "Print Check (Top)"
|
||||||
|
msgstr "Štampaj ček (na vrhu)"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: report:account.print.check.bottom:0
|
||||||
|
#: report:account.print.check.middle:0
|
||||||
|
#: report:account.print.check.top:0
|
||||||
|
msgid "Check Amount"
|
||||||
|
msgstr "Iznos čeka"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.model,name:account_check_writing.model_account_voucher
|
||||||
|
msgid "Accounting Voucher"
|
||||||
|
msgstr "Računovodstveni vaučer"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: view:account.check.write:0
|
||||||
|
msgid "or"
|
||||||
|
msgstr "ili"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:account.voucher,amount_in_word:0
|
||||||
|
msgid "Amount in Word"
|
||||||
|
msgstr "Pisani iznos"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: model:ir.model,name:account_check_writing.model_account_check_write
|
||||||
|
msgid "Prin Check in Batch"
|
||||||
|
msgstr "Štampaj čekove grupno"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: view:account.check.write:0
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Otkaži"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: field:account.check.write,check_number:0
|
||||||
|
msgid "Next Check Number"
|
||||||
|
msgstr "Sljedeći broj čeka"
|
||||||
|
|
||||||
|
#. module: account_check_writing
|
||||||
|
#: view:account.check.write:0
|
||||||
|
msgid "Check"
|
||||||
|
msgstr "Ček"
|
|
@ -31,10 +31,10 @@ from openerp.report import report_sxw
|
||||||
class res_currency(osv.osv):
|
class res_currency(osv.osv):
|
||||||
_inherit = "res.currency"
|
_inherit = "res.currency"
|
||||||
|
|
||||||
def _get_current_rate(self, cr, uid, ids, name, arg, context=None):
|
def _get_current_rate(self, cr, uid, ids, raise_on_no_rate=True, context=None):
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
res = super(res_currency, self)._get_current_rate(cr, uid, ids, name, arg, context=context)
|
res = super(res_currency, self)._get_current_rate(cr, uid, ids, raise_on_no_rate, context=context)
|
||||||
if context.get('voucher_special_currency') in ids and context.get('voucher_special_currency_rate'):
|
if context.get('voucher_special_currency') in ids and context.get('voucher_special_currency_rate'):
|
||||||
res[context.get('voucher_special_currency')] = context.get('voucher_special_currency_rate')
|
res[context.get('voucher_special_currency')] = context.get('voucher_special_currency_rate')
|
||||||
return res
|
return res
|
||||||
|
@ -884,6 +884,8 @@ class account_voucher(osv.osv):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, date, amount, ttype, company_id, context=None):
|
def onchange_journal(self, cr, uid, ids, journal_id, line_ids, tax_id, partner_id, date, amount, ttype, company_id, context=None):
|
||||||
|
if context is None:
|
||||||
|
context = {}
|
||||||
if not journal_id:
|
if not journal_id:
|
||||||
return False
|
return False
|
||||||
journal_pool = self.pool.get('account.journal')
|
journal_pool = self.pool.get('account.journal')
|
||||||
|
@ -932,6 +934,8 @@ class account_voucher(osv.osv):
|
||||||
move_pool = self.pool.get('account.move')
|
move_pool = self.pool.get('account.move')
|
||||||
|
|
||||||
for voucher in self.browse(cr, uid, ids, context=context):
|
for voucher in self.browse(cr, uid, ids, context=context):
|
||||||
|
# refresh to make sure you don't unlink an already removed move
|
||||||
|
voucher.refresh()
|
||||||
recs = []
|
recs = []
|
||||||
for line in voucher.move_ids:
|
for line in voucher.move_ids:
|
||||||
if line.reconcile_id:
|
if line.reconcile_id:
|
||||||
|
@ -1182,7 +1186,7 @@ class account_voucher(osv.osv):
|
||||||
for line in voucher.line_ids:
|
for line in voucher.line_ids:
|
||||||
#create one move line per voucher line where amount is not 0.0
|
#create one move line per voucher line where amount is not 0.0
|
||||||
# AND (second part of the clause) only if the original move line was not having debit = credit = 0 (which is a legal value)
|
# AND (second part of the clause) only if the original move line was not having debit = credit = 0 (which is a legal value)
|
||||||
if not line.amount and not (line.move_line_id and not float_compare(line.move_line_id.debit, line.move_line_id.credit, precision_rounding=prec) and not float_compare(line.move_line_id.debit, 0.0, precision_rounding=prec)):
|
if not line.amount and not (line.move_line_id and not float_compare(line.move_line_id.debit, line.move_line_id.credit, precision_digits=prec) and not float_compare(line.move_line_id.debit, 0.0, precision_digits=prec)):
|
||||||
continue
|
continue
|
||||||
# convert the amount set on the voucher line into the currency of the voucher's company
|
# convert the amount set on the voucher line into the currency of the voucher's company
|
||||||
# this calls res_curreny.compute() with the right context, so that it will take either the rate on the voucher if it is relevant or will use the default behaviour
|
# this calls res_curreny.compute() with the right context, so that it will take either the rate on the voucher if it is relevant or will use the default behaviour
|
||||||
|
@ -1282,10 +1286,8 @@ class account_voucher(osv.osv):
|
||||||
}
|
}
|
||||||
new_id = move_line_obj.create(cr, uid, move_line_foreign_currency, context=context)
|
new_id = move_line_obj.create(cr, uid, move_line_foreign_currency, context=context)
|
||||||
rec_ids.append(new_id)
|
rec_ids.append(new_id)
|
||||||
|
|
||||||
if line.move_line_id.id:
|
if line.move_line_id.id:
|
||||||
rec_lst_ids.append(rec_ids)
|
rec_lst_ids.append(rec_ids)
|
||||||
|
|
||||||
return (tot_line, rec_lst_ids)
|
return (tot_line, rec_lst_ids)
|
||||||
|
|
||||||
def writeoff_move_line_get(self, cr, uid, voucher_id, line_total, move_id, name, company_currency, current_currency, context=None):
|
def writeoff_move_line_get(self, cr, uid, voucher_id, line_total, move_id, name, company_currency, current_currency, context=None):
|
||||||
|
|
|
@ -332,14 +332,15 @@
|
||||||
<group>
|
<group>
|
||||||
<group>
|
<group>
|
||||||
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="payment_option" required="1"/>
|
<field name="payment_option" required="1" attrs="{'invisible':[('writeoff_amount','=',0)]}"/>
|
||||||
<field name="writeoff_acc_id"
|
<field name="writeoff_acc_id"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)], 'required':[('payment_option','=','with_writeoff')]}"
|
||||||
domain="[('type','=','other')]"/>
|
domain="[('type','=','other')]"/>
|
||||||
<field name="comment"
|
<field name="comment"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)]}"/>
|
||||||
<field name="analytic_id"
|
<field name="analytic_id"
|
||||||
groups="analytic.group_analytic_accounting"/>
|
groups="analytic.group_analytic_accounting"
|
||||||
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)]}"/>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
</group>
|
</group>
|
||||||
|
@ -494,14 +495,15 @@
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
<field name="writeoff_amount" widget="monetary" options="{'currency_field': 'currency_id'}"/>
|
||||||
<field name="payment_option" required="1"/>
|
<field name="payment_option" required="1" attrs="{'invisible':[('writeoff_amount','=',0)]}"/>
|
||||||
<field name="writeoff_acc_id"
|
<field name="writeoff_acc_id"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')], 'required':[('payment_option','=','with_writeoff')]}"
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)], 'required':[('payment_option','=','with_writeoff')]}"
|
||||||
domain="[('type','=','other')]"/>
|
domain="[('type','=','other')]"/>
|
||||||
<field name="comment"
|
<field name="comment"
|
||||||
attrs="{'invisible':[('payment_option','!=','with_writeoff')]}"/>
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)]}"/>
|
||||||
<field name="analytic_id"
|
<field name="analytic_id"
|
||||||
groups="analytic.group_analytic_accounting"/>
|
groups="analytic.group_analytic_accounting"
|
||||||
|
attrs="{'invisible':['|', ('payment_option','!=','with_writeoff'), ('writeoff_amount','=',0)]}"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<button
|
<button
|
||||||
name="open_hr_expense"
|
name="open_hr_expense"
|
||||||
class="oe_link"
|
class="oe_link"
|
||||||
string="expenses" type="object"/>
|
string="Expenses" type="object"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</xpath>
|
</xpath>
|
||||||
|
|
|
@ -42,6 +42,7 @@ class analytic_user_funct_grid(osv.osv):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
value = {}
|
value = {}
|
||||||
|
prod = False
|
||||||
if product_id:
|
if product_id:
|
||||||
prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
prod = self.pool.get('product.product').browse(cr, uid, product_id, context=context)
|
||||||
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
|
emp = emp_obj.browse(cr, uid, emp_id[0], context=context)
|
||||||
|
|
|
@ -120,7 +120,7 @@ class res_users(osv.osv):
|
||||||
def set_pw(self, cr, uid, id, name, value, args, context):
|
def set_pw(self, cr, uid, id, name, value, args, context):
|
||||||
if value:
|
if value:
|
||||||
encrypted = md5crypt(value, gen_salt())
|
encrypted = md5crypt(value, gen_salt())
|
||||||
cr.execute('update res_users set password_crypt=%s where id=%s', (encrypted, int(id)))
|
cr.execute("update res_users set password='', password_crypt=%s where id=%s", (encrypted, id))
|
||||||
del value
|
del value
|
||||||
|
|
||||||
def get_pw( self, cr, uid, ids, name, args, context ):
|
def get_pw( self, cr, uid, ids, name, args, context ):
|
||||||
|
@ -143,7 +143,7 @@ class res_users(osv.osv):
|
||||||
cr.execute('SELECT password, password_crypt FROM res_users WHERE id=%s AND active', (uid,))
|
cr.execute('SELECT password, password_crypt FROM res_users WHERE id=%s AND active', (uid,))
|
||||||
if cr.rowcount:
|
if cr.rowcount:
|
||||||
stored_password, stored_password_crypt = cr.fetchone()
|
stored_password, stored_password_crypt = cr.fetchone()
|
||||||
if password and not stored_password_crypt:
|
if stored_password and not stored_password_crypt:
|
||||||
salt = gen_salt()
|
salt = gen_salt()
|
||||||
stored_password_crypt = md5crypt(stored_password, salt)
|
stored_password_crypt = md5crypt(stored_password, salt)
|
||||||
cr.execute("UPDATE res_users SET password='', password_crypt=%s WHERE id=%s", (stored_password_crypt, uid))
|
cr.execute("UPDATE res_users SET password='', password_crypt=%s WHERE id=%s", (stored_password_crypt, uid))
|
||||||
|
@ -151,6 +151,7 @@ class res_users(osv.osv):
|
||||||
return super(res_users, self).check_credentials(cr, uid, password)
|
return super(res_users, self).check_credentials(cr, uid, password)
|
||||||
except openerp.exceptions.AccessDenied:
|
except openerp.exceptions.AccessDenied:
|
||||||
# check md5crypt
|
# check md5crypt
|
||||||
|
if stored_password_crypt:
|
||||||
if stored_password_crypt[:len(magic_md5)] == magic_md5:
|
if stored_password_crypt[:len(magic_md5)] == magic_md5:
|
||||||
salt = stored_password_crypt[len(magic_md5):11]
|
salt = stored_password_crypt[len(magic_md5):11]
|
||||||
if stored_password_crypt == md5crypt(password, salt):
|
if stored_password_crypt == md5crypt(password, salt):
|
||||||
|
|
|
@ -92,11 +92,6 @@ allows pre-setting the default groups and menus of the first-time users.
|
||||||
user with the same login (and a blank password), then rename this new
|
user with the same login (and a blank password), then rename this new
|
||||||
user to a username that does not exist in LDAP, and setup its groups
|
user to a username that does not exist in LDAP, and setup its groups
|
||||||
the way you want.
|
the way you want.
|
||||||
|
|
||||||
Interaction with base_crypt:
|
|
||||||
----------------------------
|
|
||||||
The base_crypt module is not compatible with this module, and will disable LDAP
|
|
||||||
authentication if installed at the same time.
|
|
||||||
""",
|
""",
|
||||||
'website' : 'http://www.openerp.com',
|
'website' : 'http://www.openerp.com',
|
||||||
'category' : 'Authentication',
|
'category' : 'Authentication',
|
||||||
|
|
|
@ -26,6 +26,7 @@ import openerp.exceptions
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp import SUPERUSER_ID
|
from openerp import SUPERUSER_ID
|
||||||
|
from openerp.modules.registry import RegistryManager
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class CompanyLDAP(osv.osv):
|
class CompanyLDAP(osv.osv):
|
||||||
|
@ -190,9 +191,9 @@ class CompanyLDAP(osv.osv):
|
||||||
user_obj = self.pool['res.users']
|
user_obj = self.pool['res.users']
|
||||||
values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry)
|
values = self.map_ldap_attributes(cr, uid, conf, login, ldap_entry)
|
||||||
if conf['user']:
|
if conf['user']:
|
||||||
|
values['active'] = True
|
||||||
user_id = user_obj.copy(cr, SUPERUSER_ID, conf['user'],
|
user_id = user_obj.copy(cr, SUPERUSER_ID, conf['user'],
|
||||||
default={'active': True})
|
default=values)
|
||||||
user_obj.write(cr, SUPERUSER_ID, user_id, values)
|
|
||||||
else:
|
else:
|
||||||
user_id = user_obj.create(cr, SUPERUSER_ID, values)
|
user_id = user_obj.create(cr, SUPERUSER_ID, values)
|
||||||
return user_id
|
return user_id
|
||||||
|
@ -243,41 +244,31 @@ class users(osv.osv):
|
||||||
user_id = super(users, self).login(db, login, password)
|
user_id = super(users, self).login(db, login, password)
|
||||||
if user_id:
|
if user_id:
|
||||||
return user_id
|
return user_id
|
||||||
cr = self.pool.db.cursor()
|
registry = RegistryManager.get(db)
|
||||||
ldap_obj = self.pool['res.company.ldap']
|
with registry.cursor() as cr:
|
||||||
|
ldap_obj = registry.get('res.company.ldap')
|
||||||
for conf in ldap_obj.get_ldap_dicts(cr):
|
for conf in ldap_obj.get_ldap_dicts(cr):
|
||||||
entry = ldap_obj.authenticate(conf, login, password)
|
entry = ldap_obj.authenticate(conf, login, password)
|
||||||
if entry:
|
if entry:
|
||||||
user_id = ldap_obj.get_or_create_user(
|
user_id = ldap_obj.get_or_create_user(
|
||||||
cr, SUPERUSER_ID, conf, login, entry)
|
cr, SUPERUSER_ID, conf, login, entry)
|
||||||
if user_id:
|
if user_id:
|
||||||
cr.execute("""UPDATE res_users
|
|
||||||
SET login_date=now() AT TIME ZONE 'UTC'
|
|
||||||
WHERE login=%s""",
|
|
||||||
(tools.ustr(login),))
|
|
||||||
cr.commit()
|
|
||||||
break
|
break
|
||||||
cr.close()
|
|
||||||
return user_id
|
return user_id
|
||||||
|
|
||||||
def check(self, db, uid, passwd):
|
def check_credentials(self, cr, uid, password):
|
||||||
try:
|
try:
|
||||||
return super(users,self).check(db, uid, passwd)
|
super(users, self).check_credentials(cr, uid, password)
|
||||||
except openerp.exceptions.AccessDenied:
|
except openerp.exceptions.AccessDenied:
|
||||||
pass
|
|
||||||
|
|
||||||
cr = self.pool.db.cursor()
|
|
||||||
cr.execute('SELECT login FROM res_users WHERE id=%s AND active=TRUE',
|
cr.execute('SELECT login FROM res_users WHERE id=%s AND active=TRUE',
|
||||||
(int(uid),))
|
(int(uid),))
|
||||||
res = cr.fetchone()
|
res = cr.fetchone()
|
||||||
if res:
|
if res:
|
||||||
ldap_obj = self.pool['res.company.ldap']
|
ldap_obj = self.pool['res.company.ldap']
|
||||||
for conf in ldap_obj.get_ldap_dicts(cr):
|
for conf in ldap_obj.get_ldap_dicts(cr):
|
||||||
if ldap_obj.authenticate(conf, res[0], passwd):
|
if ldap_obj.authenticate(conf, res[0], password):
|
||||||
self._uid_cache.setdefault(db, {})[uid] = passwd
|
return
|
||||||
cr.close()
|
raise
|
||||||
return True
|
|
||||||
cr.close()
|
|
||||||
raise openerp.exceptions.AccessDenied()
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
openerp.auth_oauth = function(instance) {
|
openerp.auth_oauth = function(instance) {
|
||||||
|
var _t = instance.web._t,
|
||||||
|
_lt = instance.web._lt;
|
||||||
var QWeb = instance.web.qweb;
|
var QWeb = instance.web.qweb;
|
||||||
|
|
||||||
instance.web.Login.include({
|
instance.web.Login.include({
|
||||||
|
@ -9,9 +11,11 @@ openerp.auth_oauth = function(instance) {
|
||||||
this.$el.on('click', 'a.zocial', this.on_oauth_sign_in);
|
this.$el.on('click', 'a.zocial', this.on_oauth_sign_in);
|
||||||
this.oauth_providers = [];
|
this.oauth_providers = [];
|
||||||
if(this.params.oauth_error === 1) {
|
if(this.params.oauth_error === 1) {
|
||||||
this.do_warn("Sign up error.","Sign up is not allowed on this database.");
|
this.do_warn(_t("Sign up error"),_t("Sign up is not allowed on this database."), true);
|
||||||
} else if(this.params.oauth_error === 2) {
|
} else if(this.params.oauth_error === 2) {
|
||||||
this.do_warn("Authentication error","");
|
this.do_warn(_t("Authentication error"),_t("Access Denied"), true);
|
||||||
|
} else if(this.params.oauth_error === 3) {
|
||||||
|
this.do_warn(_t("Authentication error"),_t("You do not have access to this database or your invitation has expired. Please ask for an invitation and be sure to follow the link in your invitation email."), true);
|
||||||
}
|
}
|
||||||
return d.done(this.do_oauth_load).fail(function() {
|
return d.done(this.do_oauth_load).fail(function() {
|
||||||
self.do_oauth_load([]);
|
self.do_oauth_load([]);
|
||||||
|
|
|
@ -23,6 +23,7 @@ import logging
|
||||||
import simplejson
|
import simplejson
|
||||||
|
|
||||||
import openerp
|
import openerp
|
||||||
|
from openerp.addons.auth_signup.res_users import SignupError
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
@ -35,7 +36,7 @@ class res_users(osv.Model):
|
||||||
try:
|
try:
|
||||||
login = super(res_users, self)._auth_oauth_signin(cr, uid, provider, validation, params, context=context)
|
login = super(res_users, self)._auth_oauth_signin(cr, uid, provider, validation, params, context=context)
|
||||||
|
|
||||||
except openerp.exceptions.AccessDenied:
|
except openerp.exceptions.AccessDenied, access_denied_exception:
|
||||||
if context and context.get('no_user_creation'):
|
if context and context.get('no_user_creation'):
|
||||||
return None
|
return None
|
||||||
state = simplejson.loads(params['state'])
|
state = simplejson.loads(params['state'])
|
||||||
|
@ -52,6 +53,8 @@ class res_users(osv.Model):
|
||||||
'oauth_access_token': params['access_token'],
|
'oauth_access_token': params['access_token'],
|
||||||
'active': True,
|
'active': True,
|
||||||
}
|
}
|
||||||
|
try:
|
||||||
_, login, _ = self.signup(cr, uid, values, token, context=context)
|
_, login, _ = self.signup(cr, uid, values, token, context=context)
|
||||||
|
except SignupError:
|
||||||
|
raise access_denied_exception
|
||||||
return login
|
return login
|
||||||
|
|
|
@ -26,7 +26,7 @@ from urlparse import urljoin
|
||||||
from openerp.addons.base.ir.ir_mail_server import MailDeliveryException
|
from openerp.addons.base.ir.ir_mail_server import MailDeliveryException
|
||||||
from openerp.osv import osv, fields
|
from openerp.osv import osv, fields
|
||||||
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
from openerp.tools.safe_eval import safe_eval
|
from ast import literal_eval
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
class SignupError(Exception):
|
class SignupError(Exception):
|
||||||
|
@ -221,12 +221,12 @@ class res_users(osv.Model):
|
||||||
def _signup_create_user(self, cr, uid, values, context=None):
|
def _signup_create_user(self, cr, uid, values, context=None):
|
||||||
""" create a new user from the template user """
|
""" create a new user from the template user """
|
||||||
ir_config_parameter = self.pool.get('ir.config_parameter')
|
ir_config_parameter = self.pool.get('ir.config_parameter')
|
||||||
template_user_id = safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.template_user_id', 'False'))
|
template_user_id = literal_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.template_user_id', 'False'))
|
||||||
assert template_user_id and self.exists(cr, uid, template_user_id, context=context), 'Signup: invalid template user'
|
assert template_user_id and self.exists(cr, uid, template_user_id, context=context), 'Signup: invalid template user'
|
||||||
|
|
||||||
# check that uninvited users may sign up
|
# check that uninvited users may sign up
|
||||||
if 'partner_id' not in values:
|
if 'partner_id' not in values:
|
||||||
if not safe_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')):
|
if not literal_eval(ir_config_parameter.get_param(cr, uid, 'auth_signup.allow_uninvited', 'False')):
|
||||||
raise SignupError('Signup is not allowed for uninvited users')
|
raise SignupError('Signup is not allowed for uninvited users')
|
||||||
|
|
||||||
assert values.get('login'), "Signup: no login given for new user"
|
assert values.get('login'), "Signup: no login given for new user"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
{
|
{
|
||||||
'name': 'Calendar',
|
'name': 'Calendar',
|
||||||
'version': '1.0',
|
'version': '1.0',
|
||||||
'depends': ['base', 'base_status', 'mail', 'base_action_rule'],
|
'depends': ['base', 'mail', 'base_action_rule'],
|
||||||
'summary': 'Personal & Shared Calendar',
|
'summary': 'Personal & Shared Calendar',
|
||||||
'description': """
|
'description': """
|
||||||
This is a full-featured calendar system.
|
This is a full-featured calendar system.
|
||||||
|
|
|
@ -1187,8 +1187,8 @@ rule or repeating pattern of time to exclude from the recurring rule."),
|
||||||
context = {}
|
context = {}
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for data in super(calendar_event, self).read(cr, uid, select, ['rrule', 'exdate', 'exrule', 'date'], context=context):
|
for data in super(calendar_event, self).read(cr, uid, select, ['rrule', 'recurrency', 'exdate', 'exrule', 'date'], context=context):
|
||||||
if not data['rrule']:
|
if not data['recurrency'] or not data['rrule']:
|
||||||
result.append(data['id'])
|
result.append(data['id'])
|
||||||
continue
|
continue
|
||||||
event_date = datetime.strptime(data['date'], "%Y-%m-%d %H:%M:%S")
|
event_date = datetime.strptime(data['date'], "%Y-%m-%d %H:%M:%S")
|
||||||
|
|
|
@ -25,7 +25,6 @@ from openerp.osv import fields, osv
|
||||||
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
|
from openerp.tools import DEFAULT_SERVER_DATE_FORMAT
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from base_calendar import get_real_ids, base_calendar_id2real_id
|
from base_calendar import get_real_ids, base_calendar_id2real_id
|
||||||
from openerp.addons.base_status.base_state import base_state
|
|
||||||
#
|
#
|
||||||
# crm.meeting is defined here so that it may be used by modules other than crm,
|
# crm.meeting is defined here so that it may be used by modules other than crm,
|
||||||
# without forcing the installation of crm.
|
# without forcing the installation of crm.
|
||||||
|
@ -38,14 +37,13 @@ class crm_meeting_type(osv.Model):
|
||||||
'name': fields.char('Name', size=64, required=True, translate=True),
|
'name': fields.char('Name', size=64, required=True, translate=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
class crm_meeting(base_state, osv.Model):
|
class crm_meeting(osv.Model):
|
||||||
""" Model for CRM meetings """
|
""" Model for CRM meetings """
|
||||||
_name = 'crm.meeting'
|
_name = 'crm.meeting'
|
||||||
_description = "Meeting"
|
_description = "Meeting"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ["calendar.event", "mail.thread", "ir.needaction_mixin"]
|
_inherit = ["calendar.event", "mail.thread", "ir.needaction_mixin"]
|
||||||
_columns = {
|
_columns = {
|
||||||
# base_state required fields
|
|
||||||
'create_date': fields.datetime('Creation Date', readonly=True),
|
'create_date': fields.datetime('Creation Date', readonly=True),
|
||||||
'write_date': fields.datetime('Write Date', readonly=True),
|
'write_date': fields.datetime('Write Date', readonly=True),
|
||||||
'date_open': fields.datetime('Confirmed', readonly=True),
|
'date_open': fields.datetime('Confirmed', readonly=True),
|
||||||
|
@ -79,6 +77,12 @@ class crm_meeting(base_state, osv.Model):
|
||||||
default['attendee_ids'] = False
|
default['attendee_ids'] = False
|
||||||
return super(crm_meeting, self).copy(cr, uid, id, default, context)
|
return super(crm_meeting, self).copy(cr, uid, id, default, context)
|
||||||
|
|
||||||
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
|
""" Override to add case management: open/close dates """
|
||||||
|
if values.get('state')and values.get('state') == 'open':
|
||||||
|
values['date_open'] = fields.datetime.now()
|
||||||
|
return super(crm_meeting, self).write(cr, uid, ids, values, context=context)
|
||||||
|
|
||||||
def onchange_partner_ids(self, cr, uid, ids, value, context=None):
|
def onchange_partner_ids(self, cr, uid, ids, value, context=None):
|
||||||
""" The basic purpose of this method is to check that destination partners
|
""" The basic purpose of this method is to check that destination partners
|
||||||
effectively have email addresses. Otherwise a warning is thrown.
|
effectively have email addresses. Otherwise a warning is thrown.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Copyright (c) 2003-2004 Danny Brewer d29583@groovegarden.com
|
# Copyright (c) 2003-2004 Danny Brewer d29583@groovegarden.com
|
||||||
# Copyright (C) 2004-2010 OpenERP SA (<http://openerp.com>).
|
# Copyright (C) 2004-2013 OpenERP SA (<http://openerp.com>).
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -78,7 +78,7 @@ class ExportToRML( unohelper.Base, XJobExecutor ):
|
||||||
|
|
||||||
res = self.sock.execute(database, uid, self.password, 'ir.actions.report.xml', 'sxwtorml',base64.encodestring(data),file_type)
|
res = self.sock.execute(database, uid, self.password, 'ir.actions.report.xml', 'sxwtorml',base64.encodestring(data),file_type)
|
||||||
if res['report_rml_content']:
|
if res['report_rml_content']:
|
||||||
write_data_to_file( get_absolute_file_path( filename[7:] ), res['report_rml_content'] )
|
write_data_to_file(get_absolute_file_path(filename), res['report_rml_content'])
|
||||||
except Exception,e:
|
except Exception,e:
|
||||||
import traceback,sys
|
import traceback,sys
|
||||||
info = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
|
info = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
|
||||||
|
@ -99,8 +99,12 @@ class ExportToRML( unohelper.Base, XJobExecutor ):
|
||||||
|
|
||||||
oFileDialog.setDefaultName(f_path )
|
oFileDialog.setDefaultName(f_path )
|
||||||
|
|
||||||
sPath = oFileDialog.execute() == 1 and oFileDialog.Files[0] or None
|
sPath = oFileDialog.execute() == 1 and oFileDialog.Files[0] or ''
|
||||||
oFileDialog.dispose()
|
oFileDialog.dispose()
|
||||||
|
sPath = sPath[7:]
|
||||||
|
if sPath.startswith('localhost/'):
|
||||||
|
slash = int(os.name == 'nt')
|
||||||
|
sPath = sPath[9 + slash:]
|
||||||
return sPath
|
return sPath
|
||||||
|
|
||||||
if __name__<>"package" and __name__=="__main__":
|
if __name__<>"package" and __name__=="__main__":
|
||||||
|
|
Binary file not shown.
|
@ -1,264 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-today OpenERP SA (<http://www.openerp.com>)
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
from openerp.tools.translate import _
|
|
||||||
|
|
||||||
class base_stage(object):
|
|
||||||
""" Base utility mixin class for objects willing to manage their stages.
|
|
||||||
Object that inherit from this class should inherit from mailgate.thread
|
|
||||||
to have access to the mail gateway, as well as Chatter. Objects
|
|
||||||
subclassing this class should define the following colums:
|
|
||||||
- ``date_open`` (datetime field)
|
|
||||||
- ``date_closed`` (datetime field)
|
|
||||||
- ``user_id`` (many2one to res.users)
|
|
||||||
- ``partner_id`` (many2one to res.partner)
|
|
||||||
- ``stage_id`` (many2one to a stage definition model)
|
|
||||||
- ``state`` (selection field, related to the stage_id.state)
|
|
||||||
"""
|
|
||||||
|
|
||||||
def _get_default_partner(self, cr, uid, context=None):
|
|
||||||
""" Gives id of partner for current user
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if context.get('portal'):
|
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
|
||||||
return user.partner_id.id
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _get_default_email(self, cr, uid, context=None):
|
|
||||||
""" Gives default email address for current user
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if context.get('portal'):
|
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
|
||||||
return user.email
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _get_default_user(self, cr, uid, context=None):
|
|
||||||
""" Gives current user id
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not context or context.get('portal'):
|
|
||||||
return False
|
|
||||||
return uid
|
|
||||||
|
|
||||||
def onchange_partner_address_id(self, cr, uid, ids, add, email=False, context=None):
|
|
||||||
""" This function returns value of partner email based on Partner Address
|
|
||||||
:param add: Id of Partner's address
|
|
||||||
:param email: Partner's email ID
|
|
||||||
"""
|
|
||||||
data = {'value': {'email_from': False, 'phone':False}}
|
|
||||||
if add:
|
|
||||||
address = self.pool.get('res.partner').browse(cr, uid, add)
|
|
||||||
data['value'] = {'partner_name': address and address.name or False,
|
|
||||||
'email_from': address and address.email or False,
|
|
||||||
'phone': address and address.phone or False,
|
|
||||||
'street': address and address.street or False,
|
|
||||||
'street2': address and address.street2 or False,
|
|
||||||
'city': address and address.city or False,
|
|
||||||
'state_id': address.state_id and address.state_id.id or False,
|
|
||||||
'zip': address and address.zip or False,
|
|
||||||
'country_id': address.country_id and address.country_id.id or False,
|
|
||||||
}
|
|
||||||
fields = self.fields_get(cr, uid, context=context or {})
|
|
||||||
for key in data['value'].keys():
|
|
||||||
if key not in fields:
|
|
||||||
del data['value'][key]
|
|
||||||
return data
|
|
||||||
|
|
||||||
def onchange_partner_id(self, cr, uid, ids, part, email=False):
|
|
||||||
""" This function returns value of partner address based on partner
|
|
||||||
:param part: Partner's id
|
|
||||||
:param email: Partner's email ID
|
|
||||||
"""
|
|
||||||
data={}
|
|
||||||
if part:
|
|
||||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
|
||||||
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
|
|
||||||
return {'value': data}
|
|
||||||
|
|
||||||
def _get_default_section_id(self, cr, uid, context=None):
|
|
||||||
""" Gives default section """
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _get_default_stage_id(self, cr, uid, context=None):
|
|
||||||
""" Gives default stage_id """
|
|
||||||
return self.stage_find(cr, uid, [], None, [('state', '=', 'draft')], context=context)
|
|
||||||
|
|
||||||
def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
|
|
||||||
""" Find stage, with a given (optional) domain on the search,
|
|
||||||
ordered by the order parameter. If several stages match the
|
|
||||||
search criterions, the first one will be returned, according
|
|
||||||
to the requested search order.
|
|
||||||
This method is meant to be overriden by subclasses. That way
|
|
||||||
specific behaviors can be achieved for every class inheriting
|
|
||||||
from base_stage.
|
|
||||||
|
|
||||||
:param cases: browse_record of cases
|
|
||||||
:param section_id: section limitating the search, given for
|
|
||||||
a generic search (for example default search).
|
|
||||||
A section models concepts such as Sales team
|
|
||||||
(for CRM), ou departments (for HR).
|
|
||||||
:param domain: a domain on the search of stages
|
|
||||||
:param order: order of the search
|
|
||||||
"""
|
|
||||||
return False
|
|
||||||
|
|
||||||
def stage_set_with_state_name(self, cr, uid, cases, state_name, context=None):
|
|
||||||
""" Set a new stage, with a state_name instead of a stage_id
|
|
||||||
:param cases: browse_record of cases
|
|
||||||
"""
|
|
||||||
if isinstance(cases, (int, long)):
|
|
||||||
cases = self.browse(cr, uid, cases, context=context)
|
|
||||||
for case in cases:
|
|
||||||
stage_id = self.stage_find(cr, uid, [case], None, [('state', '=', state_name)], context=context)
|
|
||||||
if stage_id:
|
|
||||||
self.stage_set(cr, uid, [case.id], stage_id, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def stage_set(self, cr, uid, ids, stage_id, context=None):
|
|
||||||
""" Set the new stage. This methods is the right method to call
|
|
||||||
when changing states. It also checks whether an onchange is
|
|
||||||
defined, and execute it.
|
|
||||||
"""
|
|
||||||
value = {}
|
|
||||||
if hasattr(self, 'onchange_stage_id'):
|
|
||||||
value = self.onchange_stage_id(cr, uid, ids, stage_id, context=context)['value']
|
|
||||||
value['stage_id'] = stage_id
|
|
||||||
return self.write(cr, uid, ids, value, context=context)
|
|
||||||
|
|
||||||
def stage_change(self, cr, uid, ids, op, order, context=None):
|
|
||||||
""" Change the stage and take the next one, based on a condition
|
|
||||||
writen for the 'sequence' field and an operator. This methods
|
|
||||||
checks whether the case has a current stage, and takes its
|
|
||||||
sequence. Otherwise, a default 0 sequence is chosen and this
|
|
||||||
method will therefore choose the first available stage.
|
|
||||||
For example if op is '>' and current stage has a sequence of
|
|
||||||
10, this will call stage_find, with [('sequence', '>', '10')].
|
|
||||||
"""
|
|
||||||
for case in self.browse(cr, uid, ids, context=context):
|
|
||||||
seq = 0
|
|
||||||
if case.stage_id:
|
|
||||||
seq = case.stage_id.sequence or 0
|
|
||||||
section_id = None
|
|
||||||
next_stage_id = self.stage_find(cr, uid, [case], None, [('sequence', op, seq)],order, context=context)
|
|
||||||
if next_stage_id:
|
|
||||||
return self.stage_set(cr, uid, [case.id], next_stage_id, context=context)
|
|
||||||
return False
|
|
||||||
|
|
||||||
def stage_next(self, cr, uid, ids, context=None):
|
|
||||||
""" This function computes next stage for case from its current stage
|
|
||||||
using available stage for that case type
|
|
||||||
"""
|
|
||||||
return self.stage_change(cr, uid, ids, '>','sequence', context)
|
|
||||||
|
|
||||||
def stage_previous(self, cr, uid, ids, context=None):
|
|
||||||
""" This function computes previous stage for case from its current
|
|
||||||
stage using available stage for that case type
|
|
||||||
"""
|
|
||||||
return self.stage_change(cr, uid, ids, '<', 'sequence desc', context)
|
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
|
||||||
""" Overrides orm copy method to avoid copying messages,
|
|
||||||
as well as date_closed and date_open columns if they
|
|
||||||
exist."""
|
|
||||||
if default is None:
|
|
||||||
default = {}
|
|
||||||
|
|
||||||
if hasattr(self, '_columns'):
|
|
||||||
if self._columns.get('date_closed'):
|
|
||||||
default.update({ 'date_closed': False, })
|
|
||||||
if self._columns.get('date_open'):
|
|
||||||
default.update({ 'date_open': False })
|
|
||||||
return super(base_stage, self).copy(cr, uid, id, default, context=context)
|
|
||||||
|
|
||||||
def case_escalate(self, cr, uid, ids, context=None):
|
|
||||||
""" Escalates case to parent level """
|
|
||||||
for case in self.browse(cr, uid, ids, context=context):
|
|
||||||
data = {'active': True}
|
|
||||||
if case.section_id.parent_id:
|
|
||||||
data['section_id'] = case.section_id.parent_id.id
|
|
||||||
if case.section_id.parent_id.change_responsible:
|
|
||||||
if case.section_id.parent_id.user_id:
|
|
||||||
data['user_id'] = case.section_id.parent_id.user_id.id
|
|
||||||
else:
|
|
||||||
raise osv.except_osv(_('Error!'), _("You are already at the top level of your sales-team category.\nTherefore you cannot escalate furthermore."))
|
|
||||||
self.write(cr, uid, [case.id], data, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_open(self, cr, uid, ids, context=None):
|
|
||||||
""" Opens case """
|
|
||||||
cases = self.browse(cr, uid, ids, context=context)
|
|
||||||
for case in cases:
|
|
||||||
data = {'active': True}
|
|
||||||
if not case.user_id:
|
|
||||||
data['user_id'] = uid
|
|
||||||
self.case_set(cr, uid, [case.id], 'open', data, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_close(self, cr, uid, ids, context=None):
|
|
||||||
""" Closes case """
|
|
||||||
return self.case_set(cr, uid, ids, 'done', {'active': True, 'date_closed': fields.datetime.now()}, context=context)
|
|
||||||
|
|
||||||
def case_cancel(self, cr, uid, ids, context=None):
|
|
||||||
""" Cancels case """
|
|
||||||
return self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_pending(self, cr, uid, ids, context=None):
|
|
||||||
""" Set case as pending """
|
|
||||||
return self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_reset(self, cr, uid, ids, context=None):
|
|
||||||
""" Resets case as draft """
|
|
||||||
return self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_set(self, cr, uid, ids, new_state_name=None, values_to_update=None, new_stage_id=None, context=None):
|
|
||||||
""" Generic method for setting case. This methods wraps the update
|
|
||||||
of the record.
|
|
||||||
|
|
||||||
:params new_state_name: the new state of the record; this method
|
|
||||||
will call ``stage_set_with_state_name``
|
|
||||||
that will find the stage matching the
|
|
||||||
new state, using the ``stage_find`` method.
|
|
||||||
:params new_stage_id: alternatively, you may directly give the
|
|
||||||
new stage of the record
|
|
||||||
:params state_name: the new value of the state, such as
|
|
||||||
'draft' or 'close'.
|
|
||||||
:params update_values: values that will be added with the state
|
|
||||||
update when writing values to the record.
|
|
||||||
"""
|
|
||||||
cases = self.browse(cr, uid, ids, context=context)
|
|
||||||
# 1. update the stage
|
|
||||||
if new_state_name:
|
|
||||||
self.stage_set_with_state_name(cr, uid, cases, new_state_name, context=context)
|
|
||||||
elif not (new_stage_id is None):
|
|
||||||
self.stage_set(cr, uid, ids, new_stage_id, context=context)
|
|
||||||
# 2. update values
|
|
||||||
if values_to_update:
|
|
||||||
self.write(cr, uid, ids, values_to_update, context=context)
|
|
||||||
return True
|
|
|
@ -1,201 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# OpenERP, Open Source Management Solution
|
|
||||||
# Copyright (C) 2004-today OpenERP SA (<http://www.openerp.com>)
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
|
||||||
from openerp.tools.translate import _
|
|
||||||
|
|
||||||
class base_state(object):
|
|
||||||
""" Base utility mixin class for objects willing to manage their state.
|
|
||||||
Object subclassing this class should define the following colums:
|
|
||||||
- ``date_open`` (datetime field)
|
|
||||||
- ``date_closed`` (datetime field)
|
|
||||||
- ``user_id`` (many2one to res.users)
|
|
||||||
- ``partner_id`` (many2one to res.partner)
|
|
||||||
- ``email_from`` (char field)
|
|
||||||
- ``state`` (selection field)
|
|
||||||
"""
|
|
||||||
|
|
||||||
def _get_default_partner(self, cr, uid, context=None):
|
|
||||||
""" Gives id of partner for current user
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not context or not context.get('portal'):
|
|
||||||
return False
|
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
|
||||||
if hasattr(user, 'partner_address_id') and user.partner_address_id:
|
|
||||||
return user.partner_address_id
|
|
||||||
return user.company_id.partner_id.id
|
|
||||||
|
|
||||||
def _get_default_email(self, cr, uid, context=None):
|
|
||||||
""" Gives default email address for current user
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not context or not context.get('portal'):
|
|
||||||
return False
|
|
||||||
user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
|
||||||
return user.email
|
|
||||||
|
|
||||||
def _get_default_user(self, cr, uid, context=None):
|
|
||||||
""" Gives current user id
|
|
||||||
:param context: if portal not in context returns False
|
|
||||||
"""
|
|
||||||
if context is None:
|
|
||||||
context = {}
|
|
||||||
if not context or not context.get('portal'):
|
|
||||||
return False
|
|
||||||
return uid
|
|
||||||
|
|
||||||
def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
|
|
||||||
""" This function returns value of partner email based on Partner Address
|
|
||||||
:param add: Id of Partner's address
|
|
||||||
:param email: Partner's email ID
|
|
||||||
"""
|
|
||||||
data = {'value': {'email_from': False, 'phone':False}}
|
|
||||||
if add:
|
|
||||||
address = self.pool.get('res.partner').browse(cr, uid, add)
|
|
||||||
data['value'] = {'email_from': address and address.email or False ,
|
|
||||||
'phone': address and address.phone or False}
|
|
||||||
if 'phone' not in self._columns:
|
|
||||||
del data['value']['phone']
|
|
||||||
return data
|
|
||||||
|
|
||||||
def onchange_partner_id(self, cr, uid, ids, part, email=False):
|
|
||||||
""" This function returns value of partner address based on partner
|
|
||||||
:param part: Partner's id
|
|
||||||
:param email: Partner's email ID
|
|
||||||
"""
|
|
||||||
data={}
|
|
||||||
if part:
|
|
||||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
|
||||||
data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
|
|
||||||
return {'value': data}
|
|
||||||
|
|
||||||
def case_escalate(self, cr, uid, ids, context=None):
|
|
||||||
""" Escalates case to parent level """
|
|
||||||
cases = self.browse(cr, uid, ids, context=context)
|
|
||||||
cases[0].state # fill browse record cache, for _action having old and new values
|
|
||||||
data = {'active': True}
|
|
||||||
for case in cases:
|
|
||||||
parent_id = case.section_id.parent_id
|
|
||||||
if parent_id:
|
|
||||||
data['section_id'] = parent_id.id
|
|
||||||
if parent_id.change_responsible and parent_id.user_id:
|
|
||||||
data['user_id'] = parent_id.user_id.id
|
|
||||||
else:
|
|
||||||
raise osv.except_osv(_('Error!'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
|
|
||||||
self.write(cr, uid, [case.id], data, context=context)
|
|
||||||
case.case_escalate_send_note(parent_id, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_open(self, cr, uid, ids, context=None):
|
|
||||||
""" Opens case """
|
|
||||||
cases = self.browse(cr, uid, ids, context=context)
|
|
||||||
for case in cases:
|
|
||||||
values = {'active': True}
|
|
||||||
if case.state == 'draft':
|
|
||||||
values['date_open'] = fields.datetime.now()
|
|
||||||
if not case.user_id:
|
|
||||||
values['user_id'] = uid
|
|
||||||
self.case_set(cr, uid, [case.id], 'open', values, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_close(self, cr, uid, ids, context=None):
|
|
||||||
""" Closes case """
|
|
||||||
return self.case_set(cr, uid, ids, 'done', {'date_closed': fields.datetime.now()}, context=context)
|
|
||||||
|
|
||||||
def case_cancel(self, cr, uid, ids, context=None):
|
|
||||||
""" Cancels case """
|
|
||||||
return self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_pending(self, cr, uid, ids, context=None):
|
|
||||||
""" Sets case as pending """
|
|
||||||
return self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_reset(self, cr, uid, ids, context=None):
|
|
||||||
""" Resets case as draft """
|
|
||||||
return self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context)
|
|
||||||
|
|
||||||
def case_set(self, cr, uid, ids, state_name, update_values=None, context=None):
|
|
||||||
""" Generic method for setting case. This methods wraps the update
|
|
||||||
of the record, as well as call to _action and browse_record
|
|
||||||
case setting to fill the cache.
|
|
||||||
|
|
||||||
:params: state_name: the new value of the state, such as
|
|
||||||
'draft' or 'close'.
|
|
||||||
:params: update_values: values that will be added with the state
|
|
||||||
update when writing values to the record.
|
|
||||||
"""
|
|
||||||
cases = self.browse(cr, uid, ids, context=context)
|
|
||||||
cases[0].state # fill browse record cache, for _action having old and new values
|
|
||||||
if update_values is None:
|
|
||||||
update_values = {}
|
|
||||||
update_values['state'] = state_name
|
|
||||||
return self.write(cr, uid, ids, update_values, context=context)
|
|
||||||
|
|
||||||
# ******************************
|
|
||||||
# Notifications
|
|
||||||
# ******************************
|
|
||||||
|
|
||||||
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
|
|
||||||
return ''
|
|
||||||
|
|
||||||
def case_open_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for id in ids:
|
|
||||||
msg = _('%s has been <b>opened</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
|
|
||||||
for id in ids:
|
|
||||||
if new_section:
|
|
||||||
msg = '%s has been <b>escalated</b> to <b>%s</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
|
|
||||||
else:
|
|
||||||
msg = '%s has been <b>escalated</b>.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_close_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for id in ids:
|
|
||||||
msg = _('%s has been <b>closed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_cancel_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for id in ids:
|
|
||||||
msg = _('%s has been <b>canceled</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_pending_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for id in ids:
|
|
||||||
msg = _('%s is now <b>pending</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
||||||
|
|
||||||
def case_reset_send_note(self, cr, uid, ids, context=None):
|
|
||||||
for id in ids:
|
|
||||||
msg = _('%s has been <b>renewed</b>.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
|
|
||||||
self.message_post(cr, uid, [id], body=msg, context=context)
|
|
||||||
return True
|
|
|
@ -1,76 +0,0 @@
|
||||||
# Arabic translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-01 18:05+0000\n"
|
|
||||||
"Last-Translator: gehad shaat <gehad.shaath@gmail.com>\n"
|
|
||||||
"Language-Team: Arabic <ar@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "خطأ !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "خطأ!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr ""
|
|
|
@ -1,72 +0,0 @@
|
||||||
# Translation of OpenERP Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * base_status
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: OpenERP Server 7.0alpha\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"Last-Translator: <>\n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: \n"
|
|
||||||
"Plural-Forms: \n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "You can not escalate, you are already at the top level regarding your sales-team category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
|
@ -1,76 +0,0 @@
|
||||||
# Czech translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-03-30 12:43+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Czech <cs@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-31 05:28+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16546)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr ""
|
|
|
@ -1,81 +0,0 @@
|
||||||
# German translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-08 13:50+0000\n"
|
|
||||||
"Last-Translator: Thorsten Vocks (OpenBig.org) <thorsten.vocks@big-"
|
|
||||||
"consulting.net>\n"
|
|
||||||
"Language-Team: German <de@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Fehler !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s wurde <b>eröffnet</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s wurde <b>erneuert</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Fehler !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Keine weitere Eskalation möglich, da Sie bereits die obersten Ebene erreicht "
|
|
||||||
"haben."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s wurde geändert auf <b>Wiedervorlage</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s wurde <b>abgebrochen</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Keine weitere Eskalation möglich, da Sie bereits die obersten Ebene erreicht "
|
|
||||||
"haben."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s wurde <b>beendet</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# English (United Kingdom) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-06 15:07+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Error !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s has been <b>opened</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s has been <b>renewed</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Error!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s is now <b>pending</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s has been <b>canceled</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s has been <b>closed</b>."
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Spanish translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-10 22:19+0000\n"
|
|
||||||
"Last-Translator: Ana Juaristi Olalde <ajuaristio@gmail.com>\n"
|
|
||||||
"Language-Team: Spanish <es@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "¡ Error !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s ha sido <b>abierto</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s ha sido <b>renovado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "¡Error!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"No puede escalar, usted está en la categoría más alta de su equipo de ventas"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s está ahora <b>pendiente</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s ha sido <b>cancelado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Está en el nivel más alto de la categoría de su equipo de ventas.\n"
|
|
||||||
"Por lo tanto no puede escalar más allá."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s ha sido <b>cerrado</b>."
|
|
|
@ -1,81 +0,0 @@
|
||||||
# French translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-05 09:30+0000\n"
|
|
||||||
"Last-Translator: Numérigraphe <Unknown>\n"
|
|
||||||
"Language-Team: French <fr@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Erreur !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s a été <b>ouvert(e)</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s a été <b>renouvelé(e)</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Erreur !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Vous ne pouvez pas demander d'escalade : vous êtes déjà au plus haut niveau "
|
|
||||||
"possible dans votre catégorie d'équipes de ventes."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s est maintenant <b>en attente</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s a été <b>annulé(e)</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Vous êtes déjà au plus haut niveau possible dans votre catégorie d'équipes "
|
|
||||||
"de ventes.\n"
|
|
||||||
"Par conséquent vous ne pouvez pas demander une escalade au niveau supérieur."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s a été <b>fermé(e)</b>."
|
|
|
@ -1,78 +0,0 @@
|
||||||
# Croatian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-09 19:46+0000\n"
|
|
||||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
|
||||||
"Language-Team: Croatian <hr@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Greška !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s je <b>otvoren</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s je <b>obnovljen</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Greška!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "Ne možete eskaliarati. Vi ste na vrhu hijerarhije prodajnog tima."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s je sada <b>na čekanju</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s je <b>otkazan</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Vi ste na vrhu hijerarhije prodajnog tima.\n"
|
|
||||||
"Stoga ne možete dalje eskalirati."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s je <b>zatvoren</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Hungarian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-03-14 10:26+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Hungarian <hu@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Hiba!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s meg lett <b>nyitva</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s meg lett <b>újítva</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Hiba!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Nem tud feljebb lépni, már az értékesítési csoportját illetően a legmagasabb "
|
|
||||||
"fokon áll."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s ez nem <b>elintézetlen</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s ez <b>visszavont</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Már az értékesítési csoportjának a legmagasabb szintjén áll.\n"
|
|
||||||
"Ezért nem tud tovább feljebb lépni."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s le lett <b>Zárva</b>."
|
|
|
@ -1,77 +0,0 @@
|
||||||
# Indonesian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-17 00:41+0000\n"
|
|
||||||
"Last-Translator: Riza Kurniawan <rizabisnis@gmail.com>\n"
|
|
||||||
"Language-Team: Indonesian <id@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Ada Kesalahan !!!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s sedang <b>dibuka</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s sedang <b>diperbaharui</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Ada Kesalahan !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Tidak bisa ditingkatkan, anda pada tingkat tertinggi bersama tim sales anda."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s saat ini <b>ditunda</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s sedang = <b>dibatalkan</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s sedang = <b>ditutup</b>."
|
|
|
@ -1,78 +0,0 @@
|
||||||
# Italian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-13 19:22+0000\n"
|
|
||||||
"Last-Translator: Davide Corio - agilebg.com <davide.corio@agilebg.com>\n"
|
|
||||||
"Language-Team: Italian <it@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Errore !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s è stato <b>aperto</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s è stato <b>rinnovato</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Errore!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "Impossibile scalare, si è già al livello massimo del team vendite."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s è ora <b>in attesa</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s è stato <b>annullato</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Si è già al massimo livello del team vendita.\n"
|
|
||||||
"Quindi non è possibile scalare ulteriormente."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s è stato <b>chiuso</b>."
|
|
|
@ -1,76 +0,0 @@
|
||||||
# Lithuanian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-04-29 15:17+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Lithuanian <lt@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-04-30 05:29+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16580)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr ""
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Macedonian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-21 13:28+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Macedonian <mk@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Грешка !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s е <b>отворен</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s е <b>обновен</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Грешка!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Неможе да ескалирате, веќе сте на највисокото ниво со оглед на категоријата "
|
|
||||||
"на вашиот продажбен тим."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s е <b>во исчекување</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s е <b>откажан</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Веќе сте на највисокото ниво на вашиот продажбен тим.\n"
|
|
||||||
"Значи понатамошно ескалирање не е можно."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s е <b>затворен</b>."
|
|
|
@ -1,78 +0,0 @@
|
||||||
# Mongolian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-27 16:26+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Mongolian <mn@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Алдаа !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s <b>нээгдлээ</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s <b>шинэчлэгдлээ</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Алдаа!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "Томруулах боломжгүй. Учир нь та багийнхаа хамгийн дээд түвшин байна."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s одоо <b>хүлээгдэж буй</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s <b>цуцлагдлаа</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Та борлуулалтын багийн ангилалынхаа хамгийн дээд түвшин байна.\n"
|
|
||||||
"Тиймээс та дахин томруулах боломжгүй."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s <b>хаагдлаа</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Dutch translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-20 14:05+0000\n"
|
|
||||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
|
||||||
"Language-Team: Dutch <nl@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Fout!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s is <b>geopend</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s is <b>vernieuw</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Fout!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Het is niet mogelijk om verder te escaleren. U bent al op het hoogste niveau "
|
|
||||||
"van uw verkoopteam categorieën."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s is nu <b>in afwachting</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s is <b>geannuleerd</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"U bent al op het hoogste niveau van het verkoopteam.\n"
|
|
||||||
"Het is zodoende niet mogelijk om verder te escaleren."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s is <b>gesloten</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Dutch (Belgium) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-04-15 16:40+0000\n"
|
|
||||||
"Last-Translator: Els Van Vossel (Agaplan) <Unknown>\n"
|
|
||||||
"Language-Team: Dutch (Belgium) <nl_BE@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-04-16 04:37+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16564)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Fout"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s is <b>geopend</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s is <b>vernieuwd</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Fout"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"U kunt niet escaleren; u heeft het hoogste niveau in de verkoopteams al "
|
|
||||||
"bereikt."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s is <b>wachtend</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s is <b>geannuleerd</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"U bent al op het hoogste niveau van uw verkoopteam.\n"
|
|
||||||
"U kunt dus niet verder escaleren."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s is <b>gesloten</b>."
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Polish translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-16 11:12+0000\n"
|
|
||||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
|
||||||
"Language-Team: Polish <pl@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Błąd !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s zostało <b>otwarte</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s zostało <b>odnowione</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Błąd!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Nie możesz przekazywać nadrzędnym, bo jesteś na górze w kategorii zespołu."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s <b>oczekuje</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s zostało <b>anulowane</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Jesteś na najwyższym poziomie kategorii zespołów.\n"
|
|
||||||
"Więc nie możesz przekazywać wyżej."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s zostało <b>zamknięte</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Portuguese translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-13 16:39+0000\n"
|
|
||||||
"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n"
|
|
||||||
"Language-Team: Portuguese <pt@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Erro!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s foi <b>aberto</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s foi <b>renovado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Erro!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Não pode subir de grau porque já está no topo no que concerne à categoria da "
|
|
||||||
"sua equipa de vendas."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s agora está <b>pendente</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s foi <b>cancelado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Já está no topo no que concerne à categoria da sua equipa de vendas.\n"
|
|
||||||
"Não pode subir mais."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s foi <b>fechado</b>."
|
|
|
@ -1,81 +0,0 @@
|
||||||
# Brazilian Portuguese translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-16 23:52+0000\n"
|
|
||||||
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
|
|
||||||
"<webmaster@guaru.net>\n"
|
|
||||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Erro!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s foi <b>aberta</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s foi <b>renovado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Erro!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Você não pode escalar, você já está no nível mais alto em relação a sua "
|
|
||||||
"categoria de equipe de vendas."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s está agora <b>pendente</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s foi <b>cancelado</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Você já está no nível mais alto de sua categoria de equipe de vendas.\n"
|
|
||||||
"Portanto, você não pode escalar além disso."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s foi <b>fechado</b>."
|
|
|
@ -1,81 +0,0 @@
|
||||||
# Romanian translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-23 18:23+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Romanian <ro@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Eroare !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s a fost <b>deschis</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s a fost <b>reinnoit</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Eroare!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Nu puteti avansa, sunteti deja la cel mai inalt nivel in ceea ce priveste "
|
|
||||||
"categoria echipei d-voastra de vanzari."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s este acum <b>in asteptare</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s a fost <b>anulat</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Sunteti deja la cel mai inalt nivel al categoriei echipei dumneavoastra de "
|
|
||||||
"vanzari.\n"
|
|
||||||
"Prin urmare nu mai puteti avansa."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s a fost <b>inchis</b>."
|
|
|
@ -1,80 +0,0 @@
|
||||||
# Russian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-06-05 07:16+0000\n"
|
|
||||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
|
||||||
"Language-Team: Russian <ru@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-06-06 05:21+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16667)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Ошибка !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s было <b>открыто</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s было <b>обновлено</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Ошибка!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Вы не можете обострить, вы уже на высшем уровне относительно вашей категории "
|
|
||||||
"отдела продаж."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s сейчас <b>в ожидании</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s было <b>отменено</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Вы уже на высшем уровне категории вашей команды продаж.\n"
|
|
||||||
"Поэтому вы не можете обострить."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s было <b>закрыто</b>."
|
|
|
@ -1,76 +0,0 @@
|
||||||
# Slovenian translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-12-29 12:12+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Slovenian <sl@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Napaka!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s je bil <b>od</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s je <b>obnovljen</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Napaka!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "Ste že na vrhu hierarhije vaših skupin prodaje."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s je na <b>čakanju</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s je <b>preklican</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr "Ste že na vrhu hierarhije vaših skupin prodaje."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s je <b>zaprt</b>."
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Swedish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-07-08 15:10+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Swedish <sv@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-07-09 05:16+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16696)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Fel !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s har <b>öppnats</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s har <b>förnyats</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Fel!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Du kan inte eskalera längre, du har nått toppen för denna säljlags-kategori."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s är nu <b>pågående</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s har <b>avbrutits</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Du har nått översta nivån för din säljlagskategori.\n"
|
|
||||||
"Det går därför inte att eskalera ytterligare."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s har <b>stängts</b>."
|
|
|
@ -1,79 +0,0 @@
|
||||||
# Turkish translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-02-03 12:04+0000\n"
|
|
||||||
"Last-Translator: Ahmet Altınışık <Unknown>\n"
|
|
||||||
"Language-Team: Turkish <tr@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "Hata !"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s <b>açıldı</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s <b>yenilendi</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "Hata!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr ""
|
|
||||||
"Yükseltemezsiniz, satış-takımı kategorisine göre zaten en üst düzeydesiniz."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s şimdi <b>bekliyor</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s <b>iptal edildi</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"Zaten satış takımı kategorisinin en üst düzeyindesiniz.\n"
|
|
||||||
"Yani daha fazla yükseltemezsiniz."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s <b>kapatıldı</b>."
|
|
|
@ -1,78 +0,0 @@
|
||||||
# Chinese (Simplified) translation for openobject-addons
|
|
||||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2012-11-28 07:43+0000\n"
|
|
||||||
"Last-Translator: 盈通 ccdos <ccdos@163.com>\n"
|
|
||||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "错误!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s 已经被 <b>打开</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s 已经被 <b>更新</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "错误!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "不能上报,你已经在您销售团队类别中的最高级了。"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s 现在 <b>待定</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s 已经被 <b>取消</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr ""
|
|
||||||
"你已经在您销售团队类别中的最高级了。\n"
|
|
||||||
"因此,你不能再上报了。"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s 已经被 <b>关闭</b>."
|
|
|
@ -1,76 +0,0 @@
|
||||||
# Chinese (Traditional) translation for openobject-addons
|
|
||||||
# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
|
|
||||||
# This file is distributed under the same license as the openobject-addons package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2013.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: openobject-addons\n"
|
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"POT-Creation-Date: 2012-12-21 17:05+0000\n"
|
|
||||||
"PO-Revision-Date: 2013-01-30 14:21+0000\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Launchpad-Export-Date: 2013-03-16 05:52+0000\n"
|
|
||||||
"X-Generator: Launchpad (build 16532)\n"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid "Error !"
|
|
||||||
msgstr "錯誤!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:166
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>opened</b>."
|
|
||||||
msgstr "%s 已經 <b>開立</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:199
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>renewed</b>."
|
|
||||||
msgstr "%s 已經 <b>更新</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid "Error!"
|
|
||||||
msgstr "錯誤!"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:107
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You can not escalate, you are already at the top level regarding your sales-"
|
|
||||||
"team category."
|
|
||||||
msgstr "您不能升級,您已經是您銷售團隊類別中的最高等級了。"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:193
|
|
||||||
#, python-format
|
|
||||||
msgid "%s is now <b>pending</b>."
|
|
||||||
msgstr "%s 現在是 <b>暫停</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:187
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>canceled</b>."
|
|
||||||
msgstr "%s 已經 <b>取消</b>."
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_stage.py:210
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"You are already at the top level of your sales-team category.\n"
|
|
||||||
"Therefore you cannot escalate furthermore."
|
|
||||||
msgstr "您已經是您銷售團隊類別中的最高等級了。因此您不能再升級了。"
|
|
||||||
|
|
||||||
#. module: base_status
|
|
||||||
#: code:addons/base_status/base_state.py:181
|
|
||||||
#, python-format
|
|
||||||
msgid "%s has been <b>closed</b>."
|
|
||||||
msgstr "%s 已經 <b>關閉</b>."
|
|
|
@ -381,6 +381,10 @@ instance.board.AddToDashboard = instance.web.search.Input.extend({
|
||||||
_.each(data.contexts, context.add, context);
|
_.each(data.contexts, context.add, context);
|
||||||
_.each(data.domains, domain.add, domain);
|
_.each(data.domains, domain.add, domain);
|
||||||
|
|
||||||
|
context.add({
|
||||||
|
group_by: instance.web.pyeval.eval('groupbys', data.groupbys || [])
|
||||||
|
});
|
||||||
|
|
||||||
var c = instance.web.pyeval.eval('context', context);
|
var c = instance.web.pyeval.eval('context', context);
|
||||||
for(var k in c) {
|
for(var k in c) {
|
||||||
if (c.hasOwnProperty(k) && /^search_default_/.test(k)) {
|
if (c.hasOwnProperty(k) && /^search_default_/.test(k)) {
|
||||||
|
|
|
@ -51,7 +51,6 @@ Dashboard for CRM will include:
|
||||||
'depends': [
|
'depends': [
|
||||||
'base_action_rule',
|
'base_action_rule',
|
||||||
'base_setup',
|
'base_setup',
|
||||||
'base_status',
|
|
||||||
'process',
|
'process',
|
||||||
'mail',
|
'mail',
|
||||||
'email_template',
|
'email_template',
|
||||||
|
@ -116,6 +115,7 @@ Dashboard for CRM will include:
|
||||||
'test/crm_lead_onchange.yml',
|
'test/crm_lead_onchange.yml',
|
||||||
'test/crm_lead_copy.yml',
|
'test/crm_lead_copy.yml',
|
||||||
'test/crm_lead_unlink.yml',
|
'test/crm_lead_unlink.yml',
|
||||||
|
'test/crm_lead_find_stage.yml',
|
||||||
],
|
],
|
||||||
'css': [
|
'css': [
|
||||||
'static/src/css/crm.css'
|
'static/src/css/crm.css'
|
||||||
|
|
|
@ -19,7 +19,11 @@
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">graph,tree,form</field>
|
<field name="view_mode">graph,tree,form</field>
|
||||||
<field name="view_id" ref="view_crm_opportunity_stage_graph"/>
|
<field name="view_id" ref="view_crm_opportunity_stage_graph"/>
|
||||||
<field name="domain">[('state', 'not in', ('done', 'cancel')), ('type', '=', 'opportunity')]</field>
|
<!-- avoid done / cancelled -->
|
||||||
|
<field name="domain">['|',
|
||||||
|
'!', '&', ('probability', '=', 100), ('stage_id.on_change', '=', 1),
|
||||||
|
'!', '&', ('probability', '=', 0), ('stage_id.sequence', '!=', 1),
|
||||||
|
('type', '=', 'opportunity')]</field>
|
||||||
<field name="context">{'search_default_Stage':1}</field>
|
<field name="context">{'search_default_Stage':1}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -43,8 +47,9 @@
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">graph,tree,form</field>
|
<field name="view_mode">graph,tree,form</field>
|
||||||
<field name="view_id" ref="view_crm_opportunity_user_stage_graph"/>
|
<field name="view_id" ref="view_crm_opportunity_user_stage_graph"/>
|
||||||
<field name="domain">[('state','!=','cancel'),('opening_date','>',context_today().strftime("%Y-%m-%d"))]</field>
|
<!-- avoid cancelled -->
|
||||||
<field name="context">{'search_default_Stage':1}</field>
|
<field name="domain">['!', '&', ('probability', '=', 0), ('stage_id.sequence', '!=', 1)]</field>
|
||||||
|
<field name="context">{'search_default_user': 1, 'search_default_Stage': 1}</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="board_crm_statistical_form">
|
<record model="ir.ui.view" id="board_crm_statistical_form">
|
||||||
|
|
|
@ -26,15 +26,6 @@ from openerp import tools
|
||||||
from openerp.osv import fields
|
from openerp.osv import fields
|
||||||
from openerp.osv import osv
|
from openerp.osv import osv
|
||||||
|
|
||||||
MAX_LEVEL = 15
|
|
||||||
AVAILABLE_STATES = [
|
|
||||||
('draft', 'New'),
|
|
||||||
('cancel', 'Cancelled'),
|
|
||||||
('open', 'In Progress'),
|
|
||||||
('pending', 'Pending'),
|
|
||||||
('done', 'Closed')
|
|
||||||
]
|
|
||||||
|
|
||||||
AVAILABLE_PRIORITIES = [
|
AVAILABLE_PRIORITIES = [
|
||||||
('1', 'Highest'),
|
('1', 'Highest'),
|
||||||
('2', 'High'),
|
('2', 'High'),
|
||||||
|
@ -74,9 +65,6 @@ class crm_case_stage(osv.osv):
|
||||||
'requirements': fields.text('Requirements'),
|
'requirements': fields.text('Requirements'),
|
||||||
'section_ids': fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', string='Sections',
|
'section_ids': fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', string='Sections',
|
||||||
help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
|
help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
|
||||||
'state': fields.selection(AVAILABLE_STATES, 'Related Status', required=True,
|
|
||||||
help="The status of your document will automatically change regarding the selected stage. " \
|
|
||||||
"For example, if a stage is related to the status 'Close', when your document reaches this stage, it is automatically closed."),
|
|
||||||
'case_default': fields.boolean('Default to New Sales Team',
|
'case_default': fields.boolean('Default to New Sales Team',
|
||||||
help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
|
help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
|
||||||
'fold': fields.boolean('Fold by Default',
|
'fold': fields.boolean('Fold by Default',
|
||||||
|
@ -91,7 +79,7 @@ class crm_case_stage(osv.osv):
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'sequence': lambda *args: 1,
|
'sequence': lambda *args: 1,
|
||||||
'probability': lambda *args: 0.0,
|
'probability': lambda *args: 0.0,
|
||||||
'state': 'open',
|
'on_change': True,
|
||||||
'fold': False,
|
'fold': False,
|
||||||
'type': 'both',
|
'type': 'both',
|
||||||
'case_default': True,
|
'case_default': True,
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<record id="filter_draft_lead" model="ir.filters">
|
<record id="filter_draft_lead" model="ir.filters">
|
||||||
<field name="name">Draft Leads</field>
|
<field name="name">Draft Leads</field>
|
||||||
<field name="model_id">crm.lead</field>
|
<field name="model_id">crm.lead</field>
|
||||||
<field name="domain">[('state','=','draft')]</field>
|
<field name="domain">[('stage_id.sequence', '=', 1)]</field>
|
||||||
<field name="user_id" eval="False"/>
|
<field name="user_id" eval="False"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="action_email_reminder_lead" model="ir.actions.server">
|
<record id="action_email_reminder_lead" model="ir.actions.server">
|
||||||
|
|
|
@ -22,14 +22,13 @@
|
||||||
import crm
|
import crm
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from openerp.osv import fields, osv, orm
|
|
||||||
import time
|
|
||||||
from openerp import SUPERUSER_ID
|
from openerp import SUPERUSER_ID
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.tools.translate import _
|
|
||||||
from openerp.tools import html2plaintext
|
|
||||||
|
|
||||||
from openerp.addons.base.res.res_partner import format_address
|
from openerp.addons.base.res.res_partner import format_address
|
||||||
|
from openerp.osv import fields, osv, orm
|
||||||
|
from openerp.tools import html2plaintext
|
||||||
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
CRM_LEAD_FIELDS_TO_MERGE = ['name',
|
CRM_LEAD_FIELDS_TO_MERGE = ['name',
|
||||||
'partner_id',
|
'partner_id',
|
||||||
|
@ -61,11 +60,7 @@ CRM_LEAD_FIELDS_TO_MERGE = ['name',
|
||||||
'email_from',
|
'email_from',
|
||||||
'email_cc',
|
'email_cc',
|
||||||
'partner_name']
|
'partner_name']
|
||||||
CRM_LEAD_PENDING_STATES = (
|
|
||||||
crm.AVAILABLE_STATES[2][0], # Cancelled
|
|
||||||
crm.AVAILABLE_STATES[3][0], # Done
|
|
||||||
crm.AVAILABLE_STATES[4][0], # Pending
|
|
||||||
)
|
|
||||||
|
|
||||||
class crm_lead(format_address, osv.osv):
|
class crm_lead(format_address, osv.osv):
|
||||||
""" CRM Lead Case """
|
""" CRM Lead Case """
|
||||||
|
@ -75,13 +70,11 @@ class crm_lead(format_address, osv.osv):
|
||||||
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
_inherit = ['mail.thread', 'ir.needaction_mixin']
|
||||||
|
|
||||||
_track = {
|
_track = {
|
||||||
'state': {
|
|
||||||
'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj.state in ['new', 'draft'],
|
|
||||||
'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj.state == 'done',
|
|
||||||
'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.state == 'cancel',
|
|
||||||
},
|
|
||||||
'stage_id': {
|
'stage_id': {
|
||||||
'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: obj.state not in ['new', 'draft', 'cancel', 'done'],
|
'crm.mt_lead_create': lambda self, cr, uid, obj, ctx=None: obj.probability == 0 and obj.stage_id and obj.stage_id.sequence == 1,
|
||||||
|
'crm.mt_lead_stage': lambda self, cr, uid, obj, ctx=None: (obj.stage_id and obj.stage_id.sequence != 1) and obj.probability < 100,
|
||||||
|
'crm.mt_lead_won': lambda self, cr, uid, obj, ctx=None: obj.probability == 100 and obj.stage_id and obj.stage_id.on_change,
|
||||||
|
'crm.mt_lead_lost': lambda self, cr, uid, obj, ctx=None: obj.probability == 0 and obj.stage_id and obj.stage_id.sequence != 1,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +92,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
def _get_default_stage_id(self, cr, uid, context=None):
|
def _get_default_stage_id(self, cr, uid, context=None):
|
||||||
""" Gives default stage_id """
|
""" Gives default stage_id """
|
||||||
section_id = self._get_default_section_id(cr, uid, context=context)
|
section_id = self._get_default_section_id(cr, uid, context=context)
|
||||||
return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft')], context=context)
|
return self.stage_find(cr, uid, [], section_id, [('sequence', '=', '1')], context=context)
|
||||||
|
|
||||||
def _resolve_section_id_from_context(self, cr, uid, context=None):
|
def _resolve_section_id_from_context(self, cr, uid, context=None):
|
||||||
""" Returns ID of section based on the value of 'section_id'
|
""" Returns ID of section based on the value of 'section_id'
|
||||||
|
@ -220,17 +213,6 @@ class crm_lead(format_address, osv.osv):
|
||||||
res[lead.id][field] = abs(int(duration))
|
res[lead.id][field] = abs(int(duration))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def _history_search(self, cr, uid, obj, name, args, context=None):
|
|
||||||
res = []
|
|
||||||
msg_obj = self.pool.get('mail.message')
|
|
||||||
message_ids = msg_obj.search(cr, uid, [('email_from','!=',False), ('subject', args[0][1], args[0][2])], context=context)
|
|
||||||
lead_ids = self.search(cr, uid, [('message_ids', 'in', message_ids)], context=context)
|
|
||||||
|
|
||||||
if lead_ids:
|
|
||||||
return [('id', 'in', lead_ids)]
|
|
||||||
else:
|
|
||||||
return [('id', '=', '0')]
|
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', track_visibility='onchange',
|
'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', track_visibility='onchange',
|
||||||
select=True, help="Linked partner (optional). Usually created when converting the lead."),
|
select=True, help="Linked partner (optional). Usually created when converting the lead."),
|
||||||
|
@ -244,7 +226,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
'section_id': fields.many2one('crm.case.section', 'Sales Team',
|
'section_id': fields.many2one('crm.case.section', 'Sales Team',
|
||||||
select=True, track_visibility='onchange', help='When sending mails, the default email address is taken from the sales team.'),
|
select=True, track_visibility='onchange', help='When sending mails, the default email address is taken from the sales team.'),
|
||||||
'create_date': fields.datetime('Creation Date', readonly=True),
|
'create_date': fields.datetime('Creation Date', readonly=True),
|
||||||
'email_cc': fields.text('Global CC', size=252 , help="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"),
|
'email_cc': fields.text('Global CC', help="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"),
|
||||||
'description': fields.text('Notes'),
|
'description': fields.text('Notes'),
|
||||||
'write_date': fields.datetime('Update Date', readonly=True),
|
'write_date': fields.datetime('Update Date', readonly=True),
|
||||||
'categ_ids': fields.many2many('crm.case.categ', 'crm_lead_category_rel', 'lead_id', 'category_id', 'Categories', \
|
'categ_ids': fields.many2many('crm.case.categ', 'crm_lead_category_rel', 'lead_id', 'category_id', 'Categories', \
|
||||||
|
@ -264,14 +246,12 @@ class crm_lead(format_address, osv.osv):
|
||||||
domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"),
|
||||||
'user_id': fields.many2one('res.users', 'Salesperson', select=True, track_visibility='onchange'),
|
'user_id': fields.many2one('res.users', 'Salesperson', select=True, track_visibility='onchange'),
|
||||||
'referred': fields.char('Referred By', size=64),
|
'referred': fields.char('Referred By', size=64),
|
||||||
'date_open': fields.datetime('Opened', readonly=True),
|
'date_open': fields.datetime('Assigned', readonly=True),
|
||||||
'day_open': fields.function(_compute_day, string='Days to Open', \
|
'day_open': fields.function(_compute_day, string='Days to Open', \
|
||||||
multi='day_open', type="float", store=True),
|
multi='day_open', type="float", store=True),
|
||||||
'day_close': fields.function(_compute_day, string='Days to Close', \
|
'day_close': fields.function(_compute_day, string='Days to Close', \
|
||||||
multi='day_close', type="float", store=True),
|
multi='day_close', type="float", store=True),
|
||||||
'state': fields.related('stage_id', 'state', type="selection", store=True,
|
'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
|
||||||
selection=crm.AVAILABLE_STATES, string="Status", readonly=True,
|
|
||||||
help='The Status is set to \'Draft\', when a case is created. If the case is in progress the Status is set to \'Open\'. When the case is over, the Status is set to \'Done\'. If the case needs to be reviewed then the Status is set to \'Pending\'.'),
|
|
||||||
|
|
||||||
# Only used for type opportunity
|
# Only used for type opportunity
|
||||||
'probability': fields.float('Success Rate (%)', group_operator="avg"),
|
'probability': fields.float('Success Rate (%)', group_operator="avg"),
|
||||||
|
@ -316,6 +296,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
|
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
|
||||||
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
||||||
'color': 0,
|
'color': 0,
|
||||||
|
'date_last_stage_update': fields.datetime.now(),
|
||||||
}
|
}
|
||||||
|
|
||||||
_sql_constraints = [
|
_sql_constraints = [
|
||||||
|
@ -325,7 +306,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
def onchange_stage_id(self, cr, uid, ids, stage_id, context=None):
|
def onchange_stage_id(self, cr, uid, ids, stage_id, context=None):
|
||||||
if not stage_id:
|
if not stage_id:
|
||||||
return {'value': {}}
|
return {'value': {}}
|
||||||
stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context)
|
stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context=context)
|
||||||
if not stage.on_change:
|
if not stage.on_change:
|
||||||
return {'value': {}}
|
return {'value': {}}
|
||||||
return {'value': {'probability': stage.probability}}
|
return {'value': {'probability': stage.probability}}
|
||||||
|
@ -358,22 +339,6 @@ class crm_lead(format_address, osv.osv):
|
||||||
section_id = section_ids[0]
|
section_id = section_ids[0]
|
||||||
return {'value': {'section_id': section_id}}
|
return {'value': {'section_id': section_id}}
|
||||||
|
|
||||||
def _check(self, cr, uid, ids=False, context=None):
|
|
||||||
""" Override of the base.stage method.
|
|
||||||
Function called by the scheduler to process cases for date actions
|
|
||||||
Only works on not done and cancelled cases
|
|
||||||
"""
|
|
||||||
cr.execute('select * from crm_case \
|
|
||||||
where (date_action_last<%s or date_action_last is null) \
|
|
||||||
and (date_action_next<=%s or date_action_next is null) \
|
|
||||||
and state not in (\'cancel\',\'done\')',
|
|
||||||
(time.strftime("%Y-%m-%d %H:%M:%S"),
|
|
||||||
time.strftime('%Y-%m-%d %H:%M:%S')))
|
|
||||||
|
|
||||||
ids2 = map(lambda x: x[0], cr.fetchall() or [])
|
|
||||||
cases = self.browse(cr, uid, ids2, context=context)
|
|
||||||
return self._action(cr, uid, cases, False, context=context)
|
|
||||||
|
|
||||||
def stage_find(self, cr, uid, cases, section_id, domain=None, order='sequence', context=None):
|
def stage_find(self, cr, uid, cases, section_id, domain=None, order='sequence', context=None):
|
||||||
""" Override of the base.stage method
|
""" Override of the base.stage method
|
||||||
Parameter of the stage search taken from the lead:
|
Parameter of the stage search taken from the lead:
|
||||||
|
@ -385,16 +350,16 @@ class crm_lead(format_address, osv.osv):
|
||||||
if isinstance(cases, (int, long)):
|
if isinstance(cases, (int, long)):
|
||||||
cases = self.browse(cr, uid, cases, context=context)
|
cases = self.browse(cr, uid, cases, context=context)
|
||||||
# collect all section_ids
|
# collect all section_ids
|
||||||
section_ids = []
|
section_ids = set()
|
||||||
types = ['both']
|
types = ['both']
|
||||||
if not cases:
|
if not cases:
|
||||||
type = context.get('default_type')
|
ctx_type = context.get('default_type')
|
||||||
types += [type]
|
types += [ctx_type]
|
||||||
if section_id:
|
if section_id:
|
||||||
section_ids.append(section_id)
|
section_ids.add(section_id)
|
||||||
for lead in cases:
|
for lead in cases:
|
||||||
if lead.section_id:
|
if lead.section_id:
|
||||||
section_ids.append(lead.section_id.id)
|
section_ids.add(lead.section_id.id)
|
||||||
if lead.type not in types:
|
if lead.type not in types:
|
||||||
types.append(lead.type)
|
types.append(lead.type)
|
||||||
# OR all section_ids and OR with case_default
|
# OR all section_ids and OR with case_default
|
||||||
|
@ -403,7 +368,6 @@ class crm_lead(format_address, osv.osv):
|
||||||
search_domain += [('|')] * len(section_ids)
|
search_domain += [('|')] * len(section_ids)
|
||||||
for section_id in section_ids:
|
for section_id in section_ids:
|
||||||
search_domain.append(('section_ids', '=', section_id))
|
search_domain.append(('section_ids', '=', section_id))
|
||||||
else:
|
|
||||||
search_domain.append(('case_default', '=', True))
|
search_domain.append(('case_default', '=', True))
|
||||||
# AND with cases types
|
# AND with cases types
|
||||||
search_domain.append(('type', 'in', types))
|
search_domain.append(('type', 'in', types))
|
||||||
|
@ -415,27 +379,29 @@ class crm_lead(format_address, osv.osv):
|
||||||
return stage_ids[0]
|
return stage_ids[0]
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def stage_set(self, cr, uid, ids, stage_id, context=None):
|
|
||||||
""" Set the new stage. Now just writes the stage.
|
|
||||||
TDE TODO: remove me when removing state
|
|
||||||
"""
|
|
||||||
return self.write(cr, uid, ids, {'stage_id': stage_id}, context=context)
|
|
||||||
|
|
||||||
def case_mark_lost(self, cr, uid, ids, context=None):
|
def case_mark_lost(self, cr, uid, ids, context=None):
|
||||||
""" Mark the case as lost: state=cancel and probability=0 """
|
""" Mark the case as lost: state=cancel and probability=0 """
|
||||||
for lead in self.browse(cr, uid, ids):
|
for lead in self.browse(cr, uid, ids):
|
||||||
stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0),('on_change','=',True)], context=context)
|
stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0), ('on_change', '=', True), ('sequence', '>', 1)], context=context)
|
||||||
if stage_id:
|
if stage_id:
|
||||||
self.stage_set(cr, uid, [lead.id], stage_id, context=context)
|
return self.write(cr, uid, [lead.id], {'stage_id': stage_id}, context=context)
|
||||||
return True
|
else:
|
||||||
|
raise osv.except_osv(_('Warning!'),
|
||||||
|
_('To relieve your sales pipe and group all Lost opportunities, configure one of your sales stage as follow:\n'
|
||||||
|
'probability = 0 %, select "Change Probability Automatically".\n'
|
||||||
|
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
||||||
|
|
||||||
def case_mark_won(self, cr, uid, ids, context=None):
|
def case_mark_won(self, cr, uid, ids, context=None):
|
||||||
""" Mark the case as won: state=done and probability=100 """
|
""" Mark the case as won: state=done and probability=100 """
|
||||||
for lead in self.browse(cr, uid, ids):
|
for lead in self.browse(cr, uid, ids):
|
||||||
stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0),('on_change','=',True)], context=context)
|
stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0), ('on_change', '=', True), ('sequence', '>', 1)], context=context)
|
||||||
if stage_id:
|
if stage_id:
|
||||||
self.stage_set(cr, uid, [lead.id], stage_id, context=context)
|
return self.write(cr, uid, [lead.id], {'stage_id': stage_id}, context=context)
|
||||||
return True
|
else:
|
||||||
|
raise osv.except_osv(_('Warning!'),
|
||||||
|
_('To relieve your sales pipe and group all Won opportunities, configure one of your sales stage as follow:\n'
|
||||||
|
'probability = 100 % and select "Change Probability Automatically".\n'
|
||||||
|
'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.'))
|
||||||
|
|
||||||
def case_escalate(self, cr, uid, ids, context=None):
|
def case_escalate(self, cr, uid, ids, context=None):
|
||||||
""" Escalates case to parent level """
|
""" Escalates case to parent level """
|
||||||
|
@ -451,20 +417,20 @@ class crm_lead(format_address, osv.osv):
|
||||||
self.write(cr, uid, [case.id], data, context=context)
|
self.write(cr, uid, [case.id], data, context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_priority(self, cr, uid, ids, priority):
|
def set_priority(self, cr, uid, ids, priority, context=None):
|
||||||
""" Set lead priority
|
""" Set lead priority
|
||||||
"""
|
"""
|
||||||
return self.write(cr, uid, ids, {'priority' : priority})
|
return self.write(cr, uid, ids, {'priority': priority}, context=context)
|
||||||
|
|
||||||
def set_high_priority(self, cr, uid, ids, context=None):
|
def set_high_priority(self, cr, uid, ids, context=None):
|
||||||
""" Set lead priority to high
|
""" Set lead priority to high
|
||||||
"""
|
"""
|
||||||
return self.set_priority(cr, uid, ids, '1')
|
return self.set_priority(cr, uid, ids, '1', context=context)
|
||||||
|
|
||||||
def set_normal_priority(self, cr, uid, ids, context=None):
|
def set_normal_priority(self, cr, uid, ids, context=None):
|
||||||
""" Set lead priority to normal
|
""" Set lead priority to normal
|
||||||
"""
|
"""
|
||||||
return self.set_priority(cr, uid, ids, '3')
|
return self.set_priority(cr, uid, ids, '3', context=context)
|
||||||
|
|
||||||
def _merge_get_result_type(self, cr, uid, opps, context=None):
|
def _merge_get_result_type(self, cr, uid, opps, context=None):
|
||||||
"""
|
"""
|
||||||
|
@ -640,7 +606,8 @@ class crm_lead(format_address, osv.osv):
|
||||||
sequenced_opps = []
|
sequenced_opps = []
|
||||||
for opportunity in opportunities:
|
for opportunity in opportunities:
|
||||||
sequence = -1
|
sequence = -1
|
||||||
if opportunity.stage_id and opportunity.stage_id.state != 'cancel':
|
# TDE: was "if opportunity.stage_id and opportunity.stage_id.state != 'cancel':"
|
||||||
|
if opportunity.probability == 0 and opportunity.stage_id and opportunity.stage_id.sequence != 1 and opportunity.stage_id.fold:
|
||||||
sequence = opportunity.stage_id.sequence
|
sequence = opportunity.stage_id.sequence
|
||||||
sequenced_opps.append(((int(sequence != -1 and opportunity.type == 'opportunity'), sequence, -opportunity.id), opportunity))
|
sequenced_opps.append(((int(sequence != -1 and opportunity.type == 'opportunity'), sequence, -opportunity.id), opportunity))
|
||||||
|
|
||||||
|
@ -701,7 +668,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
'phone': customer and customer.phone or lead.phone,
|
'phone': customer and customer.phone or lead.phone,
|
||||||
}
|
}
|
||||||
if not lead.stage_id or lead.stage_id.type=='lead':
|
if not lead.stage_id or lead.stage_id.type=='lead':
|
||||||
val['stage_id'] = self.stage_find(cr, uid, [lead], section_id, [('state', '=', 'draft'),('type', 'in', ('opportunity','both'))], context=context)
|
val['stage_id'] = self.stage_find(cr, uid, [lead], section_id, [('sequence', '=', '1'), ('type', 'in', ('opportunity','both'))], context=context)
|
||||||
return val
|
return val
|
||||||
|
|
||||||
def convert_opportunity(self, cr, uid, ids, partner_id, user_ids=False, section_id=False, context=None):
|
def convert_opportunity(self, cr, uid, ids, partner_id, user_ids=False, section_id=False, context=None):
|
||||||
|
@ -710,7 +677,8 @@ class crm_lead(format_address, osv.osv):
|
||||||
partner = self.pool.get('res.partner')
|
partner = self.pool.get('res.partner')
|
||||||
customer = partner.browse(cr, uid, partner_id, context=context)
|
customer = partner.browse(cr, uid, partner_id, context=context)
|
||||||
for lead in self.browse(cr, uid, ids, context=context):
|
for lead in self.browse(cr, uid, ids, context=context):
|
||||||
if lead.state in ('done', 'cancel'):
|
# TDE: was if lead.state in ('done', 'cancel'):
|
||||||
|
if (lead.probability == '100') or (lead.probability == '0' and lead.stage_id.sequence != '1'):
|
||||||
continue
|
continue
|
||||||
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context)
|
||||||
self.write(cr, uid, [lead.id], vals, context=context)
|
self.write(cr, uid, [lead.id], vals, context=context)
|
||||||
|
@ -862,9 +830,9 @@ class crm_lead(format_address, osv.osv):
|
||||||
'priority': lead.priority,
|
'priority': lead.priority,
|
||||||
}
|
}
|
||||||
new_id = phonecall.create(cr, uid, vals, context=context)
|
new_id = phonecall.create(cr, uid, vals, context=context)
|
||||||
phonecall.case_open(cr, uid, [new_id], context=context)
|
phonecall.write(cr, uid, [new_id], {'state': 'open'}, context=context)
|
||||||
if action == 'log':
|
if action == 'log':
|
||||||
phonecall.case_close(cr, uid, [new_id], context=context)
|
phonecall.write(cr, uid, [new_id], {'state': 'done'}, context=context)
|
||||||
phonecall_dict[lead.id] = new_id
|
phonecall_dict[lead.id] = new_id
|
||||||
self.schedule_phonecall_send_note(cr, uid, [lead.id], new_id, action, context=context)
|
self.schedule_phonecall_send_note(cr, uid, [lead.id], new_id, action, context=context)
|
||||||
return phonecall_dict
|
return phonecall_dict
|
||||||
|
@ -940,6 +908,10 @@ class crm_lead(format_address, osv.osv):
|
||||||
return super(crm_lead, self).create(cr, uid, vals, context=create_context)
|
return super(crm_lead, self).create(cr, uid, vals, context=create_context)
|
||||||
|
|
||||||
def write(self, cr, uid, ids, vals, context=None):
|
def write(self, cr, uid, ids, vals, context=None):
|
||||||
|
# stage change: update date_last_stage_update
|
||||||
|
if 'stage_id' in vals:
|
||||||
|
vals['date_last_stage_update'] = fields.datetime.now()
|
||||||
|
# stage change with new stage: update probability
|
||||||
if vals.get('stage_id') and not vals.get('probability'):
|
if vals.get('stage_id') and not vals.get('probability'):
|
||||||
onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value']
|
onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value']
|
||||||
vals.update(onchange_stage_values)
|
vals.update(onchange_stage_values)
|
||||||
|
@ -983,10 +955,8 @@ class crm_lead(format_address, osv.osv):
|
||||||
"""
|
"""
|
||||||
if custom_values is None:
|
if custom_values is None:
|
||||||
custom_values = {}
|
custom_values = {}
|
||||||
desc = html2plaintext(msg.get('body')) if msg.get('body') else ''
|
|
||||||
defaults = {
|
defaults = {
|
||||||
'name': msg.get('subject') or _("No Subject"),
|
'name': msg.get('subject') or _("No Subject"),
|
||||||
'description': desc,
|
|
||||||
'email_from': msg.get('from'),
|
'email_from': msg.get('from'),
|
||||||
'email_cc': msg.get('cc'),
|
'email_cc': msg.get('cc'),
|
||||||
'partner_id': msg.get('author_id', False),
|
'partner_id': msg.get('author_id', False),
|
||||||
|
|
|
@ -5,71 +5,57 @@
|
||||||
<!-- Crm stages -->
|
<!-- Crm stages -->
|
||||||
<record model="crm.case.stage" id="stage_lead1">
|
<record model="crm.case.stage" id="stage_lead1">
|
||||||
<field name="name">New</field>
|
<field name="name">New</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field name="state">draft</field>
|
<field name="probability">0</field>
|
||||||
<field eval="0" name="probability"/>
|
<field name="on_change">1</field>
|
||||||
<field eval="10" name="sequence"/>
|
<field name="sequence">1</field>
|
||||||
<field name="type">both</field>
|
<field name="type">both</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead2">
|
<record model="crm.case.stage" id="stage_lead2">
|
||||||
<field name="name">Opportunity</field>
|
|
||||||
<field eval="1" name="case_default"/>
|
|
||||||
<field name="state">open</field>
|
|
||||||
<field eval="20" name="probability"/>
|
|
||||||
<field eval="20" name="sequence"/>
|
|
||||||
<field name="type">lead</field>
|
|
||||||
</record>
|
|
||||||
<record model="crm.case.stage" id="stage_lead7">
|
|
||||||
<field name="name">Dead</field>
|
<field name="name">Dead</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field eval="False" name="fold"/>
|
<field name="probability">0</field>
|
||||||
<field name="state">cancel</field>
|
<field name="on_change">1</field>
|
||||||
<field eval="0" name="probability"/>
|
<field name="sequence">30</field>
|
||||||
<field eval="30" name="sequence"/>
|
|
||||||
<field name="type">lead</field>
|
<field name="type">lead</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead3">
|
<record model="crm.case.stage" id="stage_lead3">
|
||||||
<field name="name">Qualification</field>
|
<field name="name">Qualification</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field name="state">open</field>
|
<field name="probability">20</field>
|
||||||
<field eval="20" name="probability"/>
|
<field name="on_change">1</field>
|
||||||
<field eval="100" name="sequence"/>
|
<field name="sequence">40</field>
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead4">
|
<record model="crm.case.stage" id="stage_lead4">
|
||||||
<field name="name">Proposition</field>
|
<field name="name">Proposition</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field name="state">open</field>
|
<field name="probability">40</field>
|
||||||
<field eval="40" name="probability"/>
|
<field name="sequence">50</field>
|
||||||
<field eval="110" name="sequence"/>
|
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead5">
|
<record model="crm.case.stage" id="stage_lead5">
|
||||||
<field name="name">Negotiation</field>
|
<field name="name">Negotiation</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field name="state">open</field>
|
<field name="probability">60</field>
|
||||||
<field eval="60" name="probability"/>
|
<field name="sequence">60</field>
|
||||||
<field eval="120" name="sequence"/>
|
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead6">
|
<record model="crm.case.stage" id="stage_lead6">
|
||||||
<field name="name">Won</field>
|
<field name="name">Won</field>
|
||||||
<field eval="True" name="fold"/>
|
<field name="case_default">1</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="probability">100</field>
|
||||||
<field name="state">done</field>
|
<field name="on_change">1</field>
|
||||||
<field eval="100" name="probability"/>
|
<field name="sequence">70</field>
|
||||||
<field eval="130" name="sequence"/>
|
|
||||||
<field eval="1" name="on_change"/>
|
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.case.stage" id="stage_lead8">
|
<record model="crm.case.stage" id="stage_lead7">
|
||||||
<field name="name">Lost</field>
|
<field name="name">Lost</field>
|
||||||
<field eval="1" name="case_default"/>
|
<field name="case_default">1</field>
|
||||||
<field eval="True" name="fold"/>
|
<field name="fold">1</field>
|
||||||
<field eval="1" name="on_change"/>
|
<field name="probability">0</field>
|
||||||
<field name="state">cancel</field>
|
<field name="on_change">1</field>
|
||||||
<field eval="0" name="probability"/>
|
<field name="sequence">80</field>
|
||||||
<field eval="140" name="sequence"/>
|
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -77,7 +63,7 @@
|
||||||
<field name="stage_ids" eval="[ (4, ref('stage_lead1')), (4, ref('stage_lead2')),
|
<field name="stage_ids" eval="[ (4, ref('stage_lead1')), (4, ref('stage_lead2')),
|
||||||
(4, ref('stage_lead3')), (4, ref('stage_lead4')),
|
(4, ref('stage_lead3')), (4, ref('stage_lead4')),
|
||||||
(4, ref('stage_lead5')), (4, ref('stage_lead6')),
|
(4, ref('stage_lead5')), (4, ref('stage_lead6')),
|
||||||
(4, ref('stage_lead7')), (4, ref('stage_lead8'))]"/>
|
(4, ref('stage_lead7'))]"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Crm campain -->
|
<!-- Crm campain -->
|
||||||
|
@ -161,7 +147,7 @@
|
||||||
<field name="name">Lead Created</field>
|
<field name="name">Lead Created</field>
|
||||||
<field name="res_model">crm.lead</field>
|
<field name="res_model">crm.lead</field>
|
||||||
<field name="default" eval="False"/>
|
<field name="default" eval="False"/>
|
||||||
<field name="description">Opportunity created</field>
|
<field name="description">Lead created</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="mt_lead_stage" model="mail.message.subtype">
|
<record id="mt_lead_stage" model="mail.message.subtype">
|
||||||
<field name="name">Stage Changed</field>
|
<field name="name">Stage Changed</field>
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
<record id="crm_case_1" model="crm.lead">
|
<record id="crm_case_1" model="crm.lead">
|
||||||
<field name="type">lead</field>
|
<field name="type">lead</field>
|
||||||
<field name="name">Plan to Attend a Training</field>
|
<field name="name">Plan to Attend a Training</field>
|
||||||
<field name="contact_name">Jason Dunagan</field>
|
<field name="contact_name">Jacques Dunagan</field>
|
||||||
<field name="partner_name">Le Club SARL</field>
|
<field name="partner_name">Le Club SARL</field>
|
||||||
<field name="email_from">jason@leclub.fr</field>
|
<field name="email_from">jdunagan@leclub.fr</field>
|
||||||
<field name="partner_id" ref=""/>
|
<field name="partner_id" ref=""/>
|
||||||
<field name="function">Training Manager</field>
|
<field name="function">Training Manager</field>
|
||||||
<field name="street">73, rue Léon Dierx</field>
|
<field name="street">73, rue Léon Dierx</field>
|
||||||
|
@ -20,14 +20,25 @@
|
||||||
<field name="categ_ids" eval="[(6, 0, [categ_oppor6])]"/>
|
<field name="categ_ids" eval="[(6, 0, [categ_oppor6])]"/>
|
||||||
<field name="channel_id" ref="crm_case_channel_email"/>
|
<field name="channel_id" ref="crm_case_channel_email"/>
|
||||||
<field name="priority">1</field>
|
<field name="priority">1</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field name="description">Hello,
|
<field name="description">Hello,
|
||||||
I am Jason from Le Club SARL.
|
I am Jacques from Le Club SARL.
|
||||||
I am intertested to attend a training organized in your company.
|
I am interested to attend a training organized in your company.
|
||||||
Can you send me the details ?</field>
|
Could you please send me the details ?</field>
|
||||||
<field eval="1" name="active"/>
|
</record>
|
||||||
|
<record id="crm_case_1" model="crm.lead">
|
||||||
|
<field name="create_date" eval="(DateTime.today() - relativedelta(months=2)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
|
</record>
|
||||||
|
<record id="msg_case1_1" model="mail.message">
|
||||||
|
<field name="subject">Inquiry</field>
|
||||||
|
<field name="model">crm.lead</field>
|
||||||
|
<field name="res_id" ref="crm_case_1"/>
|
||||||
|
<field name="body"><![CDATA[<p>Hello,<br />
|
||||||
|
I am Jacques from Le Club SARL. I am interested to attend a training organized in your company.<br />
|
||||||
|
Can you send me the details ?</p>]]></field>
|
||||||
|
<field name="type">email</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_2" model="crm.lead">
|
<record id="crm_case_2" model="crm.lead">
|
||||||
|
@ -44,10 +55,20 @@ Can you send me the details ?</field>
|
||||||
<field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
|
<field name="categ_ids" eval="[(6, 0, [categ_oppor2])]"/>
|
||||||
<field name="channel_id" ref="crm_case_channel_website"/>
|
<field name="channel_id" ref="crm_case_channel_website"/>
|
||||||
<field name="priority">4</field>
|
<field name="priority">4</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
</record>
|
||||||
|
<record id="crm_case_2" model="crm.lead">
|
||||||
|
<field name="create_date" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
|
</record>
|
||||||
|
<record id="msg_case2_1" model="mail.message">
|
||||||
|
<field name="subject">Need Details</field>
|
||||||
|
<field name="model">crm.lead</field>
|
||||||
|
<field name="author_id" ref="base.partner_demo"/>
|
||||||
|
<field name="res_id" ref="crm_case_2"/>
|
||||||
|
<field name="body">Want to know features and benefits to use the new software.</field>
|
||||||
|
<field name="type">comment</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_3" model="crm.lead">
|
<record id="crm_case_3" model="crm.lead">
|
||||||
|
@ -65,8 +86,10 @@ Can you send me the details ?</field>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="stage_lead2"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
</record>
|
||||||
|
<record id="crm_case_2" model="crm.lead">
|
||||||
|
<field name="create_date" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_4" model="crm.lead">
|
<record id="crm_case_4" model="crm.lead">
|
||||||
|
@ -82,10 +105,12 @@ Can you send me the details ?</field>
|
||||||
<field name="categ_ids" eval="[(6, 0, [categ_oppor5])]"/>
|
<field name="categ_ids" eval="[(6, 0, [categ_oppor5])]"/>
|
||||||
<field name="channel_id" ref=""/>
|
<field name="channel_id" ref=""/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref=""/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="stage_lead7"/>
|
<field name="stage_id" ref="stage_lead6"/>
|
||||||
<field eval="1" name="active"/>
|
</record>
|
||||||
|
<record id="crm_case_2" model="crm.lead">
|
||||||
|
<field name="create_date" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_5" model="crm.lead">
|
<record id="crm_case_5" model="crm.lead">
|
||||||
|
@ -105,8 +130,8 @@ Can you send me the details ?</field>
|
||||||
<field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
|
<field name="categ_ids" eval="[(6, 0, [categ_oppor1])]"/>
|
||||||
<field name="channel_id" ref="crm_case_channel_website"/>
|
<field name="channel_id" ref="crm_case_channel_website"/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref=""/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field name="description">Hi,
|
<field name="description">Hi,
|
||||||
Can you send me a quotation for 20 computers with speakers?
|
Can you send me a quotation for 20 computers with speakers?
|
||||||
|
@ -116,7 +141,6 @@ Purchase Manager
|
||||||
Stonage IT,
|
Stonage IT,
|
||||||
Franklinville
|
Franklinville
|
||||||
Contact: +1 813 494 5005</field>
|
Contact: +1 813 494 5005</field>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_6" model="crm.lead">
|
<record id="crm_case_6" model="crm.lead">
|
||||||
|
@ -134,9 +158,8 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref=""/>
|
<field name="channel_id" ref=""/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref=""/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_7" model="crm.lead">
|
<record id="crm_case_7" model="crm.lead">
|
||||||
|
@ -153,9 +176,8 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref=""/>
|
<field name="channel_id" ref=""/>
|
||||||
<field name="priority">5</field>
|
<field name="priority">5</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead7"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_8" model="crm.lead">
|
<record id="crm_case_8" model="crm.lead">
|
||||||
|
@ -173,9 +195,8 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref=""/>
|
<field name="channel_id" ref=""/>
|
||||||
<field name="priority">4</field>
|
<field name="priority">4</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="stage_lead7"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_9" model="crm.lead">
|
<record id="crm_case_9" model="crm.lead">
|
||||||
|
@ -193,12 +214,8 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_phone"/>
|
<field name="channel_id" ref="crm_case_channel_phone"/>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
|
||||||
<record id="crm_case_9" model="crm.lead">
|
|
||||||
<field name="create_date" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_10" model="crm.lead">
|
<record id="crm_case_10" model="crm.lead">
|
||||||
|
@ -215,14 +232,13 @@ Contact: +1 813 494 5005</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_email"/>
|
<field name="channel_id" ref="crm_case_channel_email"/>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref=""/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field name="description">Hi,
|
<field name="description">Hi,
|
||||||
I would like to know more about specification and cost of laptops of your company.
|
I would like to know more about specification and cost of laptops of your company.
|
||||||
|
|
||||||
Thanks,
|
Thanks,
|
||||||
Andrew</field>
|
Andrew</field>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_11" model="crm.lead">
|
<record id="crm_case_11" model="crm.lead">
|
||||||
|
@ -239,9 +255,8 @@ Andrew</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_direct"/>
|
<field name="channel_id" ref="crm_case_channel_direct"/>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref=""/>
|
||||||
<field name="stage_id" ref="stage_lead1"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_12" model="crm.lead">
|
<record id="crm_case_12" model="crm.lead">
|
||||||
|
@ -258,15 +273,23 @@ Andrew</field>
|
||||||
<field name="channel_id" ref="crm_case_channel_website"/>
|
<field name="channel_id" ref="crm_case_channel_website"/>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref=""/>
|
||||||
<field name="stage_id" ref="stage_lead2"/>
|
<field name="stage_id" ref="stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
<!-- Call Function to Cancel the leads (set as Dead) -->
|
||||||
|
<function model="crm.lead" name="write"
|
||||||
|
eval="[ ref('crm_case_7'), ref('crm_case_8'),
|
||||||
|
ref('crm_case_9'), ref('crm_case_10'),
|
||||||
|
ref('crm_case_11'), ref('crm_case_12')],
|
||||||
|
{'stage_id': ref('stage_lead2')},
|
||||||
|
{'install_mode': True}"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Call Function to set the leads as Unread -->
|
<!-- Call Function to set the leads as Unread -->
|
||||||
<function model="crm.lead" name="message_mark_as_unread"
|
<function model="crm.lead" name="message_mark_as_unread"
|
||||||
eval="[ ref('crm_case_1'), ref('crm_case_2'),
|
eval="[ ref('crm_case_1'), ref('crm_case_2'),
|
||||||
ref('crm_case_5'), ref('crm_case_11')], {}"
|
ref('crm_case_5'), ref('crm_case_6')], {}"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- Demo Opportunities -->
|
<!-- Demo Opportunities -->
|
||||||
|
@ -289,8 +312,7 @@ Andrew</field>
|
||||||
<field name="title_action">Meeting for pricing information.</field>
|
<field name="title_action">Meeting for pricing information.</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
<field name="stage_id" ref="crm.stage_lead1"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_14" model="crm.lead">
|
<record id="crm_case_14" model="crm.lead">
|
||||||
|
@ -316,7 +338,6 @@ Andrew</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_15" model="crm.lead">
|
<record id="crm_case_15" model="crm.lead">
|
||||||
|
@ -337,10 +358,12 @@ Andrew</field>
|
||||||
<field name="title_action">Call to ask system requirement</field>
|
<field name="title_action">Call to ask system requirement</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=2)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=2)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="crm_case_15" model="crm.lead">
|
||||||
|
<field name="message_follower_ids" eval="[(3, ref('base.partner_root')), (4, ref('base.partner_demo'))]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_16" model="crm.lead">
|
<record id="crm_case_16" model="crm.lead">
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
|
@ -362,8 +385,7 @@ Andrew</field>
|
||||||
<field name="title_action">Convert to quote</field>
|
<field name="title_action">Convert to quote</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead3"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -388,10 +410,12 @@ Andrew</field>
|
||||||
<field name="title_action">Send price list regarding our interventions</field>
|
<field name="title_action">Send price list regarding our interventions</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="crm_case_17" model="crm.lead">
|
||||||
|
<field name="message_follower_ids" eval="[(3, ref('base.partner_root')), (4, ref('base.partner_demo'))]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_18" model="crm.lead">
|
<record id="crm_case_18" model="crm.lead">
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
|
@ -413,9 +437,12 @@ Andrew</field>
|
||||||
<field name="title_action">Call to define real needs about training</field>
|
<field name="title_action">Call to define real needs about training</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead3"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
<field eval="1" name="active"/>
|
||||||
</record>
|
</record>
|
||||||
|
<record id="crm_case_18" model="crm.lead">
|
||||||
|
<field name="message_follower_ids" eval="[(4, ref('base.partner_demo'))]"/>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_19" model="crm.lead">
|
<record id="crm_case_19" model="crm.lead">
|
||||||
<field name="type">opportunity</field>
|
<field name="type">opportunity</field>
|
||||||
|
@ -437,8 +464,7 @@ Andrew</field>
|
||||||
<field name="title_action">Ask for the good receprion of the proposition</field>
|
<field name="title_action">Ask for the good receprion of the proposition</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=3)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=3)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -455,8 +481,7 @@ Andrew</field>
|
||||||
<field name="priority">2</field>
|
<field name="priority">2</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead1"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_21" model="crm.lead">
|
<record id="crm_case_21" model="crm.lead">
|
||||||
|
@ -470,8 +495,7 @@ Andrew</field>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead4"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(months=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -489,8 +513,7 @@ Andrew</field>
|
||||||
<field name="priority">3</field>
|
<field name="priority">3</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead8"/>
|
<field name="stage_id" ref="crm.stage_lead5"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_23" model="crm.lead">
|
<record id="crm_case_23" model="crm.lead">
|
||||||
|
@ -505,8 +528,7 @@ Andrew</field>
|
||||||
<field name="priority">5</field>
|
<field name="priority">5</field>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead5"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -525,8 +547,7 @@ Andrew</field>
|
||||||
<field eval="time.strftime('%Y-%m-6')" name="date_deadline"/>
|
<field eval="time.strftime('%Y-%m-6')" name="date_deadline"/>
|
||||||
<field name="section_id" ref="section_sales_department"/>
|
<field name="section_id" ref="section_sales_department"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead5"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(month=1)).strftime('%Y-%m-%d %H:%M')"/>
|
<field name="date_closed" eval="(DateTime.today() - relativedelta(month=1)).strftime('%Y-%m-%d %H:%M')"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
@ -549,8 +570,7 @@ Andrew</field>
|
||||||
<field name="title_action">Conf call with technical service</field>
|
<field name="title_action">Conf call with technical service</field>
|
||||||
<field name="section_id" ref="crm_case_section_1"/>
|
<field name="section_id" ref="crm_case_section_1"/>
|
||||||
<field name="user_id" ref="base.user_root"/>
|
<field name="user_id" ref="base.user_root"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead4"/>
|
<field name="stage_id" ref="crm.stage_lead5"/>
|
||||||
<field eval="1" name="active"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="crm_case_26" model="crm.lead">
|
<record id="crm_case_26" model="crm.lead">
|
||||||
|
@ -574,21 +594,10 @@ Andrew</field>
|
||||||
<field name="title_action">Send Catalogue by Email</field>
|
<field name="title_action">Send Catalogue by Email</field>
|
||||||
<field name="section_id" ref="crm_case_section_2"/>
|
<field name="section_id" ref="crm_case_section_2"/>
|
||||||
<field name="user_id" ref="base.user_demo"/>
|
<field name="user_id" ref="base.user_demo"/>
|
||||||
<field name="stage_id" ref="crm.stage_lead6"/>
|
<field name="stage_id" ref="crm.stage_lead5"/>
|
||||||
<field eval="1" name="active"/>
|
<!-- <field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/> -->
|
||||||
<field name="date_closed" eval="(DateTime.today() - relativedelta(hours=1)).strftime('%Y-%m-%d %H:%M')"/>
|
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<!-- Unsubscribe Admin from case15, subscribe Demo -->
|
|
||||||
<record id="crm_case_15" model="crm.lead">
|
|
||||||
<field name="message_follower_ids" eval="[(3, ref('base.partner_root')), (4, ref('base.partner_demo'))]"/>
|
|
||||||
</record>
|
|
||||||
<record id="crm_case_17" model="crm.lead">
|
|
||||||
<field name="message_follower_ids" eval="[(3, ref('base.partner_root')), (4, ref('base.partner_demo'))]"/>
|
|
||||||
</record>
|
|
||||||
<record id="crm_case_18" model="crm.lead">
|
|
||||||
<field name="message_follower_ids" eval="[(4, ref('base.partner_demo'))]"/>
|
|
||||||
</record>
|
|
||||||
<!-- Some messages linked to the previous opportunities -->
|
<!-- Some messages linked to the previous opportunities -->
|
||||||
<record id="msg_case15_attach1" model="ir.attachment">
|
<record id="msg_case15_attach1" model="ir.attachment">
|
||||||
<field name="datas">bWlncmF0aW9uIHRlc3Q=</field>
|
<field name="datas">bWlncmF0aW9uIHRlc3Q=</field>
|
||||||
|
@ -682,26 +691,9 @@ Andrew</field>
|
||||||
<field name="parent_id" ref="msg_case18_1"/>
|
<field name="parent_id" ref="msg_case18_1"/>
|
||||||
<field name="author_id" ref="base.partner_demo"/>
|
<field name="author_id" ref="base.partner_demo"/>
|
||||||
</record>
|
</record>
|
||||||
<record id="msg_case1_1" model="mail.message">
|
|
||||||
<field name="subject">Inquiry</field>
|
|
||||||
<field name="model">crm.lead</field>
|
|
||||||
<field name="res_id" ref="crm_case_1"/>
|
|
||||||
<field name="body"><![CDATA[<p>Hello,<br />
|
|
||||||
I am Jason from Le Club SARL. I am interested to attend a training organized in your company.<br />
|
|
||||||
Can you send me the details ?</p>]]></field>
|
|
||||||
<field name="type">email</field>
|
|
||||||
</record>
|
|
||||||
<record id="msg_case2_1" model="mail.message">
|
|
||||||
<field name="subject">Need Details</field>
|
|
||||||
<field name="model">crm.lead</field>
|
|
||||||
<field name="res_id" ref="crm_case_2"/>
|
|
||||||
<field name="body">Want to know features and benefits to use the new software.</field>
|
|
||||||
<field name="type">comment</field>
|
|
||||||
</record>
|
|
||||||
<function model="mail.message" name="set_message_starred"
|
<function model="mail.message" name="set_message_starred"
|
||||||
eval="[ ref('msg_case18_1'), ref('msg_case18_2')], True, {}"
|
eval="[ ref('msg_case18_1'), ref('msg_case18_2')], True, {}"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -12,9 +12,10 @@
|
||||||
<field name="model">crm.case.stage</field>
|
<field name="model">crm.case.stage</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Stage Search">
|
<search string="Stage Search">
|
||||||
<field name="name" string="Stage Name"/>
|
<field name="name"/>
|
||||||
<field name="state"/>
|
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
|
<field name="sequence"/>
|
||||||
|
<field name="probability"/>
|
||||||
</search>
|
</search>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -94,7 +95,8 @@
|
||||||
<form string="Leads Form" version="7.0">
|
<form string="Leads Form" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action"
|
<button name="%(crm.action_crm_lead2opportunity_partner)d" string="Convert to Opportunity" type="action"
|
||||||
states="draft,open,pending" help="Convert to Opportunity" class="oe_highlight"/>
|
attrs="{'invisible': [('probability', '=', 100)]}"
|
||||||
|
help="Convert to Opportunity" class="oe_highlight"/>
|
||||||
<field name="stage_id" widget="statusbar" clickable="True"
|
<field name="stage_id" widget="statusbar" clickable="True"
|
||||||
domain="['&', '|', ('case_default', '=', True), ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"
|
domain="['&', '|', ('case_default', '=', True), ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"
|
||||||
on_change="onchange_stage_id(stage_id)"/>
|
on_change="onchange_stage_id(stage_id)"/>
|
||||||
|
@ -140,12 +142,6 @@
|
||||||
<field name="phone"/>
|
<field name="phone"/>
|
||||||
<field name="mobile"/>
|
<field name="mobile"/>
|
||||||
<field name="fax"/>
|
<field name="fax"/>
|
||||||
<!--
|
|
||||||
This should be integrated in Open Chatter
|
|
||||||
<button string="Mail"
|
|
||||||
name="%(mail.action_email_compose_message_wizard)d"
|
|
||||||
icon="terp-mail-message-new" type="action" colspan="1"/>
|
|
||||||
-->
|
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="user_id" on_change="on_change_user(user_id, context)"
|
<field name="user_id" on_change="on_change_user(user_id, context)"
|
||||||
|
@ -155,7 +151,7 @@
|
||||||
<field name="section_id"/>
|
<field name="section_id"/>
|
||||||
<button name="case_escalate" string="Escalate"
|
<button name="case_escalate" string="Escalate"
|
||||||
type="object" class="oe_link"
|
type="object" class="oe_link"
|
||||||
attrs="{'invisible': ['|', ('section_id','=',False), ('state', 'not in', ['draft','open','pending'])]}"/>
|
attrs="{'invisible': ['|', ('section_id','=',False), ('probability', '=', 100)]}"/>
|
||||||
</div>
|
</div>
|
||||||
<field name="type" invisible="1"/>
|
<field name="type" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
|
@ -173,20 +169,24 @@
|
||||||
<field name="description"/>
|
<field name="description"/>
|
||||||
</page>
|
</page>
|
||||||
<page string="Extra Info">
|
<page string="Extra Info">
|
||||||
<group>
|
|
||||||
<group string="Categorization" groups="base.group_multi_company,base.group_no_one" name="categorization">
|
<group string="Categorization" groups="base.group_multi_company,base.group_no_one" name="categorization">
|
||||||
<field name="company_id"
|
<field name="company_id"
|
||||||
groups="base.group_multi_company"
|
groups="base.group_multi_company"
|
||||||
widget="selection" colspan="2"/>
|
widget="selection" colspan="2"/>
|
||||||
<field name="state" groups="base.group_no_one"/>
|
|
||||||
</group>
|
</group>
|
||||||
<group string="Mailings">
|
<group string="Mailings">
|
||||||
<field name="opt_out"/>
|
<field name="opt_out"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Misc">
|
<group string="Misc">
|
||||||
|
<group>
|
||||||
|
<field name="probability" groups="base.group_no_one"/>
|
||||||
<field name="active"/>
|
<field name="active"/>
|
||||||
<field name="referred"/>
|
<field name="referred"/>
|
||||||
</group>
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="date_open" groups="base.group_no_one"/>
|
||||||
|
<field name="date_closed" groups="base.group_no_one"/>
|
||||||
|
</group>
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
|
@ -216,7 +216,7 @@
|
||||||
<field name="name">Leads</field>
|
<field name="name">Leads</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Leads" fonts="bold:message_unread==True" colors="grey:state in ('cancel', 'done')">
|
<tree string="Leads" fonts="bold:message_unread==True" colors="grey:probability == 100">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
|
@ -228,7 +228,7 @@
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="partner_id" invisible="1"/>
|
<field name="partner_id" invisible="1"/>
|
||||||
<field name="section_id" invisible="context.get('invisible_section', True)" groups="base.group_multi_salesteams"/>
|
<field name="section_id" invisible="context.get('invisible_section', True)" groups="base.group_multi_salesteams"/>
|
||||||
<field name="state" invisible="1"/>
|
<field name="probability" invisible="1"/>
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
<field name="referred" invisible="1"/>
|
<field name="referred" invisible="1"/>
|
||||||
<field name="channel_id" invisible="1"/>
|
<field name="channel_id" invisible="1"/>
|
||||||
|
@ -258,7 +258,6 @@
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<kanban default_group_by="stage_id">
|
<kanban default_group_by="stage_id">
|
||||||
<field name="state" groups="base.group_no_one"/>
|
|
||||||
<field name="stage_id"/>
|
<field name="stage_id"/>
|
||||||
<field name="color"/>
|
<field name="color"/>
|
||||||
<field name="priority"/>
|
<field name="priority"/>
|
||||||
|
@ -331,16 +330,17 @@
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="country_id" context="{'invisible_country': False}"/>
|
<field name="country_id" context="{'invisible_country': False}"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="Open" name="open" domain="[('state','!=','cancel')]" help="Open Leads"/>
|
<filter string="Unassigned" name="unassigned"
|
||||||
<filter string="Dead" name="dead" domain="[('state','=','cancel')]"/>
|
domain="[('user_id','=', False)]"
|
||||||
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
|
help="No salesperson"/>
|
||||||
<filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]" help="Unread messages"/>
|
|
||||||
<filter string="Assigned to Me"
|
<filter string="Assigned to Me"
|
||||||
domain="[('user_id','=',uid)]" context="{'invisible_section': False}"
|
domain="[('user_id','=',uid)]" context="{'invisible_section': False}"
|
||||||
help="Leads that are assigned to me"/>
|
help="Leads that are assigned to me"/>
|
||||||
<filter string="Assigned to My Team(s)"
|
<filter string="Assigned to My Team(s)" groups="base.group_multi_salesteams"
|
||||||
domain="[('section_id.member_ids', 'in', [uid])]" context="{'invisible_section': False}"
|
domain="[('section_id.member_ids', 'in', [uid])]" context="{'invisible_section': False}"
|
||||||
help="Leads that are assigned to any sales teams I am member of" groups="base.group_multi_salesteams"/>
|
help="Leads that are assigned to any sales teams I am member of"/>
|
||||||
|
<filter string="Dead" name="dead"
|
||||||
|
domain="[('probability', '=', '0'), ('stage_id.sequence', '!=', 1)]"/>
|
||||||
<separator />
|
<separator />
|
||||||
<filter string="Available for mass mailing"
|
<filter string="Available for mass mailing"
|
||||||
name='not_opt_out' domain="[('opt_out', '=', False)]"
|
name='not_opt_out' domain="[('opt_out', '=', False)]"
|
||||||
|
@ -378,20 +378,19 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Opportunities" version="7.0">
|
<form string="Opportunities" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="case_mark_won" string="Mark Won" type="object"
|
<button name="case_mark_won" string="Mark Won" type="object" class="oe_highlight"
|
||||||
states="draft,open,pending" class="oe_highlight"/>
|
attrs="{'invisible': [('probability', '=', 100)]}"/>
|
||||||
<button name="case_mark_lost" string="Mark Lost" type="object"
|
<button name="case_mark_lost" string="Mark Lost" type="object" class="oe_highlight"
|
||||||
states="draft,open" class="oe_highlight"/>
|
attrs="{'invisible': ['|', ('probability', '=', 0), ('probability', '=', 100)]}"/>
|
||||||
<field name="stage_id" widget="statusbar" clickable="True"/>
|
<field name="stage_id" widget="statusbar" clickable="True"
|
||||||
|
domain="['&', ('section_ids', '=', section_id), '|', ('type', '=', type), ('type', '=', 'both')]"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
<div class="oe_right oe_button_box">
|
<div class="oe_right oe_button_box">
|
||||||
<button string="Schedule/Log Call"
|
<button string="Schedule/Log Call" type="action"
|
||||||
name="%(opportunity2phonecall_act)d"
|
name="%(opportunity2phonecall_act)d"/>
|
||||||
type="action"/>
|
<button string="Meeting" type="object"
|
||||||
<button string="Meeting"
|
|
||||||
name="action_makeMeeting"
|
name="action_makeMeeting"
|
||||||
type="object"
|
|
||||||
context="{'search_default_attendee_id': active_id, 'default_attendee_id' : active_id}"/>
|
context="{'search_default_attendee_id': active_id, 'default_attendee_id' : active_id}"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="oe_title">
|
<div class="oe_title">
|
||||||
|
@ -430,7 +429,8 @@
|
||||||
<label for="section_id" groups="base.group_multi_salesteams"/>
|
<label for="section_id" groups="base.group_multi_salesteams"/>
|
||||||
<div groups="base.group_multi_salesteams">
|
<div groups="base.group_multi_salesteams">
|
||||||
<field name="section_id" widget="selection"/>
|
<field name="section_id" widget="selection"/>
|
||||||
<button name="case_escalate" string="Escalate" type="object" class="oe_link" attrs="{'invisible': ['|', ('section_id','=',False), ('state', 'not in', ['draft','open','pending'])]}"/>
|
<button name="case_escalate" string="Escalate" type="object" class="oe_link"
|
||||||
|
attrs="{'invisible': ['|', ('section_id','=',False), ('probability', '=', 100)]}"/>
|
||||||
</div>
|
</div>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
|
@ -481,7 +481,6 @@
|
||||||
<field name="day_open" groups="base.group_no_one"/>
|
<field name="day_open" groups="base.group_no_one"/>
|
||||||
<field name="day_close" groups="base.group_no_one"/>
|
<field name="day_close" groups="base.group_no_one"/>
|
||||||
<field name="referred"/>
|
<field name="referred"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
<field name="type" invisible="1"/>
|
<field name="type" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="References">
|
<group string="References">
|
||||||
|
@ -511,7 +510,7 @@
|
||||||
<field name="name">Opportunities Tree</field>
|
<field name="name">Opportunities Tree</field>
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Opportunities" fonts="bold:message_unread==True" colors="gray:state in ('cancel', 'done');red:date_deadline and (date_deadline < current_date)">
|
<tree string="Opportunities" fonts="bold:message_unread==True" colors="gray:probability == 100;red:date_deadline and (date_deadline < current_date)">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="name" string="Opportunity"/>
|
<field name="name" string="Opportunity"/>
|
||||||
|
@ -529,7 +528,8 @@
|
||||||
<field name="referred" invisible="1"/>
|
<field name="referred" invisible="1"/>
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
<field name="message_unread" invisible="1"/>
|
<field name="message_unread" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
<field name="probability" invisible="1"/>
|
||||||
|
<field name="write_date" invisible="1"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -546,13 +546,17 @@
|
||||||
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
||||||
|
<field name="stage_id" domain="[]"/>
|
||||||
|
<field name="probability"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="New" name="new" domain="[('state','=','draft')]" help="New Opportunities"/>
|
<filter string="New" name="new"
|
||||||
<filter string="In Progress" name="open" domain="[('state','=','open')]" help="Open Opportunities"/>
|
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
|
||||||
<filter string="Won" name="won" domain="[('state','=','done')]"/>
|
<filter string="Won" name="won"
|
||||||
<filter string="Lost" name="lost" domain="[('state','=','cancel')]"/>
|
domain="[('probability', '=', 100), ('stage_id.on_change', '=', 1)]"/>
|
||||||
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
|
<filter string="Lost" name="lost"
|
||||||
<filter string="Unread Messages" name="message_unread" domain="[('message_unread','=',True)]" help="Unread messages"/>
|
domain="[('probability', '=', 0), ('stage_id.sequence', '!=', 1)]"/>
|
||||||
|
<filter string="Unassigned" name="unassigned"
|
||||||
|
domain="[('user_id','=', False)]" help="No salesperson"/>
|
||||||
<filter string="My Opportunities" name="assigned_to_me"
|
<filter string="My Opportunities" name="assigned_to_me"
|
||||||
domain="[('user_id', '=', uid)]" context="{'invisible_section': False}"
|
domain="[('user_id', '=', uid)]" context="{'invisible_section': False}"
|
||||||
help="Opportunities that are assigned to me"/>
|
help="Opportunities that are assigned to me"/>
|
||||||
|
@ -572,6 +576,7 @@
|
||||||
<filter string="Campaign" domain="[]" context="{'group_by':'type_id'}"/>
|
<filter string="Campaign" domain="[]" context="{'group_by':'type_id'}"/>
|
||||||
<filter string="Channel" domain="[]" context="{'group_by':'channel_id'}"/>
|
<filter string="Channel" domain="[]" context="{'group_by':'channel_id'}"/>
|
||||||
<filter string="Creation" domain="[]" context="{'group_by':'create_date'}"/>
|
<filter string="Creation" domain="[]" context="{'group_by':'create_date'}"/>
|
||||||
|
<filter string="Last Update Month" domain="[]" context="{'group_by':'write_date'}"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Display">
|
<group string="Display">
|
||||||
<filter string="Show Sales Team" context="{'invisible_section': False}" domain="[]" help="Show Sales Team" groups="base.group_multi_salesteams"/>
|
<filter string="Show Sales Team" context="{'invisible_section': False}" domain="[]" help="Show Sales Team" groups="base.group_multi_salesteams"/>
|
||||||
|
|
|
@ -19,21 +19,19 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.addons.base_status.base_state import base_state
|
|
||||||
import crm
|
import crm
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
class crm_phonecall(base_state, osv.osv):
|
class crm_phonecall(osv.osv):
|
||||||
""" Model for CRM phonecalls """
|
""" Model for CRM phonecalls """
|
||||||
_name = "crm.phonecall"
|
_name = "crm.phonecall"
|
||||||
_description = "Phonecall"
|
_description = "Phonecall"
|
||||||
_order = "id desc"
|
_order = "id desc"
|
||||||
_inherit = ['mail.thread']
|
_inherit = ['mail.thread']
|
||||||
_columns = {
|
_columns = {
|
||||||
# base_state required fields
|
|
||||||
'date_action_last': fields.datetime('Last Action', readonly=1),
|
'date_action_last': fields.datetime('Last Action', readonly=1),
|
||||||
'date_action_next': fields.datetime('Next Action', readonly=1),
|
'date_action_next': fields.datetime('Next Action', readonly=1),
|
||||||
'create_date': fields.datetime('Creation Date' , readonly=True),
|
'create_date': fields.datetime('Creation Date' , readonly=True),
|
||||||
|
@ -43,22 +41,21 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
'partner_id': fields.many2one('res.partner', 'Contact'),
|
'partner_id': fields.many2one('res.partner', 'Contact'),
|
||||||
'company_id': fields.many2one('res.company', 'Company'),
|
'company_id': fields.many2one('res.company', 'Company'),
|
||||||
'description': fields.text('Description'),
|
'description': fields.text('Description'),
|
||||||
'state': fields.selection([ ('draft', 'Draft'),
|
'state': fields.selection(
|
||||||
('open', 'Confirmed'),
|
[('open', 'Confirmed'),
|
||||||
('pending', 'Not Held'),
|
|
||||||
('cancel', 'Cancelled'),
|
('cancel', 'Cancelled'),
|
||||||
('done', 'Held'),],
|
('pending', 'Pending'),
|
||||||
string='Status', size=16, readonly=True, track_visibility='onchange',
|
('done', 'Held')
|
||||||
help='The status is set to \'Todo\', when a case is created.\
|
], string='Status', readonly=True, track_visibility='onchange',
|
||||||
If the case is in progress the status is set to \'Open\'.\
|
help='The status is set to Confirmed, when a case is created.\n'
|
||||||
When the call is over, the status is set to \'Held\'.\
|
'When the call is over, the status is set to Held.\n'
|
||||||
If the call needs to be done then the status is set to \'Not Held\'.'),
|
'If the callis not applicable anymore, the status can be set to Cancelled.'),
|
||||||
'email_from': fields.char('Email', size=128, help="These people will receive email."),
|
'email_from': fields.char('Email', size=128, help="These people will receive email."),
|
||||||
'date_open': fields.datetime('Opened', readonly=True),
|
'date_open': fields.datetime('Opened', readonly=True),
|
||||||
# phonecall fields
|
# phonecall fields
|
||||||
'name': fields.char('Call Summary', size=64, required=True),
|
'name': fields.char('Call Summary', size=64, required=True),
|
||||||
'active': fields.boolean('Active', required=False),
|
'active': fields.boolean('Active', required=False),
|
||||||
'duration': fields.float('Duration', help="Duration in Minutes"),
|
'duration': fields.float('Duration', help='Duration in minutes and seconds.'),
|
||||||
'categ_id': fields.many2one('crm.case.categ', 'Category', \
|
'categ_id': fields.many2one('crm.case.categ', 'Category', \
|
||||||
domain="['|',('section_id','=',section_id),('section_id','=',False),\
|
domain="['|',('section_id','=',section_id),('section_id','=',False),\
|
||||||
('object_id.model', '=', 'crm.phonecall')]"),
|
('object_id.model', '=', 'crm.phonecall')]"),
|
||||||
|
@ -71,7 +68,7 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
def _get_default_state(self, cr, uid, context=None):
|
def _get_default_state(self, cr, uid, context=None):
|
||||||
if context and context.get('default_state', False):
|
if context and context.get('default_state'):
|
||||||
return context.get('default_state')
|
return context.get('default_state')
|
||||||
return 'open'
|
return 'open'
|
||||||
|
|
||||||
|
@ -83,25 +80,34 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
'active': 1
|
'active': 1
|
||||||
}
|
}
|
||||||
|
|
||||||
def case_close(self, cr, uid, ids, context=None):
|
def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
|
||||||
""" Overrides close for crm_case for setting duration """
|
values = {}
|
||||||
res = True
|
if partner_id:
|
||||||
for phone in self.browse(cr, uid, ids, context=context):
|
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||||
phone_id = phone.id
|
values = {
|
||||||
data = {}
|
'partner_phone': partner.phone,
|
||||||
if phone.duration <=0:
|
'partner_mobile': partner.mobile,
|
||||||
duration = datetime.now() - datetime.strptime(phone.date, DEFAULT_SERVER_DATETIME_FORMAT)
|
}
|
||||||
data['duration'] = duration.seconds/float(60)
|
return {'value': values}
|
||||||
res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context=context)
|
|
||||||
self.write(cr, uid, [phone_id], data, context=context)
|
|
||||||
return res
|
|
||||||
|
|
||||||
def case_reset(self, cr, uid, ids, context=None):
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
"""Resets case as Todo
|
""" Override to add case management: open/close dates """
|
||||||
"""
|
if values.get('state'):
|
||||||
res = super(crm_phonecall, self).case_reset(cr, uid, ids, context)
|
if values.get('state') == 'done':
|
||||||
self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'}, context=context)
|
values['date_closed'] = fields.datetime.now()
|
||||||
return res
|
self.compute_duration(cr, uid, ids, context=context)
|
||||||
|
elif values.get('state') == 'open':
|
||||||
|
values['date_open'] = fields.datetime.now()
|
||||||
|
values['duration'] = 0.0
|
||||||
|
return super(crm_phonecall, self).write(cr, uid, ids, values, context=context)
|
||||||
|
|
||||||
|
def compute_duration(self, cr, uid, ids, context=None):
|
||||||
|
for phonecall in self.browse(cr, uid, ids, context=context):
|
||||||
|
if phonecall.duration <= 0:
|
||||||
|
duration = datetime.now() - datetime.strptime(phonecall.date, DEFAULT_SERVER_DATETIME_FORMAT)
|
||||||
|
values = {'duration': duration.seconds/float(60)}
|
||||||
|
self.write(cr, uid, [phonecall.id], values, context=context)
|
||||||
|
return True
|
||||||
|
|
||||||
def schedule_another_phonecall(self, cr, uid, ids, schedule_time, call_summary, \
|
def schedule_another_phonecall(self, cr, uid, ids, schedule_time, call_summary, \
|
||||||
user_id=False, section_id=False, categ_id=False, action='schedule', context=None):
|
user_id=False, section_id=False, categ_id=False, action='schedule', context=None):
|
||||||
|
@ -135,7 +141,7 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
}
|
}
|
||||||
new_id = self.create(cr, uid, vals, context=context)
|
new_id = self.create(cr, uid, vals, context=context)
|
||||||
if action == 'log':
|
if action == 'log':
|
||||||
self.case_close(cr, uid, [new_id])
|
self.write(cr, uid, [new_id], {'state': 'done'}, context=context)
|
||||||
phonecall_dict[call.id] = new_id
|
phonecall_dict[call.id] = new_id
|
||||||
return phonecall_dict
|
return phonecall_dict
|
||||||
|
|
||||||
|
@ -245,10 +251,9 @@ class crm_phonecall(base_state, osv.osv):
|
||||||
vals = {
|
vals = {
|
||||||
'partner_id': partner_id,
|
'partner_id': partner_id,
|
||||||
'opportunity_id': opportunity_id,
|
'opportunity_id': opportunity_id,
|
||||||
|
'state': 'done',
|
||||||
}
|
}
|
||||||
self.write(cr, uid, [call.id], vals)
|
self.write(cr, uid, [call.id], vals, context=context)
|
||||||
self.case_close(cr, uid, [call.id])
|
|
||||||
opportunity.case_open(cr, uid, [opportunity_id])
|
|
||||||
opportunity_dict[call.id] = opportunity_id
|
opportunity_dict[call.id] = opportunity_id
|
||||||
return opportunity_dict
|
return opportunity_dict
|
||||||
|
|
||||||
|
|
|
@ -50,14 +50,6 @@
|
||||||
<field name="create_date" invisible="1"/>
|
<field name="create_date" invisible="1"/>
|
||||||
<field name="opportunity_id" invisible="1"/>
|
<field name="opportunity_id" invisible="1"/>
|
||||||
<field name="state"/>
|
<field name="state"/>
|
||||||
<button name="case_open" string="Confirm" type="object"
|
|
||||||
states="draft,pending" icon="gtk-go-forward"/>
|
|
||||||
<button name="case_close" string="Held" type="object"
|
|
||||||
states="open,pending" icon="gtk-jump-to"/>
|
|
||||||
<button name="case_cancel" string="Cancel" type="object"
|
|
||||||
states="draft,open,pending" icon="gtk-cancel"/>
|
|
||||||
<button name="case_reset" string="Reset to Todo" type="object"
|
|
||||||
states="cancel" icon="gtk-convert"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -69,13 +61,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Phone Call" version="7.0">
|
<form string="Phone Call" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="case_close" string="Call Done" type="object" class="oe_highlight"
|
<field name="state" nolabel="1" widget="statusbar" clickable="True"/>
|
||||||
states="open,pending"/>
|
|
||||||
<button name="case_reset" string="Reset to Todo" type="object"
|
|
||||||
states="cancel"/>
|
|
||||||
<button name="case_cancel" string="Cancel Call" type="object"
|
|
||||||
states="draft,open,pending"/>
|
|
||||||
<field name="state" widget="statusbar" nolabel="1" statusbar_visible="open,done"/>
|
|
||||||
</header>
|
</header>
|
||||||
<sheet string="Phone Call">
|
<sheet string="Phone Call">
|
||||||
<div class="oe_right">
|
<div class="oe_right">
|
||||||
|
@ -102,11 +88,13 @@
|
||||||
<group col="4">
|
<group col="4">
|
||||||
<field name="date"/>
|
<field name="date"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
<field name="duration" widget="float_time"/>
|
<label for="duration"/>
|
||||||
|
<div>
|
||||||
|
<field name="duration" widget="float_time" class="oe_inline" style="vertical-align:baseline"/> <b> min(s)</b>
|
||||||
|
</div>
|
||||||
<field name="section_id" colspan="1" widget="selection"
|
<field name="section_id" colspan="1" widget="selection"
|
||||||
groups="base.group_multi_salesteams"/>
|
groups="base.group_multi_salesteams"/>
|
||||||
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
|
<field name="partner_id" on_change="on_change_partner_id(partner_id)"/>
|
||||||
<field name="email_from" invisible="1"/> <!--not needed because of the chatter, thus invisible, but must be in the view as it's returned by onchange_partner_id()-->
|
|
||||||
<field name="categ_id" widget="selection"
|
<field name="categ_id" widget="selection"
|
||||||
domain="[('object_id.model', '=', 'crm.phonecall')]"/>
|
domain="[('object_id.model', '=', 'crm.phonecall')]"/>
|
||||||
<field name="partner_mobile"/>
|
<field name="partner_mobile"/>
|
||||||
|
|
|
@ -80,7 +80,6 @@
|
||||||
<field name="sequence" widget="handle"/>
|
<field name="sequence" widget="handle"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="probability"/>
|
<field name="probability"/>
|
||||||
<field name="state"/>
|
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
|
@ -96,7 +95,6 @@
|
||||||
<form string="Stage" version="7.0">
|
<form string="Stage" version="7.0">
|
||||||
<group col="4">
|
<group col="4">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="state"/>
|
|
||||||
<field name="probability"/>
|
<field name="probability"/>
|
||||||
<field name="type"/>
|
<field name="type"/>
|
||||||
<field name="on_change"/>
|
<field name="on_change"/>
|
||||||
|
|
|
@ -6,6 +6,13 @@ Changelog
|
||||||
`trunk (saas-2)`
|
`trunk (saas-2)`
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
|
- Stage/state update
|
||||||
|
|
||||||
|
- ``crm.phonecall``: removed inheritance towards ``base_state``.
|
||||||
|
- ``crm.lead``: removed ``state`` field. Added ``date_last_stage_update`` field
|
||||||
|
holding last stage_id modification. Updated reports.
|
||||||
|
- ``crm.case.stage``: removed ``state`` field.
|
||||||
|
|
||||||
- ``crm``, ``crm_claim``: removed inheritance from ``base_stage`` class. Missing
|
- ``crm``, ``crm_claim``: removed inheritance from ``base_stage`` class. Missing
|
||||||
methods have been added into ``crm`` and ``crm_claim``. Also removed inheritance
|
methods have been added into ``crm`` and ``crm_claim``. Also removed inheritance
|
||||||
in ``crm_helpdesk`` because it uses states, not stages.
|
in ``crm_helpdesk`` because it uses states, not stages.
|
|
@ -4,6 +4,11 @@ CRM module documentation
|
||||||
CRM documentation topics
|
CRM documentation topics
|
||||||
'''''''''''''''''''''''''
|
'''''''''''''''''''''''''
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
stage_status.rst
|
||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
'''''''''
|
'''''''''
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
.. _stage_status:
|
||||||
|
|
||||||
|
Stage and Status
|
||||||
|
================
|
||||||
|
|
||||||
|
.. versionchanged:: 8.0 saas-2 state/stage cleaning
|
||||||
|
|
||||||
|
Stage
|
||||||
|
+++++
|
||||||
|
|
||||||
|
This revision removed the concept of state on crm.lead objects. The ``state``
|
||||||
|
field has been totally removed and replaced by stages, using ``stage_id``. The
|
||||||
|
following models are impacted:
|
||||||
|
|
||||||
|
- ``crm.lead`` now use only stages. However conventions still exist about
|
||||||
|
'New', 'Won' and 'Lost' stages. Those conventions are:
|
||||||
|
|
||||||
|
- ``new``: ``stage_id and stage_id.sequence = 1``
|
||||||
|
- ``won``: ``stage_id and stage_id.probability = 100 and stage_id.on_change = True``
|
||||||
|
- ``lost``: ``stage_id and stage_id.probability = 0 and stage_id.on_change = True
|
||||||
|
and stage_id.sequence != 1``
|
||||||
|
|
||||||
|
- ``crm.case.stage`` do not have any ``state`` field anymore.
|
||||||
|
- ``crm.lead.report`` do not have any ``state`` field anymore.
|
||||||
|
|
||||||
|
By default a newly created lead is in a new stage. It means that it will
|
||||||
|
fetch the stage having ``sequence = 1``. Stage mangement is done using the
|
||||||
|
kanban view or the clikable statusbar. It is not done using buttons anymore.
|
||||||
|
|
||||||
|
Stage analysis
|
||||||
|
++++++++++++++
|
||||||
|
|
||||||
|
Stage analysis can be performed using the newly introduced ``date_last_stage_update``
|
||||||
|
datetime field. This field is updated everytime ``stage_id`` is updated.
|
||||||
|
|
||||||
|
``crm.lead.report`` model also uses the ``date_last_stage_update`` field.
|
||||||
|
This allows to group and analyse the time spend in the various stages.
|
||||||
|
|
||||||
|
Open / Assignation date
|
||||||
|
+++++++++++++++++++++++
|
||||||
|
|
||||||
|
The ``date_open`` field meaning has been updated. It is now set when the ``user_id``
|
||||||
|
(responsible) is set. It is therefore the assignation date.
|
||||||
|
|
||||||
|
Subtypes
|
||||||
|
++++++++
|
||||||
|
|
||||||
|
The following subtypes are triggered on ``crm.lead``:
|
||||||
|
|
||||||
|
- ``mt_lead_create``: new leads. Condition: ``obj.probability == 0 and obj.stage_id
|
||||||
|
and obj.stage_id.sequence == 1``
|
||||||
|
- ``mt_lead_stage``: stage changed. Condition: ``(obj.stage_id and obj.stage_id.sequence != 1)
|
||||||
|
and obj.probability < 100``
|
||||||
|
- ``mt_lead_won``: lead/oportunity is won. condition: `` obj.probability == 100
|
||||||
|
and obj.stage_id and obj.stage_id.on_change``
|
||||||
|
- ``mt_lead_lost``: lead/opportunity is lost. Condition: ``obj.probability == 0
|
||||||
|
and obj.stage_id and obj.stage_id.sequence != 1'``
|
||||||
|
|
||||||
|
|
||||||
|
Those subtypes are also available on the ``crm.case.section`` model and are used
|
||||||
|
for the auto subscription.
|
File diff suppressed because it is too large
Load Diff
|
@ -7,14 +7,14 @@ msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
"Project-Id-Version: OpenERP Server 6.0dev\n"
|
||||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||||
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
"POT-Creation-Date: 2012-12-21 17:04+0000\n"
|
||||||
"PO-Revision-Date: 2013-07-23 03:21+0000\n"
|
"PO-Revision-Date: 2013-08-06 09:41+0000\n"
|
||||||
"Last-Translator: fanvil <fanvil@hotmail.com>\n"
|
"Last-Translator: fanvil <fanvil@hotmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2013-07-24 05:31+0000\n"
|
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
|
||||||
"X-Generator: Launchpad (build 16700)\n"
|
"X-Generator: Launchpad (build 16721)\n"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead.report:0
|
#: view:crm.lead.report:0
|
||||||
|
@ -185,7 +185,7 @@ msgstr "预计结束月份"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Holds the Chatter summary (number of messages, ...). This summary is "
|
"Holds the Chatter summary (number of messages, ...). This summary is "
|
||||||
"directly in html format in order to be inserted in kanban views."
|
"directly in html format in order to be inserted in kanban views."
|
||||||
msgstr "保留复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。"
|
msgstr "保留复杂的摘要(消息数量,……等)。这一摘要直接是是HTML格式,以便插入到看板视图。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: code:addons/crm/crm_lead.py:640
|
#: code:addons/crm/crm_lead.py:640
|
||||||
|
@ -583,6 +583,7 @@ msgid ""
|
||||||
" If the call needs to be done then the status is set "
|
" If the call needs to be done then the status is set "
|
||||||
"to 'Not Held'."
|
"to 'Not Held'."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"当一个案子新建时,状态被设为‘待处理’,当案子进行中,状态被设为‘打开’,当电话结束,状态被设为‘挂起’。如果需要电话,状态设为‘未挂起’"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: field:crm.case.section,message_summary:0
|
#: field:crm.case.section,message_summary:0
|
||||||
|
@ -843,7 +844,7 @@ msgstr "参考2"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Link between stages and sales teams. When set, this limitate the current "
|
"Link between stages and sales teams. When set, this limitate the current "
|
||||||
"stage to the selected sales teams."
|
"stage to the selected sales teams."
|
||||||
msgstr ""
|
msgstr "在阶段和销售团队之间建立链接。设置后将限制此阶段只能用于被选中的销售团队。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.case.stage:0
|
#: view:crm.case.stage:0
|
||||||
|
@ -979,7 +980,7 @@ msgstr "下一动作"
|
||||||
#: code:addons/crm/crm_lead.py:780
|
#: code:addons/crm/crm_lead.py:780
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "<b>Partner</b> set to <em>%s</em>."
|
msgid "<b>Partner</b> set to <em>%s</em>."
|
||||||
msgstr ""
|
msgstr "<b>业务伙伴</b> 设给 <em>%s</em>."
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: selection:crm.lead.report,state:0
|
#: selection:crm.lead.report,state:0
|
||||||
|
@ -1338,7 +1339,7 @@ msgstr "发送邮件的时候,默认的邮件地址来自销售团队。"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Phone Calls Assigned to the current user or with a team having the current "
|
"Phone Calls Assigned to the current user or with a team having the current "
|
||||||
"user as team leader"
|
"user as team leader"
|
||||||
msgstr ""
|
msgstr "被分配给当前用户或者当前用户领导的销售团队的电话沟通任务。"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.segmentation:0
|
#: view:crm.segmentation:0
|
||||||
|
@ -2884,7 +2885,7 @@ msgstr "发现日期"
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: view:crm.lead:0
|
#: view:crm.lead:0
|
||||||
msgid "at"
|
msgid "at"
|
||||||
msgstr ""
|
msgstr "在"
|
||||||
|
|
||||||
#. module: crm
|
#. module: crm
|
||||||
#: model:crm.case.stage,name:crm.stage_lead1
|
#: model:crm.case.stage,name:crm.stage_lead1
|
||||||
|
|
|
@ -21,15 +21,7 @@
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from .. import crm
|
from openerp.addons.crm import crm
|
||||||
|
|
||||||
AVAILABLE_STATES = [
|
|
||||||
('draft','Draft'),
|
|
||||||
('open','Open'),
|
|
||||||
('cancel', 'Cancelled'),
|
|
||||||
('done', 'Closed'),
|
|
||||||
('pending','Pending')
|
|
||||||
]
|
|
||||||
|
|
||||||
MONTHS = [
|
MONTHS = [
|
||||||
('01', 'January'),
|
('01', 'January'),
|
||||||
|
@ -66,11 +58,12 @@ class crm_lead_report(osv.osv):
|
||||||
|
|
||||||
# other date fields
|
# other date fields
|
||||||
'create_date': fields.datetime('Create Date', readonly=True),
|
'create_date': fields.datetime('Create Date', readonly=True),
|
||||||
'opening_date': fields.date('Opening Date', readonly=True),
|
'opening_date': fields.date('Assignation Date', readonly=True),
|
||||||
'date_closed': fields.date('Close Date', readonly=True),
|
'date_closed': fields.date('Close Date', readonly=True),
|
||||||
|
'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
|
||||||
|
|
||||||
# durations
|
# durations
|
||||||
'delay_open': fields.float('Delay to Open',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
|
'delay_open': fields.float('Delay to Assign',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
|
||||||
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
|
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
|
||||||
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
|
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
|
||||||
|
|
||||||
|
@ -79,7 +72,6 @@ class crm_lead_report(osv.osv):
|
||||||
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
|
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
|
||||||
'channel_id':fields.many2one('crm.case.channel', 'Channel', readonly=True),
|
'channel_id':fields.many2one('crm.case.channel', 'Channel', readonly=True),
|
||||||
'type_id':fields.many2one('crm.case.resource.type', 'Campaign', readonly=True),
|
'type_id':fields.many2one('crm.case.resource.type', 'Campaign', readonly=True),
|
||||||
'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
|
|
||||||
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
'company_id': fields.many2one('res.company', 'Company', readonly=True),
|
||||||
'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"),
|
'probability': fields.float('Probability',digits=(16,2),readonly=True, group_operator="avg"),
|
||||||
'planned_revenue': fields.float('Planned Revenue',digits=(16,2),readonly=True),
|
'planned_revenue': fields.float('Planned Revenue',digits=(16,2),readonly=True),
|
||||||
|
@ -95,9 +87,6 @@ class crm_lead_report(osv.osv):
|
||||||
],'Type', help="Type is used to separate Leads and Opportunities"),
|
],'Type', help="Type is used to separate Leads and Opportunities"),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def init(self, cr):
|
def init(self, cr):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -109,7 +98,6 @@ class crm_lead_report(osv.osv):
|
||||||
CREATE OR REPLACE VIEW crm_lead_report AS (
|
CREATE OR REPLACE VIEW crm_lead_report AS (
|
||||||
SELECT
|
SELECT
|
||||||
id,
|
id,
|
||||||
|
|
||||||
to_char(c.date_deadline, 'YYYY') as deadline_year,
|
to_char(c.date_deadline, 'YYYY') as deadline_year,
|
||||||
to_char(c.date_deadline, 'MM') as deadline_month,
|
to_char(c.date_deadline, 'MM') as deadline_month,
|
||||||
to_char(c.date_deadline, 'YYYY-MM-DD') as deadline_day,
|
to_char(c.date_deadline, 'YYYY-MM-DD') as deadline_day,
|
||||||
|
@ -121,7 +109,8 @@ class crm_lead_report(osv.osv):
|
||||||
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
|
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
|
||||||
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
||||||
|
|
||||||
c.state,
|
date_trunc('day',c.date_last_stage_update) as date_last_stage_update,
|
||||||
|
|
||||||
c.user_id,
|
c.user_id,
|
||||||
c.probability,
|
c.probability,
|
||||||
c.stage_id,
|
c.stage_id,
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<field name="creation_month" invisible="1"/>
|
<field name="creation_month" invisible="1"/>
|
||||||
<field name="creation_day" invisible="1"/>
|
<field name="creation_day" invisible="1"/>
|
||||||
<field name="deadline_month" invisible="1"/>
|
<field name="deadline_month" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
<field name="date_last_stage_update" invisible="1"/>
|
||||||
<field name="stage_id" invisible="1"/>
|
<field name="stage_id" invisible="1"/>
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
<field name="channel_id" invisible="1"/>
|
<field name="channel_id" invisible="1"/>
|
||||||
|
@ -69,10 +69,12 @@
|
||||||
<filter icon="terp-personal" name="lead" string="Lead" domain="[('type','=', 'lead')]" help="Show only lead"/>
|
<filter icon="terp-personal" name="lead" string="Lead" domain="[('type','=', 'lead')]" help="Show only lead"/>
|
||||||
<filter icon="terp-personal+" string="Opportunity" name="opportunity" domain="[('type','=','opportunity')]" help="Show only opportunity"/>
|
<filter icon="terp-personal+" string="Opportunity" name="opportunity" domain="[('type','=','opportunity')]" help="Show only opportunity"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter icon="terp-check" string="New" domain="[('state','=','draft')]" help="Leads/Opportunities which are in New state"/>
|
<filter string="New" name="new"
|
||||||
<filter icon="terp-camera_test" string="Open" domain="[('state','=','open')]" help="Leads/Opportunities which are in open state"/>
|
domain="[('probability', '=', 0), ('stage_id.sequence', '=', 1)]"/>
|
||||||
<filter icon="gtk-media-pause" string="Pending" domain="[('state','=','pending')]" help="Leads/Opportunities which are in pending state"/>
|
<filter string="Won" name="won"
|
||||||
<filter icon="terp-dialog-close" string="Closed" domain="[('state','=','done')]" help="Leads/Opportunities which are in done state"/>
|
domain="[('probability', '=', 100), ('stage_id.on_change', '=', 1)]"/>
|
||||||
|
<filter string="Lost" name="lost"
|
||||||
|
domain="[('probability', '=', 0), ('stage_id.sequence', '!=', 1)]"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]"
|
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]"
|
||||||
help="Leads/Opportunities that are assigned to one of the sale teams I manage" groups="base.group_multi_salesteams"/>
|
help="Leads/Opportunities that are assigned to one of the sale teams I manage" groups="base.group_multi_salesteams"/>
|
||||||
|
@ -120,6 +122,7 @@
|
||||||
<separator orientation="vertical" />
|
<separator orientation="vertical" />
|
||||||
<filter string="Exp. Closing" icon="terp-go-month"
|
<filter string="Exp. Closing" icon="terp-go-month"
|
||||||
domain="[]" context="{'group_by':'deadline_month'}"/>
|
domain="[]" context="{'group_by':'deadline_month'}"/>
|
||||||
|
<filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}" />
|
||||||
</group>
|
</group>
|
||||||
</search>
|
</search>
|
||||||
</field>
|
</field>
|
||||||
|
@ -131,7 +134,7 @@
|
||||||
<field name="name">crm.lead.report.tree</field>
|
<field name="name">crm.lead.report.tree</field>
|
||||||
<field name="model">crm.lead.report</field>
|
<field name="model">crm.lead.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree colors="blue:state == 'draft';black:state in ('open','pending','done');gray:state == 'cancel' " create="false" string="Opportunities Analysis">
|
<tree create="false" string="Opportunities Analysis">
|
||||||
<field name="creation_year" invisible="1"/>
|
<field name="creation_year" invisible="1"/>
|
||||||
<field name="creation_month" invisible="1"/>
|
<field name="creation_month" invisible="1"/>
|
||||||
<field name="creation_day" invisible="1"/>
|
<field name="creation_day" invisible="1"/>
|
||||||
|
@ -141,7 +144,6 @@
|
||||||
<field name="user_id" invisible="1"/>
|
<field name="user_id" invisible="1"/>
|
||||||
<field name="partner_id" invisible="1"/>
|
<field name="partner_id" invisible="1"/>
|
||||||
<field name="country_id" invisible="1"/>
|
<field name="country_id" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
<field name="stage_id" invisible="1"/>
|
<field name="stage_id" invisible="1"/>
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
|
@ -150,8 +152,9 @@
|
||||||
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
||||||
<field name="nbr" string="#Opportunities" sum="#Opportunities"/>
|
<field name="nbr" string="#Opportunities" sum="#Opportunities"/>
|
||||||
<field name="planned_revenue" sum="Planned Revenues"/>
|
<field name="planned_revenue" sum="Planned Revenues"/>
|
||||||
<field name="delay_open" sum='Delay to open'/>
|
<field name="delay_open" sum='Delay to Assign'/>
|
||||||
<field name="delay_close" sum='Delay to close'/>
|
<field name="delay_close" sum='Delay to close'/>
|
||||||
|
<field name="date_last_stage_update"/>
|
||||||
<field name="delay_expected"/>
|
<field name="delay_expected"/>
|
||||||
<field name="probability" widget="progressbar"/>
|
<field name="probability" widget="progressbar"/>
|
||||||
<field name="probable_revenue"/>
|
<field name="probable_revenue"/>
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.osv import fields,osv
|
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from .. import crm
|
from openerp.addons.crm import crm
|
||||||
|
from openerp.osv import fields, osv
|
||||||
|
|
||||||
AVAILABLE_STATES = [
|
AVAILABLE_STATES = [
|
||||||
('draft', 'Draft'),
|
('draft', 'Draft'),
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<field name="nbr" string="#Phone calls" sum="#Phone calls"/>
|
<field name="nbr" string="#Phone calls" sum="#Phone calls"/>
|
||||||
<field name="duration" avg="Duration"/>
|
<field name="duration" avg="Duration"/>
|
||||||
<field name="delay_close" avg="Avg Closing Delay"/>
|
<field name="delay_close" avg="Avg Closing Delay"/>
|
||||||
<field name="delay_open" sum='Delay to open'/>
|
<field name="delay_open" sum='Delay to Assign'/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -41,7 +41,7 @@ class res_partner(osv.osv):
|
||||||
_columns = {
|
_columns = {
|
||||||
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
|
||||||
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
|
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
|
||||||
'Leads and Opportunities', domain=[('state','in', ('draft','open','pending'))]),
|
'Leads and Opportunities', domain=[('probability' 'not in', ['0', '100'])]),
|
||||||
'meeting_ids': fields.many2many('crm.meeting', 'crm_meeting_partner_rel','partner_id', 'meeting_id',
|
'meeting_ids': fields.many2many('crm.meeting', 'crm_meeting_partner_rel','partner_id', 'meeting_id',
|
||||||
'Meetings'),
|
'Meetings'),
|
||||||
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
|
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
|
||||||
|
@ -87,7 +87,6 @@ class res_partner(osv.osv):
|
||||||
'probability' : probability,
|
'probability' : probability,
|
||||||
'partner_id' : partner_id,
|
'partner_id' : partner_id,
|
||||||
'categ_ids' : categ_ids and categ_ids[0:1] or [],
|
'categ_ids' : categ_ids and categ_ids[0:1] or [],
|
||||||
'state' :'draft',
|
|
||||||
'type': 'opportunity'
|
'type': 'opportunity'
|
||||||
}, context=context)
|
}, context=context)
|
||||||
opportunity_ids[partner_id] = opportunity_id
|
opportunity_ids[partner_id] = opportunity_id
|
||||||
|
|
|
@ -1,9 +1,14 @@
|
||||||
-
|
-
|
||||||
I set a new sale team (with Marketing at parent) and I cancel unqualified lead .
|
I set a new sale team (with Marketing at parent) .
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
section_id = self.pool.get('crm.case.section').create(cr, uid, {'name': "Phone Marketing", 'parent_id': ref("crm.crm_case_section_2")})
|
section_id = self.pool.get('crm.case.section').create(cr, uid, {'name': "Phone Marketing", 'parent_id': ref("crm.crm_case_section_2")})
|
||||||
self.write(cr, uid, [ref("crm_case_1")], {'section_id': section_id})
|
self.write(cr, uid, [ref("crm_case_1")], {'section_id': section_id})
|
||||||
|
-
|
||||||
|
I check unqualified lead .
|
||||||
|
-
|
||||||
|
!assert {model: crm.lead, id: crm.crm_case_1, string: Lead is in new stage}:
|
||||||
|
- stage_id.sequence == 1
|
||||||
-
|
-
|
||||||
I escalate the lead to parent team.
|
I escalate the lead to parent team.
|
||||||
-
|
-
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
-
|
||||||
|
I create a new lead.
|
||||||
|
-
|
||||||
|
!record {model: crm.lead, id: test_crm_lead_new}:
|
||||||
|
type: 'lead'
|
||||||
|
name: 'Test lead new'
|
||||||
|
partner_id: base.res_partner_1
|
||||||
|
description: This is the description of the test new lead.
|
||||||
|
section_id: crm.section_sales_department
|
||||||
|
-
|
||||||
|
I check default stage of lead.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
stage = self.pool.get('crm.case.stage').search_read(cr,uid,[('sequence','=',1)],['id'],context)[0]
|
||||||
|
lead = self.browse(cr, uid, ref('test_crm_lead_new'))
|
||||||
|
stage_id = self.stage_find(cr, uid , [lead], lead.section_id.id or False,[], context)
|
||||||
|
assert stage_id == stage['id'], "Default stage of lead is incorrect!"
|
||||||
|
-
|
||||||
|
I change type from lead to opportunity.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
self.convert_opportunity(cr, uid ,[ref("test_crm_lead_new")], ref("base.res_partner_2"))
|
||||||
|
-
|
||||||
|
Now I check default stage after change type.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
stage = self.pool.get('crm.case.stage').search_read(cr,uid,[('sequence','=',1)],['id'],context)[0]
|
||||||
|
opp = self.browse(cr, uid, ref('test_crm_lead_new'))
|
||||||
|
stage_id = self.stage_find(cr, uid , [opp], opp.section_id.id or False,[], context)
|
||||||
|
assert stage_id == stage['id'], "Default stage of opportunity is incorrect!"
|
||||||
|
-
|
||||||
|
Now I change the stage of opportunity to won.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
self.case_mark_won(cr, uid, [ref("test_crm_lead_new")])
|
||||||
|
-
|
||||||
|
I check statge of opp should won, after change stage.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
opp = self.browse(cr, uid, ref('test_crm_lead_new'))
|
||||||
|
stage_id = self.stage_find(cr, uid , [opp], opp.section_id.id or False,[('probability','=',100.0)], context)
|
||||||
|
assert stage_id == opp.stage_id.id, "Stage of opportunity is incorrect!"
|
||||||
|
|
|
@ -2,29 +2,29 @@
|
||||||
-
|
-
|
||||||
During a mixed merge (involving leads and opps), data should be handled a certain way following their type (m2o, m2m, text, ...) Start by creating two leads and an opp.
|
During a mixed merge (involving leads and opps), data should be handled a certain way following their type (m2o, m2m, text, ...) Start by creating two leads and an opp.
|
||||||
-
|
-
|
||||||
!record {model: crm.lead, id: test_crm_lead_01}:
|
!record {model: crm.lead, id: test_crm_opp_1}:
|
||||||
type: 'lead'
|
|
||||||
name: 'Test lead 1'
|
|
||||||
partner_id: base.res_partner_1
|
|
||||||
stage_id: stage_lead1
|
|
||||||
description: This is the description of the test lead 1.
|
|
||||||
-
|
|
||||||
!record {model: crm.lead, id: test_crm_lead_02}:
|
|
||||||
type: 'lead'
|
|
||||||
name: 'Test lead 2'
|
|
||||||
partner_id: base.res_partner_3
|
|
||||||
stage_id: stage_lead1
|
|
||||||
description: This is the description of the test lead 2.
|
|
||||||
-
|
|
||||||
!record {model: crm.lead, id: test_crm_opp_01}:
|
|
||||||
type: 'opportunity'
|
type: 'opportunity'
|
||||||
name: 'Test opportunity 1'
|
name: 'Test opportunity 1'
|
||||||
partner_id: base.res_partner_5
|
partner_id: base.res_partner_5
|
||||||
stage_id: stage_lead1
|
stage_id: stage_lead1
|
||||||
description: This is the description of the test opp 1.
|
description: This is the description of the test opp 1.
|
||||||
|
-
|
||||||
|
!record {model: crm.lead, id: test_crm_lead_first}:
|
||||||
|
type: 'lead'
|
||||||
|
name: 'Test lead first'
|
||||||
|
partner_id: base.res_partner_1
|
||||||
|
stage_id: stage_lead1
|
||||||
|
description: This is the description of the test lead first.
|
||||||
|
-
|
||||||
|
!record {model: crm.lead, id: test_crm_lead_second}:
|
||||||
|
type: 'lead'
|
||||||
|
name: 'Test lead second'
|
||||||
|
partner_id: base.res_partner_1
|
||||||
|
stage_id: stage_lead1
|
||||||
|
description: This is the description of the test lead second.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
lead_ids = [ref('test_crm_lead_01'), ref('test_crm_lead_02'), ref('test_crm_opp_01')]
|
lead_ids = [ref('test_crm_opp_1'), ref('test_crm_lead_first'), ref('test_crm_lead_second')]
|
||||||
context.update({'active_model': 'crm.lead', 'active_ids': lead_ids, 'active_id': lead_ids[0]})
|
context.update({'active_model': 'crm.lead', 'active_ids': lead_ids, 'active_id': lead_ids[0]})
|
||||||
-
|
-
|
||||||
I create a merge wizard and merge the leads and opp together in the first item of the list.
|
I create a merge wizard and merge the leads and opp together in the first item of the list.
|
||||||
|
@ -38,18 +38,19 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
merge_id = self.search(cr, uid, [('name', '=', 'Test opportunity 1'), ('partner_id','=', ref("base.res_partner_5"))])
|
merge_id = self.search(cr, uid, [('name', '=', 'Test opportunity 1'), ('partner_id','=', ref("base.res_partner_5"))])
|
||||||
|
|
||||||
assert merge_id, 'Fail to create merge opportunity wizard'
|
assert merge_id, 'Fail to create merge opportunity wizard'
|
||||||
merge_result = self.browse(cr, uid, merge_id)[0]
|
merge_result = self.browse(cr, uid, merge_id)[0]
|
||||||
assert merge_result.description == 'This is the description of the test opp 1.\n\nThis is the description of the test lead 1.\n\nThis is the description of the test lead 2.', 'Description mismatch: when merging leads/opps with different text values, these values should get concatenated and separated with line returns'
|
assert merge_result.description == 'This is the description of the test opp 1.\n\nThis is the description of the test lead first.\n\nThis is the description of the test lead second.', 'Description mismatch: when merging leads/opps with different text values, these values should get concatenated and separated with line returns'
|
||||||
assert merge_result.type == 'opportunity', 'Type mismatch: when at least one opp in involved in the merge, the result should be a new opp (instead of %s)' % merge_result.type
|
assert merge_result.type == 'opportunity', 'Type mismatch: when at least one opp in involved in the merge, the result should be a new opp (instead of %s)' % merge_result.type
|
||||||
-
|
-
|
||||||
The other (tailing) leads/opps shouldn't exist anymore.
|
The other (tailing) leads/opps shouldn't exist anymore.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
tailing_lead = self.search(cr, uid, [('id', '=', ref('test_crm_lead_01'))])
|
tailing_lead = self.search(cr, uid, [('id', '=', ref('test_crm_lead_first'))])
|
||||||
assert not tailing_lead, 'This tailing lead (id %s) should not exist anymore' % ref('test_crm_lead_02')
|
assert not tailing_lead, 'This tailing lead (id %s) should not exist anymore' % ref('test_crm_lead_second')
|
||||||
|
|
||||||
tailing_opp = self.search(cr, uid, [('id', '=', ref('test_crm_lead_02'))])
|
tailing_opp = self.search(cr, uid, [('id', '=', ref('test_crm_lead_second'))])
|
||||||
assert not tailing_opp, 'This tailing opp (id %s) should not exist anymore' % ref('test_crm_opp_01')
|
assert not tailing_opp, 'This tailing opp (id %s) should not exist anymore' % ref('test_crm_opp_01')
|
||||||
-
|
-
|
||||||
I want to test leads merge. Start by creating two leads (with the same partner).
|
I want to test leads merge. Start by creating two leads (with the same partner).
|
||||||
|
|
|
@ -6,14 +6,13 @@
|
||||||
partner_id: base.res_partner_2
|
partner_id: base.res_partner_2
|
||||||
type: opportunity
|
type: opportunity
|
||||||
stage_id: crm.stage_lead1
|
stage_id: crm.stage_lead1
|
||||||
state: draft
|
|
||||||
-
|
-
|
||||||
I create a lead record to call a mailing opt-out onchange method.
|
I create a lead record to call a mailing opt-out onchange method.
|
||||||
-
|
-
|
||||||
!record {model: crm.lead, id: crm_case_18}:
|
!record {model: crm.lead, id: crm_case_18}:
|
||||||
name: 'Need 20 Days of Consultancy'
|
name: 'Need 20 Days of Consultancy'
|
||||||
type: opportunity
|
type: opportunity
|
||||||
state: draft
|
stage_id: crm.stage_lead1
|
||||||
opt_out: True
|
opt_out: True
|
||||||
-
|
-
|
||||||
I create a phonecall record to call a partner onchange method.
|
I create a phonecall record to call a partner onchange method.
|
||||||
|
|
|
@ -1,15 +1,25 @@
|
||||||
-
|
-
|
||||||
In order to test the conversion of a lead into a opportunity,
|
In order to test the conversion of a lead into a opportunity,
|
||||||
|
-
|
||||||
|
I set lead to open stage.
|
||||||
|
-
|
||||||
|
!python {model: crm.lead}: |
|
||||||
|
self.write(cr, uid, [ref("crm_case_3")],{'stage_id':ref("stage_lead1")})
|
||||||
|
-
|
||||||
|
I check if the lead stage is "Open".
|
||||||
|
-
|
||||||
|
!assert {model: crm.lead, id: crm.crm_case_3, string: Lead stage is Open}:
|
||||||
|
- stage_id.sequence == 1
|
||||||
-
|
-
|
||||||
I convert lead into opportunity for exiting customer.
|
I convert lead into opportunity for exiting customer.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
self.convert_opportunity(cr, uid ,[ref("crm_case_1")], ref("base.res_partner_2"))
|
self.convert_opportunity(cr, uid ,[ref("crm_case_3")], ref("base.res_partner_2"))
|
||||||
-
|
-
|
||||||
I check details of converted opportunity.
|
I check details of converted opportunity.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
lead = self.browse(cr, uid, ref('crm_case_1'))
|
lead = self.browse(cr, uid, ref('crm_case_3'))
|
||||||
assert lead.type == 'opportunity', 'Lead is not converted to opportunity!'
|
assert lead.type == 'opportunity', 'Lead is not converted to opportunity!'
|
||||||
assert lead.partner_id.id == ref("base.res_partner_2"), 'Partner mismatch!'
|
assert lead.partner_id.id == ref("base.res_partner_2"), 'Partner mismatch!'
|
||||||
assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!'
|
assert lead.stage_id.id == ref("stage_lead1"), 'Stage of opportunity is incorrect!'
|
||||||
|
@ -18,7 +28,7 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.opportunity2phonecall}: |
|
!python {model: crm.opportunity2phonecall}: |
|
||||||
import time
|
import time
|
||||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_1')]})
|
context.update({'active_model': 'crm.lead', 'active_ids': [ref('crm_case_3')]})
|
||||||
call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
call_id = self.create(cr, uid, {'date': time.strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
'name': "Bonjour M. Jean, Comment allez-vous? J'ai bien reçu votre demande, pourrions-nous en parler quelques minutes?"}, context=context)
|
'name': "Bonjour M. Jean, Comment allez-vous? J'ai bien reçu votre demande, pourrions-nous en parler quelques minutes?"}, context=context)
|
||||||
self.action_schedule(cr, uid, [call_id], context=context)
|
self.action_schedule(cr, uid, [call_id], context=context)
|
||||||
|
@ -26,46 +36,46 @@
|
||||||
I check that phonecall is scheduled for that opportunity.
|
I check that phonecall is scheduled for that opportunity.
|
||||||
-
|
-
|
||||||
!python {model: crm.phonecall}: |
|
!python {model: crm.phonecall}: |
|
||||||
ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_1'))])
|
ids = self.search(cr, uid, [('opportunity_id', '=', ref('crm_case_3'))])
|
||||||
assert len(ids), 'Phonecall is not scheduled'
|
assert len(ids), 'Phonecall is not scheduled'
|
||||||
-
|
-
|
||||||
Now I schedule meeting with customer.
|
Now I schedule meeting with customer.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
self.action_makeMeeting(cr, uid, [ref('crm_case_1')])
|
self.action_makeMeeting(cr, uid, [ref('crm_case_3')])
|
||||||
-
|
-
|
||||||
After communicated with customer, I put some notes with contract details.
|
After communicated with customer, I put some notes with contract details.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
self.message_post(cr, uid, [ref('crm_case_1')], subject='Test note', body='Détails envoyés par le client sur le FAX pour la qualité')
|
self.message_post(cr, uid, [ref('crm_case_3')], subject='Test note', body='Détails envoyés par le client sur le FAX pour la qualité')
|
||||||
-
|
-
|
||||||
I win this opportunity
|
I win this opportunity
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
self.case_mark_won(cr, uid, [ref("crm_case_1")])
|
self.case_mark_won(cr, uid, [ref("crm_case_3")])
|
||||||
-
|
-
|
||||||
I check details of the opportunity after having won the opportunity.
|
I check details of the opportunity after having won the opportunity.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
lead = self.browse(cr, uid, ref('crm_case_1'))
|
lead = self.browse(cr, uid, ref('crm_case_3'))
|
||||||
assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'."
|
assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'."
|
||||||
assert lead.state == 'done', "Opportunity is not in 'done' state!"
|
assert lead.stage_id.probability == 100.0, "Opportunity is not 'done'"
|
||||||
assert lead.probability == 100.0, "Revenue probability should be 100.0!"
|
assert lead.probability == 100.0, "Revenue probability should be 100.0!"
|
||||||
-
|
-
|
||||||
I convert mass lead into opportunity customer.
|
I convert mass lead into opportunity customer.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead2opportunity.partner.mass}: |
|
!python {model: crm.lead2opportunity.partner.mass}: |
|
||||||
context.update({'active_model': 'crm.lead', 'active_ids': [ref("crm_case_11"), ref("crm_case_2")], 'active_id': ref("crm_case_11")})
|
context.update({'active_model': 'crm.lead', 'active_ids': [ref("crm_case_13"), ref("crm_case_2")], 'active_id': ref("crm_case_13")})
|
||||||
id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('base.user_root')])], 'section_id': ref('crm.section_sales_department')}, context=context)
|
id = self.create(cr, uid, {'user_ids': [(6, 0, [ref('base.user_root')])], 'section_id': ref('crm.section_sales_department')}, context=context)
|
||||||
self.mass_convert(cr, uid, [id], context=context)
|
self.mass_convert(cr, uid, [id], context=context)
|
||||||
-
|
-
|
||||||
Now I check first lead converted on opportunity.
|
Now I check first lead converted on opportunity.
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
opp = self.browse(cr, uid, ref('crm_case_11'))
|
opp = self.browse(cr, uid, ref('crm_case_13'))
|
||||||
assert opp.name == "Need estimated cost for new project", "Opportunity name not correct"
|
assert opp.name == "Plan to buy 60 keyboards and mouses", "Opportunity name not correct"
|
||||||
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
|
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
|
||||||
expected_partner = "Thomas Passot"
|
expected_partner = "Will McEncroe"
|
||||||
assert opp.partner_id.name == expected_partner, 'Partner mismatch! %s vs %s' % (opp.partner_id.name, expected_partner)
|
assert opp.partner_id.name == expected_partner, 'Partner mismatch! %s vs %s' % (opp.partner_id.name, expected_partner)
|
||||||
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
|
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
|
||||||
-
|
-
|
||||||
|
@ -86,14 +96,15 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.lead}: |
|
!python {model: crm.lead}: |
|
||||||
lead = self.browse(cr, uid, ref('crm_case_2'))
|
lead = self.browse(cr, uid, ref('crm_case_2'))
|
||||||
assert lead.stage_id.id == ref('crm.stage_lead8'), "Opportunity stage should be 'Lost'."
|
assert lead.stage_id.id == ref('crm.stage_lead7'), "Opportunity stage should be 'Lost'."
|
||||||
assert lead.state == 'cancel', "Lost opportunity is not in 'cancel' state!"
|
assert lead.stage_id.sequence != 1 and lead.stage_id.probability == 0.0, "Lost opportunity is not in 'cancel' state!"
|
||||||
assert lead.probability == 0.0, "Revenue probability should be 0.0!"
|
assert lead.probability == 0.0, "Revenue probability should be 0.0!"
|
||||||
-
|
-
|
||||||
I confirm review needs meeting.
|
I confirm review needs meeting.
|
||||||
-
|
-
|
||||||
!python {model: crm.meeting}: |
|
!python {model: crm.meeting}: |
|
||||||
context.update({'active_model': 'crm.meeting'})
|
context.update({'active_model': 'crm.meeting'})
|
||||||
|
self.write(cr, uid, [ref('base_calendar.crm_meeting_4')], {'state': 'open'})
|
||||||
-
|
-
|
||||||
I invite a user for meeting.
|
I invite a user for meeting.
|
||||||
-
|
-
|
||||||
|
|
|
@ -10,43 +10,3 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.phonecall}: |
|
!python {model: crm.phonecall}: |
|
||||||
self.action_make_meeting(cr, uid, [ref("crm.crm_phonecall_6")])
|
self.action_make_meeting(cr, uid, [ref("crm.crm_phonecall_6")])
|
||||||
-
|
|
||||||
I set the phone call to not held.
|
|
||||||
-
|
|
||||||
!python {model: crm.phonecall}: |
|
|
||||||
self.case_pending(cr, uid, [ref("crm.crm_phonecall_6")])
|
|
||||||
-
|
|
||||||
I check that the phone call is in 'Not Held' state.
|
|
||||||
-
|
|
||||||
!assert {model: crm.phonecall, id: crm.crm_phonecall_6, string: Phone call held.}:
|
|
||||||
- state == "pending"
|
|
||||||
-
|
|
||||||
I cancel the phone call.
|
|
||||||
-
|
|
||||||
!python {model: crm.phonecall}: |
|
|
||||||
self.case_cancel(cr, uid, [ref("crm.crm_phonecall_6")])
|
|
||||||
-
|
|
||||||
I check that the phone call is in 'Cancelled' state.
|
|
||||||
-
|
|
||||||
!assert {model: crm.phonecall, id: crm.crm_phonecall_6, string: Phone call is not cancelled.}:
|
|
||||||
- state == "cancel"
|
|
||||||
-
|
|
||||||
I reset the phone call.
|
|
||||||
-
|
|
||||||
!python {model: crm.phonecall}: |
|
|
||||||
self.case_reset(cr, uid, [ref("crm.crm_phonecall_6")])
|
|
||||||
-
|
|
||||||
I check that the phone call is reset.
|
|
||||||
-
|
|
||||||
!assert {model: crm.phonecall, id: crm.crm_phonecall_6, string: Phone call is not reset.}:
|
|
||||||
- state == "open"
|
|
||||||
-
|
|
||||||
I set phone call to held (done).
|
|
||||||
-
|
|
||||||
!python {model: crm.phonecall}: |
|
|
||||||
self.case_close(cr, uid, [ref("crm.crm_phonecall_6")])
|
|
||||||
-
|
|
||||||
I check that the phone call is in 'Held' state.
|
|
||||||
-
|
|
||||||
!assert {model: crm.phonecall, id: crm.crm_phonecall_6, string: Phone call is not held.}:
|
|
||||||
- state == "done"
|
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
|
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp.tools.translate import _
|
from openerp.tools.translate import _
|
||||||
from openerp import tools
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
class crm_lead2opportunity_partner(osv.osv_memory):
|
class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
|
@ -60,11 +59,11 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
|
|
||||||
if partner_id:
|
if partner_id:
|
||||||
# Search for opportunities that have the same partner and that arent done or cancelled
|
# Search for opportunities that have the same partner and that arent done or cancelled
|
||||||
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id), ('state', '!=', 'done')])
|
ids = lead_obj.search(cr, uid, [('partner_id', '=', partner_id), ('probability', '<', '100')])
|
||||||
for id in ids:
|
for id in ids:
|
||||||
tomerge.add(id)
|
tomerge.add(id)
|
||||||
if email:
|
if email:
|
||||||
ids = lead_obj.search(cr, uid, [('email_from', 'ilike', email[0]), ('state', '!=', 'done')])
|
ids = lead_obj.search(cr, uid, [('email_from', 'ilike', email[0]), ('probability', '<', '100')])
|
||||||
for id in ids:
|
for id in ids:
|
||||||
tomerge.add(id)
|
tomerge.add(id)
|
||||||
|
|
||||||
|
@ -105,8 +104,8 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||||
context = {}
|
context = {}
|
||||||
lead_obj = self.pool.get('crm.lead')
|
lead_obj = self.pool.get('crm.lead')
|
||||||
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
for lead in lead_obj.browse(cr, uid, context.get('active_ids', []), context=context):
|
||||||
if lead.state in ['done', 'cancel']:
|
if lead.probability == 100:
|
||||||
raise osv.except_osv(_("Warning!"), _("Closed/Cancelled leads cannot be converted into opportunities."))
|
raise osv.except_osv(_("Warning!"), _("Closed/Dead leads cannot be converted into opportunities."))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
|
def _convert_opportunity(self, cr, uid, ids, vals, context=None):
|
||||||
|
|
|
@ -62,8 +62,7 @@ class crm_merge_opportunity(osv.osv_memory):
|
||||||
def default_get(self, cr, uid, fields, context=None):
|
def default_get(self, cr, uid, fields, context=None):
|
||||||
"""
|
"""
|
||||||
Use active_ids from the context to fetch the leads/opps to merge.
|
Use active_ids from the context to fetch the leads/opps to merge.
|
||||||
In order to get merged, these leads/opps can't be in 'Done' or
|
In order to get merged, these leads/opps can't be in 'Dead' or 'Closed'
|
||||||
'Cancel' state.
|
|
||||||
"""
|
"""
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
|
@ -74,7 +73,7 @@ class crm_merge_opportunity(osv.osv_memory):
|
||||||
opp_ids = []
|
opp_ids = []
|
||||||
opps = self.pool.get('crm.lead').browse(cr, uid, record_ids, context=context)
|
opps = self.pool.get('crm.lead').browse(cr, uid, record_ids, context=context)
|
||||||
for opp in opps:
|
for opp in opps:
|
||||||
if opp.state not in ('done', 'cancel'):
|
if opp.probability < 100:
|
||||||
opp_ids.append(opp.id)
|
opp_ids.append(opp.id)
|
||||||
if 'opportunity_ids' in fields:
|
if 'opportunity_ids' in fields:
|
||||||
res.update({'opportunity_ids': opp_ids})
|
res.update({'opportunity_ids': opp_ids})
|
||||||
|
|
|
@ -42,7 +42,6 @@ class crm_claim_stage(osv.osv):
|
||||||
'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."),
|
'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."),
|
||||||
'section_ids':fields.many2many('crm.case.section', 'section_claim_stage_rel', 'stage_id', 'section_id', string='Sections',
|
'section_ids':fields.many2many('crm.case.section', 'section_claim_stage_rel', 'stage_id', 'section_id', string='Sections',
|
||||||
help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
|
help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
|
||||||
'state': fields.selection(crm.AVAILABLE_STATES, 'Status', required=True, help="The related status for the stage. The status of your document will automatically change regarding the selected stage. For example, if a stage is related to the status 'Close', when your document reaches this stage, it will be automatically have the 'closed' status."),
|
|
||||||
'case_default': fields.boolean('Common to All Teams',
|
'case_default': fields.boolean('Common to All Teams',
|
||||||
help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
|
help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
|
||||||
'fold': fields.boolean('Hide in Views when Empty',
|
'fold': fields.boolean('Hide in Views when Empty',
|
||||||
|
@ -51,7 +50,6 @@ class crm_claim_stage(osv.osv):
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'sequence': lambda *args: 1,
|
'sequence': lambda *args: 1,
|
||||||
'state': 'draft',
|
|
||||||
'fold': False,
|
'fold': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +68,7 @@ class crm_claim(osv.osv):
|
||||||
def _get_default_stage_id(self, cr, uid, context=None):
|
def _get_default_stage_id(self, cr, uid, context=None):
|
||||||
""" Gives default stage_id """
|
""" Gives default stage_id """
|
||||||
section_id = self._get_default_section_id(cr, uid, context=context)
|
section_id = self._get_default_section_id(cr, uid, context=context)
|
||||||
return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft')], context=context)
|
return self.stage_find(cr, uid, [], section_id, [('sequence', '=', '1')], context=context)
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'id': fields.integer('ID', readonly=True),
|
'id': fields.integer('ID', readonly=True),
|
||||||
|
@ -105,13 +103,6 @@ class crm_claim(osv.osv):
|
||||||
'stage_id': fields.many2one ('crm.claim.stage', 'Stage', track_visibility='onchange',
|
'stage_id': fields.many2one ('crm.claim.stage', 'Stage', track_visibility='onchange',
|
||||||
domain="['|', ('section_ids', '=', section_id), ('case_default', '=', True)]"),
|
domain="['|', ('section_ids', '=', section_id), ('case_default', '=', True)]"),
|
||||||
'cause': fields.text('Root Cause'),
|
'cause': fields.text('Root Cause'),
|
||||||
'state': fields.related('stage_id', 'state', type="selection", store=True,
|
|
||||||
selection=crm.AVAILABLE_STATES, string="Status", readonly=True,
|
|
||||||
help='The status is set to \'Draft\', when a case is created.\
|
|
||||||
If the case is in progress the status is set to \'Open\'.\
|
|
||||||
When the case is over, the status is set to \'Done\'.\
|
|
||||||
If the case needs to be reviewed then the status is \
|
|
||||||
set to \'Pending\'.'),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_defaults = {
|
_defaults = {
|
||||||
|
|
|
@ -44,28 +44,23 @@
|
||||||
|
|
||||||
<record model="crm.claim.stage" id="stage_claim1">
|
<record model="crm.claim.stage" id="stage_claim1">
|
||||||
<field name="name">New</field>
|
<field name="name">New</field>
|
||||||
<field name="state">draft</field>
|
<field name="sequence">1</field>
|
||||||
<field name="sequence">26</field>
|
|
||||||
<field name="case_default" eval="True"/>
|
<field name="case_default" eval="True"/>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.claim.stage" id="stage_claim5">
|
<record model="crm.claim.stage" id="stage_claim5">
|
||||||
<field name="name">In Progress</field>
|
<field name="name">In Progress</field>
|
||||||
<field name="state">open</field>
|
|
||||||
<field name="sequence">27</field>
|
<field name="sequence">27</field>
|
||||||
<field name="case_default" eval="True"/>
|
<field name="case_default" eval="True"/>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.claim.stage" id="stage_claim2">
|
<record model="crm.claim.stage" id="stage_claim2">
|
||||||
<field name="name">Settled</field>
|
<field name="name">Settled</field>
|
||||||
<field name="state">done</field>
|
|
||||||
<field name="sequence">28</field>
|
<field name="sequence">28</field>
|
||||||
<field name="case_default" eval="True"/>
|
<field name="case_default" eval="True"/>
|
||||||
</record>
|
</record>
|
||||||
<record model="crm.claim.stage" id="stage_claim3">
|
<record model="crm.claim.stage" id="stage_claim3">
|
||||||
<field name="name">Rejected</field>
|
<field name="name">Rejected</field>
|
||||||
<field name="state">cancel</field>
|
|
||||||
<field name="sequence">29</field>
|
<field name="sequence">29</field>
|
||||||
<field name="case_default" eval="True"/>
|
<field name="case_default" eval="True"/>
|
||||||
<field name="case_refused" eval="True"/>
|
|
||||||
<field name="fold" eval="True"/>
|
<field name="fold" eval="True"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
<tree string="Claim Stages">
|
<tree string="Claim Stages">
|
||||||
<field name="sequence"/>
|
<field name="sequence"/>
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="state"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -51,7 +50,6 @@
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="case_default"/>
|
<field name="case_default"/>
|
||||||
<field name="sequence"/>
|
<field name="sequence"/>
|
||||||
<field name="state"/>
|
|
||||||
<field name="fold"/>
|
<field name="fold"/>
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
|
@ -79,7 +77,7 @@
|
||||||
<field name="name">CRM - Claims Tree</field>
|
<field name="name">CRM - Claims Tree</field>
|
||||||
<field name="model">crm.claim</field>
|
<field name="model">crm.claim</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Claims" colors="blue:state=='pending' and not(date_deadline and (date_deadline < current_date));gray:state in ('close', 'cancel');red:date_deadline and (date_deadline < current_date)">
|
<tree string="Claims">
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="partner_id"/>
|
<field name="partner_id"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
@ -90,7 +88,6 @@
|
||||||
<field name="categ_id" string="Type"/>
|
<field name="categ_id" string="Type"/>
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="date_closed" invisible="1"/>
|
<field name="date_closed" invisible="1"/>
|
||||||
<field name="state" groups="base.group_no_one"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -113,7 +110,6 @@
|
||||||
<field name="priority"/>
|
<field name="priority"/>
|
||||||
<field name="section_id" groups="base.group_multi_salesteams"/>
|
<field name="section_id" groups="base.group_multi_salesteams"/>
|
||||||
<field name="date_deadline"/>
|
<field name="date_deadline"/>
|
||||||
<field name="state" groups="base.group_no_one"/>
|
|
||||||
</group>
|
</group>
|
||||||
<group colspan="4" col="4">
|
<group colspan="4" col="4">
|
||||||
<notebook>
|
<notebook>
|
||||||
|
@ -191,9 +187,6 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Search Claims">
|
<search string="Search Claims">
|
||||||
<field name="name" string="Claims"/>
|
<field name="name" string="Claims"/>
|
||||||
<filter icon="terp-check" string="New" name="current" domain="[('state','=','draft')]" help="New Claims"/>
|
|
||||||
<filter icon="terp-camera_test" string="In Progress" domain="[('state','=','open')]" help="In Progress Claims"/>
|
|
||||||
<filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]"/>
|
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="Unassigned Claims" icon="terp-personal-" domain="[('user_id','=', False)]" help="Unassigned Claims" />
|
<filter string="Unassigned Claims" icon="terp-personal-" domain="[('user_id','=', False)]" help="Unassigned Claims" />
|
||||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
||||||
|
@ -203,7 +196,6 @@
|
||||||
<filter string="Responsible" icon="terp-personal" domain="[]" help="Responsible User" context="{'group_by':'user_id'}"/>
|
<filter string="Responsible" icon="terp-personal" domain="[]" help="Responsible User" context="{'group_by':'user_id'}"/>
|
||||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}"/>
|
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}"/>
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" groups="base.group_no_one"/>
|
|
||||||
<filter string="Claim Date" icon="terp-go-month" domain="[]" help="Claim Date" context="{'group_by':'date'}"/>
|
<filter string="Claim Date" icon="terp-go-month" domain="[]" help="Claim Date" context="{'group_by':'date'}"/>
|
||||||
<filter string="Deadline" icon="terp-go-month" domain="[]" context="{'group_by':'date_deadline'}"/>
|
<filter string="Deadline" icon="terp-go-month" domain="[]" context="{'group_by':'date_deadline'}"/>
|
||||||
<filter string="Closure" icon="terp-go-month" domain="[]" help="Date Closed" context="{'group_by':'date_closed'}" groups="base.group_no_one"/>
|
<filter string="Closure" icon="terp-go-month" domain="[]" help="Date Closed" context="{'group_by':'date_closed'}" groups="base.group_no_one"/>
|
||||||
|
|
|
@ -22,14 +22,6 @@
|
||||||
from openerp.osv import fields,osv
|
from openerp.osv import fields,osv
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
|
|
||||||
AVAILABLE_STATES = [
|
|
||||||
('draft','Draft'),
|
|
||||||
('open','Open'),
|
|
||||||
('cancel', 'Cancelled'),
|
|
||||||
('done', 'Closed'),
|
|
||||||
('pending','Pending')
|
|
||||||
]
|
|
||||||
|
|
||||||
AVAILABLE_PRIORITIES = [
|
AVAILABLE_PRIORITIES = [
|
||||||
('5', 'Lowest'),
|
('5', 'Lowest'),
|
||||||
('4', 'Low'),
|
('4', 'Low'),
|
||||||
|
@ -51,7 +43,6 @@ class crm_claim_report(osv.osv):
|
||||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||||
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
|
'section_id':fields.many2one('crm.case.section', 'Section', readonly=True),
|
||||||
'nbr': fields.integer('# of Cases', readonly=True),
|
'nbr': fields.integer('# of Cases', readonly=True),
|
||||||
'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
|
|
||||||
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
||||||
('03', 'March'), ('04', 'April'),\
|
('03', 'March'), ('04', 'April'),\
|
||||||
('05', 'May'), ('06', 'June'), \
|
('05', 'May'), ('06', 'June'), \
|
||||||
|
@ -92,7 +83,6 @@ class crm_claim_report(osv.osv):
|
||||||
to_char(c.date, 'YYYY-MM-DD') as day,
|
to_char(c.date, 'YYYY-MM-DD') as day,
|
||||||
to_char(c.date_closed, 'YYYY-MM-DD') as date_closed,
|
to_char(c.date_closed, 'YYYY-MM-DD') as date_closed,
|
||||||
to_char(c.date_deadline, 'YYYY-MM-DD') as date_deadline,
|
to_char(c.date_deadline, 'YYYY-MM-DD') as date_deadline,
|
||||||
c.state,
|
|
||||||
c.user_id,
|
c.user_id,
|
||||||
c.stage_id,
|
c.stage_id,
|
||||||
c.section_id,
|
c.section_id,
|
||||||
|
@ -109,7 +99,7 @@ class crm_claim_report(osv.osv):
|
||||||
from
|
from
|
||||||
crm_claim c
|
crm_claim c
|
||||||
group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),to_char(c.date, 'YYYY-MM-DD'),\
|
group by to_char(c.date, 'YYYY'), to_char(c.date, 'MM'),to_char(c.date, 'YYYY-MM-DD'),\
|
||||||
c.state, c.user_id,c.section_id, c.stage_id,\
|
c.user_id,c.section_id, c.stage_id,\
|
||||||
c.categ_id,c.partner_id,c.company_id,c.create_date,
|
c.categ_id,c.partner_id,c.company_id,c.create_date,
|
||||||
c.priority,c.type_action,c.date_deadline,c.date_closed,c.id
|
c.priority,c.type_action,c.date_deadline,c.date_closed,c.id
|
||||||
)""")
|
)""")
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
<field name="email" sum="# Mails"/>
|
<field name="email" sum="# Mails"/>
|
||||||
<field name="delay_close" avg="Avg Closing Delay"/>
|
<field name="delay_close" avg="Avg Closing Delay"/>
|
||||||
<field name="delay_expected"/>
|
<field name="delay_expected"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
<field name="stage_id" invisible="1"/>
|
<field name="stage_id" invisible="1"/>
|
||||||
<field name="categ_id" invisible="1"/>
|
<field name="categ_id" invisible="1"/>
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
|
@ -37,7 +36,6 @@
|
||||||
<field name="model">crm.claim.report</field>
|
<field name="model">crm.claim.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<graph orientation="horizontal" string="Claims" type="bar">
|
<graph orientation="horizontal" string="Claims" type="bar">
|
||||||
<field name="state"/>
|
|
||||||
<field name="nbr" operator="+"/>
|
<field name="nbr" operator="+"/>
|
||||||
<field group="True" name="user_id"/>
|
<field group="True" name="user_id"/>
|
||||||
</graph>
|
</graph>
|
||||||
|
@ -51,10 +49,6 @@
|
||||||
<field name="model">crm.claim.report</field>
|
<field name="model">crm.claim.report</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Search">
|
<search string="Search">
|
||||||
<filter icon="terp-document-new" string="New" domain="[('state','=','draft')]"/>
|
|
||||||
<filter icon="terp-camera_test" string="Open" domain="[('state','=','open')]"/>
|
|
||||||
<filter icon="terp-gtk-media-pause" string="Pending" domain="[('state','=','pending')]"/>
|
|
||||||
<separator/>
|
|
||||||
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/>
|
<filter string="My Sales Team(s)" icon="terp-personal+" context="{'invisible_section': False}" domain="[('section_id.user_id','=',uid)]" help="My Sales Team(s)" groups="base.group_multi_salesteams"/>
|
||||||
<separator/>
|
<separator/>
|
||||||
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[('section_id.user_id.company_id','=',uid)]" help="My company"/>
|
<filter string="My Company" icon="terp-go-home" context="{'invisible_section': False}" domain="[('section_id.user_id.company_id','=',uid)]" help="My company"/>
|
||||||
|
@ -73,8 +67,6 @@
|
||||||
<field name="create_date" />
|
<field name="create_date" />
|
||||||
<field name="date_closed" />
|
<field name="date_closed" />
|
||||||
<field name="date_deadline" />
|
<field name="date_deadline" />
|
||||||
<filter icon="terp-dialog-close" string="Done" domain="[('state','=','done')]"/>
|
|
||||||
<filter icon="gtk-cancel" string="Cancel" domain="[('state','=','cancel')]"/>
|
|
||||||
</group>
|
</group>
|
||||||
<group expand="1" string="Group By...">
|
<group expand="1" string="Group By...">
|
||||||
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />
|
<filter string="Salesperson" name="Salesperson" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />
|
||||||
|
@ -84,7 +76,6 @@
|
||||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" />
|
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'categ_id'}" />
|
||||||
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_action'}" help="Action Type"/>
|
<filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type_action'}" help="Action Type"/>
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" />
|
|
||||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||||
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}" help="Date of claim"/>
|
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}" help="Date of claim"/>
|
||||||
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}" help="Month of claim"/>
|
<filter string="Month" icon="terp-go-month" domain="[]" context="{'group_by':'month'}" help="Month of claim"/>
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
from openerp.addons.base_status.base_state import base_state
|
|
||||||
from openerp.addons.crm import crm
|
from openerp.addons.crm import crm
|
||||||
from openerp.osv import fields, osv
|
from openerp.osv import fields, osv
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
|
@ -27,7 +26,7 @@ from openerp.tools.translate import _
|
||||||
from openerp.tools import html2plaintext
|
from openerp.tools import html2plaintext
|
||||||
|
|
||||||
|
|
||||||
class crm_helpdesk(base_state, osv.osv):
|
class crm_helpdesk(osv.osv):
|
||||||
""" Helpdesk Cases """
|
""" Helpdesk Cases """
|
||||||
|
|
||||||
_name = "crm.helpdesk"
|
_name = "crm.helpdesk"
|
||||||
|
@ -65,7 +64,12 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
domain="['|',('section_id','=',False),('section_id','=',section_id),\
|
domain="['|',('section_id','=',False),('section_id','=',section_id),\
|
||||||
('object_id.model', '=', 'crm.helpdesk')]"),
|
('object_id.model', '=', 'crm.helpdesk')]"),
|
||||||
'duration': fields.float('Duration', states={'done': [('readonly', True)]}),
|
'duration': fields.float('Duration', states={'done': [('readonly', True)]}),
|
||||||
'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True,
|
'state': fields.selection(
|
||||||
|
[('draft', 'New'),
|
||||||
|
('open', 'In Progress'),
|
||||||
|
('pending', 'Pending'),
|
||||||
|
('done', 'Closed'),
|
||||||
|
('cancel', 'Cancelled')], 'Status', size=16, readonly=True, track_visibility='onchange',
|
||||||
help='The status is set to \'Draft\', when a case is created.\
|
help='The status is set to \'Draft\', when a case is created.\
|
||||||
\nIf the case is in progress the status is set to \'Open\'.\
|
\nIf the case is in progress the status is set to \'Open\'.\
|
||||||
\nWhen the case is over, the status is set to \'Done\'.\
|
\nWhen the case is over, the status is set to \'Done\'.\
|
||||||
|
@ -81,6 +85,38 @@ class crm_helpdesk(base_state, osv.osv):
|
||||||
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
|
||||||
|
values = {}
|
||||||
|
if partner_id:
|
||||||
|
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||||
|
values = {
|
||||||
|
'email_from': partner.email,
|
||||||
|
}
|
||||||
|
return {'value': values}
|
||||||
|
|
||||||
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
|
""" Override to add case management: open/close dates """
|
||||||
|
if values.get('state'):
|
||||||
|
if values.get('state') in ['draft', 'open'] and not values.get('date_open'):
|
||||||
|
values['date_open'] = fields.datetime.now()
|
||||||
|
elif values.get('state') == 'close' and not values.get('date_closed'):
|
||||||
|
values['date_closed'] = fields.datetime.now()
|
||||||
|
return super(crm_helpdesk, self).write(cr, uid, ids, values, context=context)
|
||||||
|
|
||||||
|
def case_escalate(self, cr, uid, ids, context=None):
|
||||||
|
""" Escalates case to parent level """
|
||||||
|
data = {'active': True}
|
||||||
|
for case in self.browse(cr, uid, ids, context=context):
|
||||||
|
if case.section_id and case.section_id.parent_id:
|
||||||
|
parent_id = case.section_id.parent_id
|
||||||
|
data['section_id'] = parent_id.id
|
||||||
|
if parent_id.change_responsible and parent_id.user_id:
|
||||||
|
data['user_id'] = parent_id.user_id.id
|
||||||
|
else:
|
||||||
|
raise osv.except_osv(_('Error!'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
|
||||||
|
self.write(cr, uid, [case.id], data, context=context)
|
||||||
|
return True
|
||||||
|
|
||||||
# -------------------------------------------------------
|
# -------------------------------------------------------
|
||||||
# Mail gateway
|
# Mail gateway
|
||||||
# -------------------------------------------------------
|
# -------------------------------------------------------
|
||||||
|
|
|
@ -29,21 +29,10 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Helpdesk Support" version="7.0">
|
<form string="Helpdesk Support" version="7.0">
|
||||||
<header>
|
<header>
|
||||||
<button name="case_open" string="Open" type="object" class="oe_highlight"
|
|
||||||
states="draft,pending"/>
|
|
||||||
<button name="case_close" string="Close Case" type="object" states="draft,pending"/>
|
|
||||||
<button name="case_close" string="Close Case" type="object" states="open" class="oe_highlight"/>
|
|
||||||
<button name="case_pending" string="Pending" type="object"
|
|
||||||
states="draft"/>
|
|
||||||
<button name="case_pending" string="Pending" type="object"
|
|
||||||
states="open"/>
|
|
||||||
<button name="case_reset" string="Reset to Draft" type="object"
|
|
||||||
states="cancel,done"/>
|
|
||||||
<button name="case_escalate" string="Escalate" type="object"
|
<button name="case_escalate" string="Escalate" type="object"
|
||||||
states="open,draft,pending"/>
|
states="open,draft,pending"/>
|
||||||
<button name="case_cancel" string="Cancel Case" type="object"
|
<field name="state" nolabel="1" widget="statusbar" clickable="True"
|
||||||
states="draft,open,pending"/>
|
statusbar_colors='{"pending":"blue"}'/>
|
||||||
<field name="state" nolabel="1" widget="statusbar" statusbar_visible="draft,open,done" statusbar_colors='{"pending":"blue"}'/>
|
|
||||||
</header>
|
</header>
|
||||||
<sheet string="Helpdesk Support">
|
<sheet string="Helpdesk Support">
|
||||||
<group col="4" class="oe_header">
|
<group col="4" class="oe_header">
|
||||||
|
@ -58,8 +47,7 @@
|
||||||
<group>
|
<group>
|
||||||
<group string="Communication">
|
<group string="Communication">
|
||||||
<field name="partner_id"
|
<field name="partner_id"
|
||||||
on_change="onchange_partner_id(partner_id, email_from)"
|
on_change="on_change_partner_id(partner_id)"/>
|
||||||
/>
|
|
||||||
<field name="email_from"/>
|
<field name="email_from"/>
|
||||||
</group>
|
</group>
|
||||||
<group string="Categorization">
|
<group string="Categorization">
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<field name="partner_id" position="after">
|
<field name="partner_id" position="after">
|
||||||
<field name="partner_assigned_id"/>
|
<field name="partner_assigned_id"/>
|
||||||
|
<field name="date_assign" invisible="1"/>
|
||||||
</field>
|
</field>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
@ -60,6 +61,9 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<filter string="Team" position="after">
|
<filter string="Team" position="after">
|
||||||
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
<filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/>
|
||||||
|
<filter string="Assigned Month" icon="terp-go-month"
|
||||||
|
domain="[]" context="{'group_by':'date_assign'}"/>
|
||||||
|
|
||||||
</filter>
|
</filter>
|
||||||
<field name="partner_id" position="after">
|
<field name="partner_id" position="after">
|
||||||
<field name="partner_assigned_id"/>
|
<field name="partner_assigned_id"/>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="priority" eval="32"/>
|
<field name="priority" eval="32"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done');red:stage_id[1]=='Disinterested';black:stage_id[1]=='Interested'">
|
<tree string="Leads" colors="red:stage_id[1]=='Disinterested';black:stage_id[1]=='Interested'">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date"/>
|
<field name="create_date"/>
|
||||||
<field name="name" string="Subject"/>
|
<field name="name" string="Subject"/>
|
||||||
|
@ -18,7 +18,6 @@
|
||||||
<field name="type_id" invisible="1"/>
|
<field name="type_id" invisible="1"/>
|
||||||
<field name="referred" invisible="1"/>
|
<field name="referred" invisible="1"/>
|
||||||
<field name="channel_id" invisible="1"/>
|
<field name="channel_id" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||||
|
|
||||||
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
<button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/>
|
||||||
|
@ -69,7 +68,7 @@
|
||||||
<field name="model">crm.lead</field>
|
<field name="model">crm.lead</field>
|
||||||
<field name="priority" eval="32"/>
|
<field name="priority" eval="32"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done')">
|
<tree string="Leads">
|
||||||
<field name="date_deadline" invisible="1"/>
|
<field name="date_deadline" invisible="1"/>
|
||||||
<field name="create_date" groups="base.group_no_one"/>
|
<field name="create_date" groups="base.group_no_one"/>
|
||||||
<field name="name" string="Opportunity"/>
|
<field name="name" string="Opportunity"/>
|
||||||
|
@ -83,7 +82,6 @@
|
||||||
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
<field name="probability" widget="progressbar" avg="Avg. of Probability"/>
|
||||||
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
<field name="section_id" invisible="context.get('invisible_section', True)" />
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
|
@ -23,13 +23,6 @@ from openerp.osv import fields,osv
|
||||||
from openerp import tools
|
from openerp import tools
|
||||||
from openerp.addons.crm import crm
|
from openerp.addons.crm import crm
|
||||||
|
|
||||||
AVAILABLE_STATES = [
|
|
||||||
('draft','Draft'),
|
|
||||||
('open','Open'),
|
|
||||||
('cancel', 'Cancelled'),
|
|
||||||
('done', 'Closed'),
|
|
||||||
('pending','Pending')
|
|
||||||
]
|
|
||||||
|
|
||||||
class crm_lead_report_assign(osv.osv):
|
class crm_lead_report_assign(osv.osv):
|
||||||
""" CRM Lead Report """
|
""" CRM Lead Report """
|
||||||
|
@ -43,7 +36,6 @@ class crm_lead_report_assign(osv.osv):
|
||||||
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
'user_id':fields.many2one('res.users', 'User', readonly=True),
|
||||||
'country_id':fields.many2one('res.country', 'Country', readonly=True),
|
'country_id':fields.many2one('res.country', 'Country', readonly=True),
|
||||||
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
|
'section_id':fields.many2one('crm.case.section', 'Sales Team', readonly=True),
|
||||||
'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
|
|
||||||
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
'month':fields.selection([('01', 'January'), ('02', 'February'), \
|
||||||
('03', 'March'), ('04', 'April'),\
|
('03', 'March'), ('04', 'April'),\
|
||||||
('05', 'May'), ('06', 'June'), \
|
('05', 'May'), ('06', 'June'), \
|
||||||
|
@ -54,7 +46,7 @@ class crm_lead_report_assign(osv.osv):
|
||||||
'date_assign': fields.date('Partner Date', readonly=True),
|
'date_assign': fields.date('Partner Date', readonly=True),
|
||||||
'create_date': fields.datetime('Create Date', readonly=True),
|
'create_date': fields.datetime('Create Date', readonly=True),
|
||||||
'day': fields.char('Day', size=128, readonly=True),
|
'day': fields.char('Day', size=128, readonly=True),
|
||||||
'delay_open': fields.float('Delay to Open',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
|
'delay_open': fields.float('Delay to Assign',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to open the case"),
|
||||||
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
|
'delay_close': fields.float('Delay to Close',digits=(16,2),readonly=True, group_operator="avg",help="Number of Days to close the case"),
|
||||||
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
|
'delay_expected': fields.float('Overpassed Deadline',digits=(16,2),readonly=True, group_operator="avg"),
|
||||||
'probability': fields.float('Avg Probability',digits=(16,2),readonly=True, group_operator="avg"),
|
'probability': fields.float('Avg Probability',digits=(16,2),readonly=True, group_operator="avg"),
|
||||||
|
@ -91,7 +83,6 @@ class crm_lead_report_assign(osv.osv):
|
||||||
to_char(c.create_date, 'YYYY-MM-DD') as creation_date,
|
to_char(c.create_date, 'YYYY-MM-DD') as creation_date,
|
||||||
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
|
to_char(c.date_open, 'YYYY-MM-DD') as opening_date,
|
||||||
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
|
||||||
c.state,
|
|
||||||
c.date_assign,
|
c.date_assign,
|
||||||
c.user_id,
|
c.user_id,
|
||||||
c.probability,
|
c.probability,
|
||||||
|
@ -110,7 +101,7 @@ class crm_lead_report_assign(osv.osv):
|
||||||
c.planned_revenue*(c.probability/100) as probable_revenue,
|
c.planned_revenue*(c.probability/100) as probable_revenue,
|
||||||
1 as nbr,
|
1 as nbr,
|
||||||
date_trunc('day',c.create_date) as create_date,
|
date_trunc('day',c.create_date) as create_date,
|
||||||
extract('epoch' from (c.date_closed-c.create_date))/(3600*24) as delay_close,
|
extract('epoch' from (c.write_date-c.create_date))/(3600*24) as delay_close,
|
||||||
extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected,
|
extract('epoch' from (c.date_deadline - c.date_closed))/(3600*24) as delay_expected,
|
||||||
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
|
extract('epoch' from (c.date_open-c.create_date))/(3600*24) as delay_open
|
||||||
FROM
|
FROM
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
<field name="model">crm.lead.report.assign</field>
|
<field name="model">crm.lead.report.assign</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<search string="Leads Analysis">
|
<search string="Leads Analysis">
|
||||||
<filter icon="terp-check" string="Current" domain="[('state','in',('draft','open'))]"/>
|
|
||||||
<filter icon="terp-dialog-close" string="Closed" domain="[('state','=','done')]"/>
|
|
||||||
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
<field name="section_id" context="{'invisible_section': False}" groups="base.group_multi_salesteams"/>
|
||||||
<field name="grade_id"/>
|
<field name="grade_id"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
||||||
|
@ -36,7 +34,6 @@
|
||||||
domain="[]" context="{'group_by':'grade_id'}" />
|
domain="[]" context="{'group_by':'grade_id'}" />
|
||||||
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
<filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
|
||||||
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
<filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
|
||||||
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}" />
|
|
||||||
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" />
|
<filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" />
|
||||||
<filter string="Assign Date" icon="terp-go-today" domain="[]" name="group_partner_date" context="{'group_by':'date_assign'}"/>
|
<filter string="Assign Date" icon="terp-go-today" domain="[]" name="group_partner_date" context="{'group_by':'date_assign'}"/>
|
||||||
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}"/>
|
<filter string="Day" icon="terp-go-today" domain="[]" context="{'group_by':'day'}"/>
|
||||||
|
@ -54,7 +51,6 @@
|
||||||
<field name="model">crm.lead.report.assign</field>
|
<field name="model">crm.lead.report.assign</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<graph orientation="horizontal" string="Lead Assign" type="bar">
|
<graph orientation="horizontal" string="Lead Assign" type="bar">
|
||||||
<field name="state"/>
|
|
||||||
<field name="nbr" operator="+"/>
|
<field name="nbr" operator="+"/>
|
||||||
<field group="True" name="user_id"/>
|
<field group="True" name="user_id"/>
|
||||||
</graph>
|
</graph>
|
||||||
|
@ -76,14 +72,13 @@
|
||||||
<field name="partner_id" invisible="1"/>
|
<field name="partner_id" invisible="1"/>
|
||||||
<field name="country_id" invisible="1"/>
|
<field name="country_id" invisible="1"/>
|
||||||
<field name="day" invisible="1"/>
|
<field name="day" invisible="1"/>
|
||||||
<field name="state" invisible="1"/>
|
|
||||||
<field name="stage_id" invisible="1"/>
|
<field name="stage_id" invisible="1"/>
|
||||||
<field name="priority" invisible="1"/>
|
<field name="priority" invisible="1"/>
|
||||||
<field name="type" invisible="1"/>
|
<field name="type" invisible="1"/>
|
||||||
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
<field name="company_id" invisible="1" groups="base.group_multi_company"/>
|
||||||
<field name="nbr" string="#Opportunities" sum="#Opportunities"/>
|
<field name="nbr" string="#Opportunities" sum="#Opportunities"/>
|
||||||
<field name="planned_revenue" sum="Planned Revenues"/>
|
<field name="planned_revenue" sum="Planned Revenues"/>
|
||||||
<field name="delay_open" sum='Delay to open'/>
|
<field name="delay_open" sum='Delay to Assign'/>
|
||||||
<field name="delay_close" sum='Delay to close'/>
|
<field name="delay_close" sum='Delay to close'/>
|
||||||
<field name="delay_expected"/>
|
<field name="delay_expected"/>
|
||||||
<field name="probability" widget="progressbar"/>
|
<field name="probability" widget="progressbar"/>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue